📄 eventmgr.cpp
字号:
}
else
{
UOCTRL_STATUS tUOCtrlStatus = UOCTRL_SUCCESS;
MODMGR_STATUS tModMgrStatus = MODMGR_SUCCESS;
/* Map user event to User Operation procedure */
ulStatusEvent[0] = VDVD_STATUS_MAX;
switch (cmd)
{
case MODMGR_MENUCALL:
/* Set status event type */
ulStatusEvent[0] = VDVD_STATUS_PLAY;
ulStatusEvent[1] = VDVD_COMMAND_MENU;
tModMgrStatus = ModMgrUOPMenuCall();
break;
case MODMGR_TITLESEARCH:
tModMgrStatus = ModMgrUOPTitleSearch(ulParam);
break;
case MODMGR_PLAY:
/* Set status event type */
ulStatusEvent[0] = VDVD_STATUS_PLAY;
tModMgrStatus = ModMgrUOPPlay();
break;
case MODMGR_PLAYLOCATION:
/* Set status event type */
ulStatusEvent[0] = VDVD_STATUS_PLAY;
tModMgrStatus = ModMgrUOPPlayLocation((PVOID)ulParam);
break;
case MODMGR_STOP:
/* always do a full-stop for BD-J */
if (pStateInfo->tState == MODMGR_STATE_HOLD)
{
/* set status info */
ulStatusEvent[1] = 1; // full-stop
}
#ifdef VDVD_ENABLE_BDJ
/* always do a full-stop for BD-J */
else if ((pStateInfo->tActiveTitle == MODMGR_TITLE_BDJ_MOVIE) ||
(pStateInfo->tActiveTitle == MODMGR_TITLE_BDJ_INTERACTIVE))
{
pStateInfo->tState = MODMGR_STATE_HOLD;
/* set status info */
ulStatusEvent[1] = 1; // full-stop
}
#endif
else
{
uint32 uiTitle;
/* Get status register for title number */
PlayCtrlGetPSR(PLAYCTRL_PSR_TITLE, &uiTitle);
uiTitle &= 0x0000ffff;
/*
* If we are in the top menu, do a full stop.
* Otherwise, do a single stop.
*/
if (uiTitle == 0)
{
/* Send "no resume" status event */
ulStatusEvent[0] = VDVD_STATUS_PROHIBITED;
ulStatusEvent[1] = VDVD_INFO_PROH_NO_RESUME;
if (UsrEventHandler(ulStatusEvent) != USR_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("eventmgrGenerateUO: failed to send 'no resume' status event!\n"));
}
/* set status info */
ulStatusEvent[1] = 1; // full-stop
}
else
{
/* set status info */
ulStatusEvent[1] = 0; // single-stop
}
}
/* Set status event type */
ulStatusEvent[0] = VDVD_STATUS_STOP;
tModMgrStatus = ModMgrUOPStop( (BOOLEAN)(ulParam & VDVD_STOP_MODE_FORCED) );
break;
case MODMGR_RESUME:
tModMgrStatus = ModMgrUOPResume();
break;
case MODMGR_CHAPTERSEARCH:
tUOCtrlStatus = UOCtrlChapterSearch(ulParam);
break;
case MODMGR_TIMESEARCH:
tUOCtrlStatus = UOCtrlTimeSearch(ulParam);
break;
case MODMGR_SKIPTONEXTPOINT:
/* Set status event type (depends on movie/interactive title */
if (pStateInfo->tActiveTitle == MODMGR_TITLE_HDMV_MOVIE)
{
ulStatusEvent[0] = VDVD_STATUS_CHAPTER_SKIP;
}
else
{
ulStatusEvent[0] = VDVD_STATUS_SKIP_NEXT;
}
tUOCtrlStatus = UOCtrlSkipToNextPoint( (uint32 *)&ulStatusEvent[1] );
ulStatusEvent[1]++; // chapter number = entry-mark id + 1
break;
case MODMGR_SKIPTOPREVPOINT:
/* Set status event type (depends on movie/interactive title */
if (pStateInfo->tActiveTitle == MODMGR_TITLE_HDMV_MOVIE)
{
ulStatusEvent[0] = VDVD_STATUS_CHAPTER_SKIP;
}
else
{
ulStatusEvent[0] = VDVD_STATUS_SKIP_PREV;
}
tUOCtrlStatus = UOCtrlSkipToPrevPoint( (uint32 *)&ulStatusEvent[1] );
ulStatusEvent[1]++; // chapter number = entry-mark id + 1
break;
case MODMGR_RESTARTPOINT:
/* Set status event type (depends on movie/interactive title) */
if ((pStateInfo->tActiveTitle == MODMGR_TITLE_HDMV_MOVIE) ||
(pStateInfo->tActiveTitle == MODMGR_TITLE_BDJ_MOVIE))
{
ulStatusEvent[0] = VDVD_STATUS_CHAPTER_SKIP;
}
else
{
ulStatusEvent[0] = VDVD_STATUS_SKIP_PREV;
}
tUOCtrlStatus = UOCtrlRestartPoint( (uint32 *)&ulStatusEvent[1] );
ulStatusEvent[1]++; // chapter number = entry-mark id + 1
break;
case MODMGR_PAUSEON:
/* Set status event type */
ulStatusEvent[0] = VDVD_STATUS_PAUSE;
tUOCtrlStatus = UOCtrlPauseOn();
break;
case MODMGR_PAUSEOFF:
/* Set status event type */
ulStatusEvent[0] = VDVD_STATUS_PLAY;
tUOCtrlStatus = UOCtrlPauseOff();
break;
case MODMGR_STILLOFF:
tUOCtrlStatus = UOCtrlStillOff();
break;
case MODMGR_FORWARDPLAY:
QAPrintOutput2(ulParam, "SPEED"); /* for qa automation */
/* Set status event type */
if (ulParam == 0)
{
/* Set status event type */
ulStatusEvent[0] = VDVD_STATUS_PAUSE;
/* Send request to UO Controller */
tUOCtrlStatus = UOCtrlPauseOn();
}
else
{
/* Set status event type */
if (ulParam == 1)
{
ulStatusEvent[0] = VDVD_STATUS_STEP;
}
else if (ulParam < 1000)
{
ulStatusEvent[0] = VDVD_STATUS_SLOW_F;
}
else if (ulParam > 1000)
{
ulStatusEvent[0] = VDVD_STATUS_FAST_F;
}
else
{
if (PlayCtrlGetPlayRate() != 1000)
{
ulStatusEvent[0] = VDVD_STATUS_PLAY;
}
}
/* Send request to UO Controller */
tUOCtrlStatus = UOCtrlForwardPlay(ulParam);
}
ulStatusEvent[1] = ulParam;
break;
case MODMGR_BACKWARDPLAY:
QAPrintOutput2(ulParam, "SPEED"); /* for qa automation */
/* Set status event type */
if (ulParam < 1000)
{
ulStatusEvent[0] = VDVD_STATUS_SLOW_B;
}
else
{
ulStatusEvent[0] = VDVD_STATUS_FAST_B;
}
ulStatusEvent[1] = ulParam;
tUOCtrlStatus = UOCtrlBackwardPlay(ulParam);
break;
case MODMGR_MOVEUPSELECTEDBUTTON:
tUOCtrlStatus = UOCtrlMoveUpSelectedButton();
break;
case MODMGR_MOVEDOWNSELECTEDBUTTON:
tUOCtrlStatus = UOCtrlMoveDownSelectedButton();
break;
case MODMGR_MOVELEFTSELECTEDBUTTON:
tUOCtrlStatus = UOCtrlMoveLeftSelectedButton();
break;
case MODMGR_MOVERIGHTSELECTEDBUTTON:
tUOCtrlStatus = UOCtrlMoveRightSelectedButton();
break;
case MODMGR_SELECTBUTTON:
tUOCtrlStatus = UOCtrlSelectButton(ulParam);
break;
case MODMGR_ACTIVATEBUTTON:
tUOCtrlStatus = UOCtrlActivateButton();
break;
case MODMGR_SELECTANDACTIVATEBUTTON:
tUOCtrlStatus = UOCtrlSelectAndActivateButton(ulParam);
break;
case MODMGR_AUDIOCHANGE:
tUOCtrlStatus = UOCtrlPrimaryAudioChange(ulParam);
break;
case MODMGR_PGANDSTCHANGE:
tUOCtrlStatus = UOCtrlPGandSTChange(ulParam);
break;
case MODMGR_PGANDSTENABLE:
tUOCtrlStatus = UOCtrlPGandSTEnable( (BOOLEAN)(ulParam) );
break;
case MODMGR_ANGLECHANGE:
tUOCtrlStatus = UOCtrlAngleChange(ulParam);
break;
case MODMGR_POPUPON:
tUOCtrlStatus = UOCtrlPopUpOn();
break;
case MODMGR_POPUPOFF:
tUOCtrlStatus = UOCtrlPopUpOff();
break;
case MODMGR_TEXTSUBTITLESTYLECHANGE:
tUOCtrlStatus = UOCtrlTextSubtitleStyleChange( (uint8)(ulParam) );
break;
case MODMGR_REPEAT:
ulStatusEvent[0] = VDVD_STATUS_REPEAT;
ulStatusEvent[1] = ulParam;
if (ulParam == VDVD_INFO_REPEAT_TITLE)
{
/* turn repeat chapter/ab off and repeat title on */
UOCtrlRepeat(VDVD_INFO_REPEAT_OFF);
tModMgrStatus = ModMgrUOPRepeatTitle(TRUE);
}
else if (ulParam == VDVD_INFO_REPEAT_OFF)
{
/* turn repeat title off and repeat chapter/ab off */
ModMgrUOPRepeatTitle(FALSE);
UOCtrlRepeat(VDVD_INFO_REPEAT_OFF);
}
else
{
/* turn repeat title off and pass repeat chapter/ab/off to pbc engine */
ModMgrUOPRepeatTitle(FALSE);
tUOCtrlStatus = UOCtrlRepeat( (uint8)(ulParam) );
}
break;
default:
DBGPRINT(DBG_ON(DBG_TRACE), ("eventmgrGenerateUO: UO does not exist!\n"));
tUOCtrlStatus = UOCTRL_FAILURE;
tModMgrStatus = MODMGR_FAILURE;
break;
}
/*
* Evaluate return status from user operation.
* If UO was successful, send the appropriate status event.
* If UO was prohibited, send a Prohibited status event.
*/
if ( (tUOCtrlStatus == UOCTRL_SUCCESS) && (tModMgrStatus == MODMGR_SUCCESS) )
{
DBGPRINT(DBG_ON(DBG_TRACE), ("eventmgrGenerateUO: UO processed successfully\n"));
/* If status event type was set, then send the status event */
if (ulStatusEvent[0] != VDVD_STATUS_MAX)
{
/* Send status event */
if (UsrEventHandler(ulStatusEvent) != USR_SUCCESS)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -