📄 play_dvd.c
字号:
#ifdef PLAYER_GOTO
if (fgIsDiscPlay(bPbcState) &&
(_rSearchStateCtx.bType == SEARCH_NONE) &&
(bDiscType == SV_DVD_VIDEO) && fgGoto)
{
#ifdef GOTO_VTSTT_DOM_ONLY
if ((bDom == SV_VTSTT_DOM) && (bHliState == SV_OFF))
#endif /* GOTO_VTSTT_DOM_ONLY */
{
vChangeInputState(INPUT_STATE_GOTO, FALSE);
return (UOP_OK);
}
}
#else
//vGotoDummy();
#endif
if ((bDom == SV_VTSTT_DOM) || (bDom == SV_ATSTT_DOM))
{
if ((_rSearchStateCtx.bType == SEARCH_NONE) ||
(_rSearchStateCtx.bType == SEARCH_DVD_TIME_CH))
{
if (fgIsPTTSearchAllow())
{
vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
}
else if (fgIsTimeSearchAllow())
{
vChangeInputState(INPUT_STATE_DVD_TIME_SEARCH, FALSE);
}
else if (fgIsTTLSearchAllow())
{
vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
}
else
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
{
if (fgIsTimeSearchAllow())
{
/* switch to chapter time search */
vChangeInputState(INPUT_STATE_DVD_TIME_SEARCH, FALSE);
}
else if (fgIsPTTSearchAllow())
{
vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
}
else if (fgIsTTLSearchAllow())
{
vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
}
else
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_PTT)
{
if (fgIsTimeSearchAllow())
{
/* switch to title time search */
vChangeInputState(INPUT_STATE_DVD_TIME_SEARCH, FALSE);
}
else if (fgIsPTTSearchAllow())
{
vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
}
/*
else if (fgIsTTLSearchAllow())
{
vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
}
*/
else
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
else if ((_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL) ||
(_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL))
{
if (fgIsTTLSearchAllow())
{
vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
}
else
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
if (fgIsPTTSearchAllow())
{
vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
}
else
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
else
{
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
else /* non-VTS doamin, only allow title search */
{
if (fgIsTTLSearchAllow())
{
_rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
}
else
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
return (UOP_OK);
}
static BYTE bDVDGetRepeatType(BYTE bType)
{
BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
BYTE bMode = bSharedInfo(SI_USR_PBC_CTRL);
switch (bType)
{
case SV_REPEAT_CHAPTER:
if (fgIsUsrCtrlMode(bMode))
{
#ifdef DVD_NO_REPEAT_ALL
return (SV_REPEAT_NONE);
#else
return (SV_REPEAT_ALL);
#endif
}
else /* normal play */
{
return (SV_REPEAT_TITLE);
}
case SV_REPEAT_TITLE:
#ifdef DVD_NO_REPEAT_ALL
return (SV_REPEAT_NONE);
#else
return (SV_REPEAT_ALL);
#endif
case SV_REPEAT_ALL:
return (SV_REPEAT_NONE);
case SV_REPEAT_NONE:
return (SV_REPEAT_CHAPTER);
default:
return (0xff);
}
}
BOOL fgDVDRepeatKey(void) large
{
BYTE bUsrCtrl = bSharedInfo(SI_USR_PBC_CTRL);
BYTE bRepeatType;
if (0
#ifdef PROGRAM_NO_REPEAT
|| (bUsrCtrl == SV_PROGRAM)
#endif
#ifdef RANDOM_SHUFFLE_NO_REPEAT
|| (bUsrCtrl == SV_RANDOM) || (bUsrCtrl == SV_SHUFFLE)
#endif
)
{
vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
bRepeatType = bDVDGetRepeatType(bSharedInfo(SI_REPEAT_MODE));
if (bRepeatType == 0xff)
{
bRepeatType = bDVDGetRepeatType(bSharedInfo(SI_USR_PBC_CTRL));
}
if (bRepeatType == 0xff)
{
bRepeatType = SV_REPEAT_CHAPTER;
}
vSendUopCmd(UOP_REPEAT, bRepeatType, 0, 0);
return (UOP_OK);
}
BOOL fgDVDFFKey(void) large
{
BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
BYTE bPbcSpeed = bSharedInfo(SI_PBC_SPEED);
if (!fgIsDiscPlay(bPbcState))
{
vOsdShowError(SV_ERR_PLAYBACK_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
#ifdef PAUSE_NO_TRICK
else if (bPbcState == SV_PAUSE)
{
vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
#endif
if(bPbcState == SV_FF)
{
if(bPbcSpeed < DVD_FAST_MAX - 1)
{
bPbcSpeed++;
}
else
{
#ifdef TRICK_MODE_USE_PLAY
vSendUopCmd(UOP_PLAY, 0, 0, 0);
return UOP_OK;
#else
bPbcSpeed = 0;
#endif
}
}
else
{
bPbcSpeed = SV_TWO;
}
vSendUopCmd(UOP_FORWARD, SV_FAST, bPbcSpeed, pbDVDFastSpeedTbl[bPbcSpeed]);
return UOP_OK;
}
BOOL fgDVDFRKey(void) large
{
BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
BYTE bPbcSpeed = bSharedInfo(SI_PBC_SPEED);
if (!fgIsDiscPlay(bPbcState))
{
vOsdShowError(SV_ERR_PLAYBACK_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
#ifdef PAUSE_NO_TRICK
else if (bPbcState == SV_PAUSE)
{
vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
#endif
if(bPbcState == SV_FR)
{
if(bPbcSpeed < DVD_FAST_MAX - 1)
{
bPbcSpeed++;
}
else
{
#ifdef TRICK_MODE_USE_PLAY
vSendUopCmd(UOP_PLAY, 0, 0, 0);
return UOP_OK;
#else
bPbcSpeed = 0;
#endif
}
}
else
{
bPbcSpeed = SV_TWO;
}
vSendUopCmd(UOP_REVERSE, SV_FAST, bPbcSpeed, pbDVDFastSpeedTbl[bPbcSpeed]);
return UOP_OK;
}
#ifndef DISABLE_SF
BOOL fgDVDSFKey(void) large
{
BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
BYTE bPbcSpeed = bSharedInfo(SI_PBC_SPEED);
#ifdef SUPPORT_DVD_AUDIO
if (bSharedInfo(SI_DVD_DOM) == SV_ATSTT_DOM)
{
if (!fgIsDiscPlay(bPbcState))
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
fgSetPlayPostKey(IR_PREV_DLIST);
return(UOP_OK);
}
#endif /* SUPPORT_DVD_AUDIO */
if (!fgIsDiscPlay(bPbcState))
{
vOsdShowError(SV_ERR_PLAYBACK_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
#ifdef PAUSE_NO_TRICK
else if (bPbcState == SV_PAUSE)
{
vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
#endif
#ifdef ZOOM_NO_SLOW_STEP
if (bSharedInfo(SI_ZOOM_SWITCH) != SV_ZOOM_1)
{
vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
#endif
if (bPbcState == SV_SF)
{
if(bPbcSpeed < DVD_SLOW_MAX - 1)
{
bPbcSpeed++;
}
else
{
#ifdef SF_SR_SAME_KEY
#ifdef PLAYER_VRMT
if (fgIsInputStateValid(INPUT_STATE_VREMOTE))
{
#ifdef TRICK_MODE_USE_PLAY
vSendUopCmd(UOP_PLAY, 0, 0, 0);
return (UOP_OK);
#else
bPbcSpeed = 0;
#endif
}
else
#endif /* PLAYER_VRMT */
{
fgSetPlayPostKey(IR_SR);
return(UOP_OK);
}
#else /* not SF_SR_SAME_KEY */
#ifdef TRICK_MODE_USE_PLAY
vSendUopCmd(UOP_PLAY, 0, 0, 0);
return (UOP_OK);
#else
bPbcSpeed = 0;
#endif
#endif /* not SF_SR_SAME_KEY */
}
}
#ifdef SF_SR_SAME_KEY
else if ((bPbcState == SV_SR)
#ifdef PLAYER_VRMT
&& (fgIsInputStateValid(INPUT_STATE_VREMOTE) == FALSE)
#endif
)
{
fgSetPlayPostKey(IR_SR);
return (UOP_OK);
}
#endif /* SF_SR_SAME_KEY */
else
{
bPbcSpeed = SV_TWO;
}
#ifdef DVD_NO_VID_NO_STEP
vSendUopCmd(UOP_FORWARD, SV_SLOW, bPbcSpeed, 1);
#else
vSendUopCmd(UOP_FORWARD, SV_SLOW, bPbcSpeed, 0);
#endif
return (UOP_OK);
}
#endif /* #ifndef DISABLE_SF */
BOOL fgDVDNumKey(void) large
{
BYTE bState = bSharedInfo(SI_HLI_STATE);
BYTE bPbc = bSharedInfo(SI_PBC_STATE);
BYTE bMode = bSharedInfo(SI_USR_PBC_CTRL);
BYTE bChNs = bSharedInfo(SI_CHAP_NS);
if (fgIsUsrCtrlMode(bMode))
{
vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
if ((bPbc == SV_STOP) || (bPbc == SV_STOP_RESUME))
{
/* in stop state, select title */
_rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
//vChangeInputState(INPUT_STATE_TITLE_SEARCH, TRUE);
vChangeInputState(INPUT_STATE_TITLE_SEARCH, FALSE);
}
else
{
if (bState == SV_OFF)
{
#ifdef NUM_KEY_SEARCH
if (
#ifdef ONE_PTT_NO_SEARCH
(bChNs > 1)
#else
(bChNs > 0)
#endif
&&
#ifdef NUM_KEY_DIRECT_SEARCH_CHECK_RANGE
#ifdef NO_ADD10_KEY
((_bIRKey < IR_ADD10) && (_bIRKey * 10 <= bChNs))
#else
((_bIRKey <= IR_ADD10 && _bIRKey <= bChNs) || (_bIRKey == IR_ADD5 && 5 <= bChNs)) // megaa ADD5
#endif
#else
(1)
#endif
)
{
#ifdef NUM_KEY_DIRECT_SEARCH
if (fgIsPTTSearchAllow())
{
vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
}
else
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
_rSearchStateCtx.bType = SEARCH_NONE;
}
#else
vChangeInputState(INPUT_STATE_PTT_SEARCH, FALSE);
#endif
}
else /* if only one chapter, can not do PTT search */
#endif
{
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
return (UOP_OK);
}
}
else
{
vChangeInputState(INPUT_STATE_SELECT_NUM, TRUE);
}
}
return (UOP_OK);
}
BOOL fgDVDEnterKey(void) large
{
BYTE bState = bSharedInfo(SI_PBC_STATE);
if (fgIsDiscPlay(bState))
{
/* the ENTER for hili is only valid when disc play */
vSendUopCmd(UOP_ARROW_BTN, SV_ACTIVATE, 0, 0);
}
else
{
fgSetPlayPostKey(IR_PLAY);
return (UOP_OK);
}
return (UOP_OK);
}
BOOL fgDVDMenuKey(void) large
{
BYTE bUsrCtrl = bSharedInfo(SI_USR_PBC_CTRL);
BYTE bDom = bSharedInfo(SI_DVD_DOM);
BYTE bMenuId = bSharedInfo(SI_DVD_MENU_TYPE);
BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
#ifdef USR_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -