📄 play_dvd.c
字号:
// *********************************************************************
// Title Search State Machine
// *********************************************************************
void vDVDTitleSearchInit(BYTE fgInit) large
{
BYTE bTmp;
BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
/* BYTE bDom = bSharedInfo(SI_DVD_DOM); */
if ((_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL) ||
(_rSearchStateCtx.bType == SEARCH_NONE))
{
_rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
/*
if (bDom == SV_VTSTT_DOM)
{
vOsdShowChapterSearch(0, bSharedInfo(SI_TT_NS), (OSD_DVD_TTL_SEARCH | 0),
bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS), OSD_NO_DISAPPEAR);
}
else
*/
{
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterSearch(0, bSharedInfo(SI_GRP_NS), (OSD_DVD_TTL_SEARCH | 0),
0, 0, OSD_NO_DISAPPEAR);
}
else
{
vOsdShowChapterSearch(0, bSharedInfo(SI_TT_NS), (OSD_DVD_TTL_SEARCH | 0),
0, 0, OSD_NO_DISAPPEAR);
}
}
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
{
_rSearchStateCtx.bType = SEARCH_DVD_TIME_TTL;
/*
if (bDom == SV_VTSTT_DOM)
{
bTmp = bSharedInfo(SI_TIME_TOTAL_HH);
_rNumInStateCtx.bDig[0] = (bTmp & 0x0f);
bTmp = bSharedInfo(SI_TIME_TOTAL_MM);
_rNumInStateCtx.bDig[1] = (bTmp & 0xf0) >> 4;
_rNumInStateCtx.bDig[2] = (bTmp & 0x0f);
bTmp = bSharedInfo(SI_TIME_TOTAL_SS);
_rNumInStateCtx.bDig[3] = (bTmp & 0xf0) >> 4;
_rNumInStateCtx.bDig[4] = (bTmp & 0x0f);
vOsdShowTitleTimeSearch(0, bSharedInfo(SI_TT_NS), (OSD_DVD_TTL_SEARCH | 0),
_rNumInStateCtx.bDig);
}
else
*/
{
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowTitleTimeSearch(0, bSharedInfo(SI_GRP_NS), (OSD_DVD_TTL_SEARCH | 0), 0);
}
else
{
vOsdShowTitleTimeSearch(0, bSharedInfo(SI_TT_NS), (OSD_DVD_TTL_SEARCH | 0), 0);
}
}
}
#ifdef NO_ADD10_KEY
vNumInInitState(NUM_IN_SEQ_WAIT, 2);
#else
vNumInInitState(NUM_IN_TYPE_1, 1);
#endif
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
BOOL fgDVDTitleSearchState(void) large
{
BOOL fgRetValue;
BYTE bTmp;
BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
if ((_rSearchStateCtx.bType == SEARCH_DVD_TIME_WAIT) ||
(_rSearchStateCtx.bType == SEARCH_DVD_PTT_WAIT))
{
if (_bIRKey != IR_TIME_OUT)
{
return (TRUE);
}
}
bTmp = bSharedInfo(SI_TT_NS);
if (_bIRKey <= IR_ADD10 || _bIRKey == IR_ADD5) // megaa ADD5
{
fgRetValue = fgNumInState();
if (_rNumInStateCtx.rState.fgComplete)
{
if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
(_rNumInStateCtx.wNum <= bTmp))
{
if (_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL)
{
#ifdef SUPPORT_DVD_AUDIO
if ((bDiscType == SV_DVD_AUDIO) && (_rNumInStateCtx.wNum == bSharedInfo(SI_GRP_NS)) &&
(bSharedInfo(SI_HIDE_HGR) == SV_ON) &&
(bSharedInfo(SI_HIDDEN_PASSWD0) != 0) && (bSharedInfo(SI_HIDDEN_PASSWD1) != 0))
{
fgSetPlayPostKey(IR_HDN_PASSWORD);
return (TRUE);
}
else
#endif /* SUPPORT_DVD_AUDIO */
{
vOsdShowChapterSearch(_rNumInStateCtx.wNum, bTmp,
(OSD_DVD_TTL_SEARCH | OSD_DVD_SEARCH_END), 0, 0, OSD_NO_DISAPPEAR);
_rSearchStateCtx.bType = SEARCH_DVD_PTT_WAIT;
}
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
{
vOsdShowTitleTimeSearch(_rNumInStateCtx.wNum, bTmp,
(OSD_DVD_TTL_SEARCH | OSD_DVD_SEARCH_END), 0);
_rSearchStateCtx.bType = SEARCH_DVD_TIME_WAIT;
}
if (bDiscType == SV_DVD_AUDIO)
{
vSendUopCmd(UOP_GROUP_PLAY, _rNumInStateCtx.wNum, 0, 0);
}
else
{
vSendUopCmd(UOP_TITLE_PLAY, _rNumInStateCtx.wNum, TITLE_PLAY_IGNORE_UOP_BLOCK, 0);
}
/* the selected title/chapter will be shown by UOP return */
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
else
{
if (_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL)
{
vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
{
vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
}
vSetExitInputState();
_rSearchStateCtx.bType = SEARCH_NONE;
vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
}
}
else /* _rNumInStateCtx.rState.fgComplete */
{
/* check range */
if (_rNumInStateCtx.wNum > bTmp)
{
_rNumInStateCtx.wNum = bTmp;
}
/* update OSD only */
if (_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL)
{
vOsdShowChapterSearch(_rNumInStateCtx.wNum, bTmp,
(OSD_DVD_TTL_SEARCH | 1), 0, 0, OSD_NO_DISAPPEAR);
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
{
vOsdShowTitleTimeSearch(_rNumInStateCtx.wNum, bTmp,
(OSD_DVD_TTL_SEARCH | 1), 0);
}
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
}
else if (_bIRKey == IR_CLEAR)
{
_rNumInStateCtx.wNum = 0;
if (_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL)
{
vOsdShowChapterSearch(_rNumInStateCtx.wNum, bTmp,
(OSD_DVD_TTL_SEARCH | 1), 0, 0, OSD_NO_DISAPPEAR);
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
{
vOsdShowTitleTimeSearch(_rNumInStateCtx.wNum, bTmp,
(OSD_DVD_TTL_SEARCH | 1), 0);
}
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
else /* > IR_ADD10 and not IR_CLEAR, IR_ADD5 */
{
vSetExitInputState();
if ((_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL) ||
(_rSearchStateCtx.bType == SEARCH_DVD_PTT_WAIT))
{
vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
}
else if ((_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL) ||
(_rSearchStateCtx.bType == SEARCH_DVD_TIME_WAIT))
{
vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
}
if (_bIRKey == IR_SELECT)
{
switch (_rSearchStateCtx.bType)
{
case SEARCH_DVD_PTT_TTL:
_rSearchStateCtx.bType = SEARCH_DVD_TIME_TTL;
break;
case SEARCH_DVD_TIME_TTL:
// 20050421, IS00002551, if not PTT allow, don't switch to it, or prohibition shown.
if (fgIsPTTSearchAllow())
_rSearchStateCtx.bType = SEARCH_DVD_CH;
else
_rSearchStateCtx.bType = SEARCH_NONE;
break;
case SEARCH_DVD_TIME_CHANGE:
if (fgIsTimeSearchAllow() == TRUE)
{
/* change to title time search in main state */
_rSearchStateCtx.bType = SEARCH_DVD_PTT;
}
else
{
vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
#ifdef SEARCH_INPUT_SHOW
vOsdShowTitleTimeSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
(OSD_DVD_TTL_SEARCH | OSD_DVD_SEARCH_END), 0);
#endif
_rSearchStateCtx.bType = SEARCH_NONE;
return (TRUE);
}
break;
case SEARCH_DVD_PTT_CHANGE:
if (fgIsPTTSearchAllow() == TRUE)
{
/* change to PTT search in main state */
_rSearchStateCtx.bType = SEARCH_DVD_TIME_CH;
}
else
{
vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
#ifdef SEARCH_INPUT_SHOW
#ifdef DVD_VR_SUPPORT
if (bSharedInfo(SI_DISC_TYPE) == SV_DVD_VR)
{
vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
(OSD_DVD_TTL_SEARCH | OSD_DVD_SEARCH_END),
bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO),
OSD_TIMEOUT_SHORT);
} else
#endif /* DVD_VR_SUPPORT */
vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
(OSD_DVD_TTL_SEARCH | OSD_DVD_SEARCH_END),
bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS),
OSD_TIMEOUT_SHORT);
#endif /* SEARCH_INPUT_SHOW */
_rSearchStateCtx.bType = SEARCH_NONE;
return (TRUE);
}
break;
default:
break;
} /* switch (_rSearchStateCtx.bType) */
return (FALSE); /* pass to main state change search mode */
}
else if ((_bIRKey == IR_LEFT) || (_bIRKey == IR_RIGHT))
{
if (_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL)
{
/* swicth to PTT search by main state */
#ifdef PLAYER_GOTO
_rSearchStateCtx.bType = SEARCH_DVD_TIME_CH; // megaa Goto
#else
_rSearchStateCtx.bType = SEARCH_NONE;
#endif
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL)
{
/* swicth to title time search by main state */
_rSearchStateCtx.bType = SEARCH_DVD_PTT;
}
_bIRKey = IR_SELECT;
return (FALSE); /* pass to main state change search mode */
}
else
{
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
return(TRUE);
}
void vDVDTitleSearchExit(void) large
{
if ((_rSearchStateCtx.bType == SEARCH_DVD_PTT_TTL) ||
(_rSearchStateCtx.bType == SEARCH_DVD_PTT_WAIT))
{
vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
}
else if ((_rSearchStateCtx.bType == SEARCH_DVD_TIME_TTL) ||
(_rSearchStateCtx.bType == SEARCH_DVD_TIME_WAIT))
{
vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
}
if (_bIRKey != IR_SELECT)
{
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
// *********************************************************************
// Change audio stream
// *********************************************************************
void vDVDAudioChangeInit(BYTE fgInit) large
{
vDVDShowAudio(bSharedInfo(SI_AST_NO), bSharedInfo(SI_AST_NS));
vIrSetTimeOut(IR_TIMEOUT_AUDIO);
}
BOOL fgDVDAudioChangeState(void) large
{
BYTE bTmp1 = bSharedInfo(SI_AST_NO);
BYTE bTmp2 = bSharedInfo(SI_AST_NS);
#ifdef SUPPORT_DVD_AUDIO
BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
#endif
if ((bSharedInfo(SI_PBC_STATE) != SV_PLAY) || (bTmp1 >= bTmp2) || (bTmp2 == 0))
{
vSetExitInputState();
return (FALSE);
}
if (_bIRKey == IR_AUDIO) /* change to next AST */
{
if (bTmp2 > 1)
{
bTmp1++;
if (bTmp1 >= bTmp2)
{
bTmp1 = 0;
}
#ifdef SUPPORT_DVD_AUDIO
if (bDiscType == SV_DVD_AUDIO)
{
vSetSharedInfo(SI_DVD_AUDIO_USR_AST, bTmp1);
vNotifySharedInfo(SI_DVD_AUDIO_USR_AST, 0, 0);
}
#endif /* SUPPORT_DVD_AUDIO */
#ifdef AUDIO_STREAM_CHANGE_MUTE
if (!fgIsMute() /* if mute off */
#if (DVD_CHG_AST_OPT3 == SV_UOP_BLOCK)
&& (fgCheckUopBlock(SV_NV_A_CHANGE) == FALSE) /* if UOP not block */
#endif
)
{
if (bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM)
{
vAdspMute(ADSP_ON, AST_NORMAL_CHANGE_UNMUTE_CNT + AST_PCM_CHANGE_UNMUTE_CNT); // extra mute time for PCM
}
else
{
vAdspMute(ADSP_ON, AST_NORMAL_CHANGE_UNMUTE_CNT);
}
}
vSetAudioStreamChange(AST_NORMAL_CHANGE_CNT, bTmp1, DVD_CHG_AST_OPT2, DVD_CHG_AST_OPT3);
#else
vSendUopCmd(UOP_CHANGE_ASTN, bTmp1, DVD_CHG_AST_OPT2, DVD_CHG_AST_OPT3);
#endif /* AUDIO_STREAM_CHANGE_MUTE */
} /* bTmp2 > 1 */
vIrSetTimeOut(IR_TIMEOUT_AUDIO);
return (TRUE);
}
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_SELECT)
else if ((_bIRKey < IR_ADD10) && (bTmp2 > 1))
{
if ((_bIRKey > 0) && (_bIRKey <= bTmp2))
{
#if (defined(SUPPORT_DVD_AUDIO) && defined(SET_DVD_AUDIO_USR_AST))
if (bDiscType == SV_DVD_AUDIO)
{
vSetSharedInfo(SI_DVD_AUDIO_USR_AST, _bIRKey - 1);
vNotifySharedInfo(SI_DVD_AUDIO_USR_AST, 0, 0);
}
#endif /* SUPPORT_DVD_AUDIO && SET_DVD_AUDIO_USR_AST */
#ifdef AUDIO_STREAM_CHANGE_MUTE
if (!fgIsMute()) /* if mute off */
{
if (bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM)
{
vAdspMute(ADSP_ON, AST_NORMAL_CHANGE_UNMUTE_CNT + AST_PCM_CHANGE_UNMUTE_CNT); // extra mute time for PCM
}
else
{
vAdspMute(ADSP_ON, AST_NORMAL_CHANGE_UNMUTE_CNT);
}
}
vSetAudioStreamChange(AST_NORMAL_CHANGE_CNT, _bIRKey - 1, DVD_CHG_AST_OPT2, DVD_CHG_AST_OPT3);
#else
vSendUopCmd(UOP_CHANGE_ASTN, _bIRKey - 1, DVD_CHG_AST_OPT2, DVD_CHG_AST_OPT3);
#endif /* AUDIO_STREAM_CHANGE_MUTE */
vSetExitInputState();
}
else
{
vIrSetTimeOut(IR_TIMEOUT_AUDIO);
}
return (TRUE);
}
#endif
else
{
vSetExitInputState();
}
if (_bIRKey == IR_TIME_OUT)
{
return (TRUE);
}
return (FALSE); // default does not grab the key
}
void vDVDAudioChangeExit(void) large
{
vOsdShowAudio(OSD_AUDIO_CLEAR, 0, 0, 0, 0, 0, 0);
}
// *********************************************************************
// Change sub-picture stream
// *********************************************************************
void vDVDSubtitleChangeInit(BYTE fgInit) large
{
vDVDShowSubtitle(bSharedInfo(SI_SPST_NO), bSharedInfo(SI_SPST_NS));
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_SELECT)
#ifdef NO_ADD10_KEY
vNumInInitState(NUM_IN_SEQ_WAIT, 2);
#else
vNumInInitState(NUM_IN_TYPE_1, 1);
#endif
#endif
vIrSetTimeOut(IR_TIMEOUT_SUBTITLE);
}
BOOL fgDVDSubtitleChangeState(void) large
{
BYTE bTmp1 = bSharedInfo(SI_SPST_NO);
BYTE bTmp2 = bSharedInfo(SI_SPST_NS);
if ((bTmp1 & (~0x41)) == 0x3e) // include 0x3e, 0x3f, 0x7e, 0x7f
{
/* take dummy stream as subtitle disabled */
bTmp1 = 0x40;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -