Example #1
0
int MediaSrvDestroy(HANDLE hmedia)
#endif
{
	PMEDIA_OBJECT obj;
	int playback;

	kMutexWait(hMediaMutex);
	
	// 获取音频对象
	obj = (PMEDIA_OBJECT)HandleGet(hmedia, MEDIA_MAGIC);
	if(obj == NULL)
	{
		kdebug(mod_media, PRINT_ERROR, "CLOSE NULL: 0x%x\n", hmedia);
		kMutexRelease(hMediaMutex);
		return -1;
	}
	kdebug(mod_media, PRINT_INFO, "CLOSE: 0x%x\n", hmedia);
	
	// 结束当前正在录放的音频任务
	playback = obj->Cb.MediaClose(obj->Media, 1);
	obj = (PMEDIA_OBJECT)HandleGet(hmedia, MEDIA_MAGIC);
	if(obj == NULL)
	{
		kdebug(mod_media, PRINT_ERROR, "CLOSE NULL NULL: 0x%x\n", hmedia);
		kMutexRelease(hMediaMutex);
		return -1;
	}
	obj->Cb.MediaDestroy(obj->Media);
	
	// 释放当前节点
	ListRemove(&obj->Link);
	HandleDestroy(hmedia, MEDIA_MAGIC);
	if(obj->MediaInfo)
		kfree(obj->MediaInfo);
	kfree(obj);
	
	// 启动下一个等待任务
	if(!ListEmpty(&MediaObjList))
	{
		obj = ListEntry(ListFirst(&MediaObjList), MEDIA_OBJECT, Link);
		if(playback && (obj->Mode == MEDIA_MODE_WAIT))
		{
			if(obj->Cb.MediaOpen(obj->Media) < 0)
			{
				HandleDestroy(obj->Header.Handle, MEDIA_MAGIC);
				if(obj->MediaInfo)
					kfree(obj->MediaInfo);
				kfree(obj);
			}
		}
	}
	kMutexRelease(hMediaMutex);
	return 0;
}
Example #2
0
uint32 Prop::ObjectMessageFn( HOBJECT hSender, ILTMessage_Read *pMsg )
{
	pMsg->SeekTo(0);
	uint32 messageID = pMsg->Readuint32();

	switch(messageID)
	{
		case MID_DAMAGE:
		{
			// Let our damage aggregate process the message first...

            uint32 dwRet = GameBase::ObjectMessageFn(hSender, pMsg);

			// Check to see if we have been destroyed

			if ( m_damage.IsDead() )
			{
				HandleDestroy(m_damage.GetLastDamager());
			}
			else 
			{
				HandleHit( m_damage.GetLastDamager() );
			}

			return dwRet;
		}

		default : break;
	}

	return GameBase::ObjectMessageFn(hSender, pMsg);
}
Example #3
0
////////////////////////////////////////////////////
// 功能: 结束某一任务的媒体播放,并锁定媒体播放任务
// 输入:
// 输出:
// 返回:
// 说明:
////////////////////////////////////////////////////
void MediaTerminateLock(HANDLE htask)
{
	PMEDIA_OBJECT obj;
	PLIST list;
	
	kMutexWait(hMediaMutex);
	list = &MediaObjList;
	if(!ListEmpty(list))
	{
		// 获取正在音频任务节点
		obj = ListEntry(ListFirst(list), MEDIA_OBJECT, Link);
		
		if(obj->hTask == htask)
		{
			// 结束当前正在录放的音频任务
			obj->Cb.MediaClose(obj->Media, 1);
			obj->Cb.MediaDestroy(obj->Media);
			
			ListRemove(&obj->Link);
			HandleDestroy(obj->Header.Handle, MEDIA_MAGIC);
			if(obj->MediaInfo)
				kfree(obj->MediaInfo);
			kfree(obj);
		}
	}
}
Example #4
0
////////////////////////////////////////////////////
// 功能:
// 输入:
// 输出:
// 返回:
// 说明:
////////////////////////////////////////////////////
int MediaSrvDestroyNotify(void *media)
{
	PLIST head;
	PLIST n;
	PMEDIA_OBJECT obj;
	
//	kMutexWait(hMediaMutex);
	head = &MediaObjList;
	
	// 搜索指定音频任务
	for(n = ListFirst(head); n != head; n = ListNext(n))
	{
		obj = ListEntry(n, MEDIA_OBJECT, Link);
		if(obj->Media == media)
		{
			// 释放当前节点
			kdebug(mod_media, PRINT_INFO, "CLOSE Notify: 0x%x\n", obj->Header.Handle);
			ListRemove(&obj->Link);
			HandleDestroy(obj->Header.Handle, MEDIA_MAGIC);			
			if(obj->MediaInfo)
				kfree(obj->MediaInfo);
			kfree(obj);
			
			// 启动下一个等待任务
			n = ListFirst(head);
			if(n != head)
			{
				obj = ListEntry(n, MEDIA_OBJECT, Link);
				if(obj->Mode == MEDIA_MODE_WAIT)
				{
					if(obj->Cb.MediaOpen(obj->Media) < 0)
					{
						ListRemove(&obj->Link);
						HandleDestroy(obj->Header.Handle, MEDIA_MAGIC);
						if(obj->MediaInfo)
							kfree(obj->MediaInfo);
						kfree(obj);
					}
				}
			}
//			kMutexRelease(hMediaMutex);
			return 0;
		}
	}
//	kMutexRelease(hMediaMutex);
	return -1;	
}
Example #5
0
void ResourceHandleDestroy(HandleId id)
{
	Resource* resource = (Resource*) ResourceHandleFind(id);

	if( gs_RemoveResource )
		gs_ResourcesManager->removeResource(resource);
	
	LogDebug("ResourceHandleDestroy: %lu", id);
	HandleDestroy(gs_ResourceHandleManager, id);
}
Example #6
0
bool Prop::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg)
{
	static CParsedMsg::CToken s_cTok_Anim("ANIM");
	static CParsedMsg::CToken s_cTok_AnimLoop("ANIMLOOP");
	static CParsedMsg::CToken s_cTok_Activate("ACTIVATE");
	static CParsedMsg::CToken s_cTok_Remove("REMOVE");
	static CParsedMsg::CToken s_cTok_Destroy("DESTROY");

	uint32 dwFlags;
	g_pCommonLT->GetObjectFlags(m_hObject, OFT_User, dwFlags);

	if ( cMsg.GetArg(0) == s_cTok_Anim )
	{
        g_pLTServer->SetModelLooping(m_hObject, LTFALSE);
        g_pLTServer->SetModelAnimation(m_hObject, g_pLTServer->GetAnimIndex(m_hObject, ( char* )( char const* )cMsg.GetArg( 1 )));
		g_pLTServer->ResetModelAnimation(m_hObject);
		SetNextUpdate(UPDATE_NEXT_FRAME); // Needed to get string keys
	}
	else if ( cMsg.GetArg(0) == s_cTok_AnimLoop )
	{
        g_pLTServer->SetModelLooping(m_hObject, LTTRUE);
        g_pLTServer->SetModelAnimation(m_hObject, g_pLTServer->GetAnimIndex(m_hObject, ( char* )( char const* )cMsg.GetArg( 1 )));
		g_pLTServer->ResetModelAnimation(m_hObject);
		SetNextUpdate(UPDATE_NEXT_FRAME); // Needed to get string keys
	}
	else if ( cMsg.GetArg(0) == s_cTok_Activate )
	{
		if(dwFlags & USRFLG_CAN_ACTIVATE)
		{
			SendActivateMessage( );

 			HandleTouch(hSender);
		}
	}
	else if( cMsg.GetArg(0) == s_cTok_Remove )
	{
		// Remove us...

		g_pLTServer->RemoveObject( m_hObject );
	}
	else if( cMsg.GetArg(0) == s_cTok_Destroy )
	{
		m_damage.HandleDestruction( LTNULL );
		HandleDestroy( LTNULL );
	}
	else
	{
		return GameBase::OnTrigger(hSender, cMsg);
	}

	return true;
}
// WindowProc -- Dispatches and routes window messages
LRESULT cef_main_window::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
    {
    case WM_CREATE:
        if (HandleCreate())
            return 0L;
        break;
    case WM_ERASEBKGND:
        if (HandleEraseBackground())
            return 1L;
        break;
    case WM_SETFOCUS:
        if (HandleSetFocus((HWND)wParam))
            return 0L;
        break;
    case WM_PAINT:
        if (HandlePaint())
            return 0L;
        break;
    case WM_GETMINMAXINFO:
        if (HandleGetMinMaxInfo((LPMINMAXINFO) lParam))
            return 0L;
        break;
    case WM_DESTROY:
        if (HandleDestroy())
            return 0L;
        break;
    case WM_CLOSE:
        if (HandleClose())
            return 0L;
        break;
    case WM_SIZE:
        if (HandleSize(wParam == SIZE_MINIMIZED))
            return 0L;
        break;
    case WM_COMMAND:
        if (HandleCommand(LOWORD(wParam)))
            return 0L;
        break;
    case WM_COPYDATA:
        if (HandleCopyData((HWND)wParam, (PCOPYDATASTRUCT)lParam))
            return 0L;
        break;
    }

    LRESULT lr = cef_host_window::WindowProc(message, wParam, lParam);

    return lr;
}
Example #8
0
void MP3Player::Destroy()
{
	if(IsInit == 1)
		HandleDestroy();
	HandleDestroyPLL();
}
Example #9
0
HANDLE MediaSrvCreate(void *media, char *name, int type, int preempt)
#endif
{
	PLIST head;
	PLIST n;
	PMEDIA_OBJECT obj;

	// 参数检查
	if(media == NULL)
		return NULL;

	// 检查当前是否存在录放任务
	kMutexWait(hMediaMutex);
	head = &MediaObjList;
	if(!ListEmpty(head) && (preempt != MEDIA_MODE_NORMAL))
	{
		// 检查是否强行结束正在录放的音频
		if(preempt == MEDIA_MODE_PREEMPTIVE)
		{
			// 获取正在音频任务节点
			n = ListFirst(head);
			obj = ListEntry(n, MEDIA_OBJECT, Link);

			// 结束当前正在录放的音频任务
			obj->Cb.MediaClose(obj->Media, 1);
			obj->Cb.MediaDestroy(obj->Media);

			// 释放当前节点
			ListRemove(&obj->Link);
			HandleDestroy(obj->Header.Handle, MEDIA_MAGIC);
			if(obj->MediaInfo)
				kfree(obj->MediaInfo);
			kfree(obj);

			// 申请并初始化节点
			obj = MediaSrvObjCreate(media, name, type);
			if(obj == NULL)
			{
				kMutexRelease(hMediaMutex);
				return NULL;
			}

			// 启动新的播放任务
			if(obj->Cb.MediaOpen(obj->Media) < 0)
			{
				if(obj->MediaInfo)
					kfree(obj->MediaInfo);
				kfree(obj);
				kMutexRelease(hMediaMutex);
				return NULL;
			}

			// 把节点插入任务队列
			ListInsert(head, &obj->Link);
		}
		else
		{
			// 申请并初始化节点
			obj = MediaSrvObjCreate(media, name, type);
			if(obj == NULL)
			{
				kMutexRelease(hMediaMutex);
				return NULL;
			}

			// 把当前音频插入等待队列尾部
			ListInsert(ListPrev(head), &obj->Link);
		}
	}
	else
	{
		// 申请并初始化节点
		obj = MediaSrvObjCreate(media, name, type);
		if(obj == NULL)
		{
			kMutexRelease(hMediaMutex);
			return NULL;
		}

		// 启动新的录放任务
		if(obj->Cb.MediaOpen(obj->Media) < 0)
		{
			if(obj->MediaInfo)
				kfree(obj->MediaInfo);
			kfree(obj);
			kMutexRelease(hMediaMutex);
			return NULL;
		}
		
		// 把当前音频插入等待队列尾部
		ListInsert(head, &obj->Link);
	}
	
	kMutexRelease(hMediaMutex);
	{
		HANDLE hret = HandleSet(obj, MEDIA_MAGIC, sMediaSrvDestroy);
		kdebug(mod_media, PRINT_INFO, "OPEN: 0x%x\n", hret);
		return hret;
	}
}