📄 hdmvmod.cpp
字号:
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
* HDMVMOD_NULL_PTR if pulCmdID is NULL
*/
HDMVMOD_STATUS HdmvModSuspendMobj(ULONG *pulCmdID)
{
HDMVMOD_MESSAGE msg;
ULONG ulStatus;
if (hHdmvMod == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModSuspendMobj: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
if (pulCmdID == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModSuspendMobj: NULL pointer!\n"));
return (HDMVMOD_NULL_PTR);
}
/* Check that message queue is created */
if (hHdmvMod->MsgQID == 0)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModSuspendMobj: Msg queue not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Reset sem_sync */
OS_SemTake(hHdmvMod->sem_sync, OS_NO_WAIT);
/* Send message to the task. Send semaphore to make it synchronous. */
msg.tMsgType = HDMVMOD_MSG_SUSPEND_MOBJ;
msg.ulData0 = 0;
msg.ulData1 = 0;
msg.ulSemID = hHdmvMod->sem_sync;
msg.pvBuffer = (PVOID)pulCmdID;
msg.ulBufferLength = sizeof(ULONG);
msg.pulRetVal = &ulStatus;
if (OS_MsgQSend(hHdmvMod->MsgQID, (char *)&msg, sizeof(HDMVMOD_MESSAGE), OS_NO_WAIT, OS_MSG_PRI_NORMAL) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModSuspendMobj: Failure sending message!\n"));
return (HDMVMOD_FAILURE);
}
else
{
/* Wait for message processing to complete */
OS_SemTake(hHdmvMod->sem_sync, OS_WAIT_FOREVER);
}
return ( (HDMVMOD_STATUS)ulStatus);
}
/**
* HdmvModResumeMobj -- Resume a suspended movie object
*
* @param
* ulMobjID -- ID of movie object to resume
* ulCmdID -- ID of command at which processing should start
*
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
*/
HDMVMOD_STATUS HdmvModResumeMobj(ULONG ulMobjID, ULONG ulCmdID)
{
HDMVMOD_MESSAGE msg;
if (hHdmvMod == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModResumeMobj: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Check that message queue is created */
if (hHdmvMod->MsgQID == 0)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModResumeMobj: Msg queue not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Send message to the task */
msg.tMsgType = HDMVMOD_MSG_RESUME_MOBJ;
msg.ulData0 = ulMobjID;
msg.ulData1 = ulCmdID;
msg.ulSemID = 0;
if (OS_MsgQSend(hHdmvMod->MsgQID, (char *)&msg, sizeof(HDMVMOD_MESSAGE), OS_NO_WAIT, OS_MSG_PRI_NORMAL) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModResumeMobj: Failure sending message!\n"));
return (HDMVMOD_FAILURE);
}
return (HDMVMOD_SUCCESS);
}
/**
* HdmvModLoadMobj -- Load a movie object without executing any of its navigation commands
*
* @param
* ulMobjID -- ID of movie object to load
* ulCmdID -- ID of command to set current navigation command to
*
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
*/
HDMVMOD_STATUS HdmvModLoadMobj(ULONG ulMobjID, ULONG ulCmdID)
{
HDMVMOD_MESSAGE msg;
if (hHdmvMod == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModLoadMobj: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Check that message queue is created */
if (hHdmvMod->MsgQID == 0)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModLoadMobj: Msg queue not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Send message to the task */
msg.tMsgType = HDMVMOD_MSG_LOAD_MOBJ;
msg.ulData0 = ulMobjID;
msg.ulData1 = ulCmdID;
msg.ulSemID = 0;
if (OS_MsgQSend(hHdmvMod->MsgQID, (char *)&msg, sizeof(HDMVMOD_MESSAGE), OS_NO_WAIT, OS_MSG_PRI_NORMAL) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModLoadMobj: Failure sending message!\n"));
return (HDMVMOD_FAILURE);
}
return (HDMVMOD_SUCCESS);
}
/**
* HdmvModAllocBobjBuffer -- Allocate a buffer used to pass a button obj program to the HDMV module.
*
* @param
* ppButtonProgram -- receives a pointer to the button obj buffer
* ulNumberOfCommands -- number of commands in the program
*
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
*/
HDMVMOD_STATUS HdmvModAllocBobjBuffer(MVOBJ_NAV_COMMAND **ppButtonProgram, ULONG ulNumberOfCommands)
{
if (hHdmvMod == NULL)
{
DbgPrint(("HdmvModAllocBobjBuffer: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
/* verify the input params */
if (ppButtonProgram == NULL)
{
return (HDMVMOD_NULL_PTR);
}
if (ulNumberOfCommands > 255)
{
return (HDMVMOD_INVALID_PARAM);
}
/* allocate button program buffer from our memory pool */
*ppButtonProgram = (MVOBJ_NAV_COMMAND *)OS_MemPoolAlloc(hHdmvMod->mempoolBtnCmds,
sizeof(MVOBJ_NAV_COMMAND) * ulNumberOfCommands);
/* make sure we were successfull */
if (*ppButtonProgram == NULL)
{
return (HDMVMOD_FAILURE);
}
return (HDMVMOD_SUCCESS);
}
/**
* HdmvModAllocBobjBuffer -- Free buffer allocated by call to HdmvModAllocBobjBuffer.
*
* @param
* pButtonProgram -- address to free
*
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
*/
HDMVMOD_STATUS HdmvModFreeBobjBuffer(MVOBJ_NAV_COMMAND *pButtonProgram)
{
if (hHdmvMod == NULL)
{
DbgPrint(("HdmvModFreeBobjBuffer: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
/* verify the input params */
if (pButtonProgram == NULL)
{
return (HDMVMOD_NULL_PTR);
}
DbgAssert(hHdmvMod->mempoolBtnCmds != NULL);
/* Free the button program buffer */
OS_MemPoolFree(hHdmvMod->mempoolBtnCmds, pButtonProgram);
return (HDMVMOD_SUCCESS);
}
/**
* HdmvModProcessBobj -- Process a button object
*
* @param
* pButtonProgram -- pointer to the button obj program
* ulNumberOfCommands -- number of commands in the program
* pContext -- context info to be passed back to the Playback Control Engine
* throught the button commands completed API
*
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
*/
HDMVMOD_STATUS HdmvModProcessBobj(MVOBJ_NAV_COMMAND *pButtonProgram, ULONG ulNumberOfCommands, PVOID pContext)
{
HDMVMOD_MESSAGE msg;
if (hHdmvMod == NULL)
{
DbgPrint(("HdmvModProcessBobj: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
/* verify the input params
* NOTE: We allow a NULL program so that Activation Complete gets called */
if (ulNumberOfCommands > MVOBJ_MAX_BUTTON_NAV_COMMANDS)
{
return (HDMVMOD_INVALID_PARAM);
}
DbgAssert(hHdmvMod->MsgQID != 0);
/* Send message to the task */
msg.tMsgType = HDMVMOD_MSG_PROCESS_BOBJ;
msg.ulData0 = (ULONG)pButtonProgram;
msg.ulData1 = ulNumberOfCommands;
msg.pvBuffer = pContext;
msg.ulSemID = 0;
if (OS_MsgQSend(hHdmvMod->MsgQID, (char *)&msg, sizeof(HDMVMOD_MESSAGE), OS_NO_WAIT, OS_MSG_PRI_NORMAL) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModPlaybackComplete: Failure sending message!\n"));
return (HDMVMOD_FAILURE);
}
return (HDMVMOD_SUCCESS);
}
/**
* HdmvModPlaybackComplete -- Notify the HDMV Module that playback of a playlist is
* complete.
*
* @param
* none.
*
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
*/
HDMVMOD_STATUS HdmvModPlaybackComplete(void)
{
HDMVMOD_MESSAGE msg;
if (hHdmvMod == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModPlaybackComplete: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
DbgAssert(hHdmvMod->MsgQID != 0);
/* Send message to the task */
msg.tMsgType = HDMVMOD_MSG_PLAYBACK_COMPLETE;
msg.ulData0 = 0;
msg.ulData1 = 0;
msg.ulSemID = 0;
if (OS_MsgQSend(hHdmvMod->MsgQID, (char *)&msg, sizeof(HDMVMOD_MESSAGE), OS_NO_WAIT, OS_MSG_PRI_NORMAL) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModPlaybackComplete: Failure sending message!\n"));
return (HDMVMOD_FAILURE);
}
return (HDMVMOD_SUCCESS);
}
/**
* HdmvModNavTimerExpire -- Notify the HDMV Module that nav timer has expired.
*
* @param
* none.
*
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
*/
HDMVMOD_STATUS HdmvModNavTimerExpire(void)
{
HDMVMOD_MESSAGE msg;
if (hHdmvMod == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModNavTimerExpire: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Check that message queue is created */
if (hHdmvMod->MsgQID == 0)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModNavTimerExpire: Msg queue not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Send message to the task */
msg.tMsgType = HDMVMOD_MSG_NVTIMER_EXPIRE;
msg.ulData0 = 0;
msg.ulData1 = 0;
msg.ulSemID = 0;
if (OS_MsgQSend(hHdmvMod->MsgQID, (char *)&msg, sizeof(HDMVMOD_MESSAGE), OS_NO_WAIT, OS_MSG_PRI_NORMAL) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModNavTimerExpire: Failure sending message!\n"));
return (HDMVMOD_FAILURE);
}
return (HDMVMOD_SUCCESS);
}
/**
* HdmvModSetTitleRepeat -- Turn repeat of playlist on.
*
* @param
* fOnOff - TRUE = repeat on, FALSE = repeat off.
*
* @retval
* HDMVMOD_SUCCESS if successful
* HDMVMOD_FAILURE if not successful
*/
HDMVMOD_STATUS HdmvModSetTitleRepeat(BOOLEAN fOnOff)
{
HDMVMOD_MESSAGE msg;
if (hHdmvMod == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModSetTitleRepeat: HDMV Module not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Check that message queue is created */
if (hHdmvMod->MsgQID == 0)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModSetTitleRepeat: Msg queue not created!\n"));
return (HDMVMOD_FAILURE);
}
/* Send message to the task */
msg.tMsgType = HDMVMOD_MSG_REPEAT;
msg.ulData0 = fOnOff;
msg.ulData1 = 0;
msg.ulSemID = 0;
if (OS_MsgQSend(hHdmvMod->MsgQID, (char *)&msg, sizeof(HDMVMOD_MESSAGE), OS_NO_WAIT, OS_MSG_PRI_NORMAL) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("HdmvModSetTitleRepeat: Failure sending message!\n"));
return (HDMVMOD_FAILURE);
}
return (HDMVMOD_SUCCESS);
}
/**
* HdmvModIsTitleRepeatOn -- Return title repeat state.
*
* @param
* none
*
* @retval
* TRUE if title repeat mode is on
* FALSE if title repeat mode is off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -