📄 play_dvd.c
字号:
}
// megaa ADD5 end
fgRetValue = fgNumInState();
if (fgRetValue == TRUE)
{
if (_rNumInStateCtx.rState.fgComplete == TRUE)
{
if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
(_rNumInStateCtx.wNum <= bChNs))
{
if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
vOsdShowChapterTimeSearch(_rNumInStateCtx.wNum, bChNs,
(OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
_rSearchStateCtx.bType = SEARCH_DVD_TIME_CH_WAIT;
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
else
{
#ifdef SEARCH_INPUT_SHOW
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS), OSD_DVD_SEARCH_END,
_rNumInStateCtx.wNum, bChNs, OSD_TIMEOUT_SHORT);
}
else
{
vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS), OSD_DVD_SEARCH_END,
_rNumInStateCtx.wNum, bChNs, OSD_TIMEOUT_SHORT);
}
#else
vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0); /* clear OSD and input field */
#endif
_rSearchStateCtx.bType = SEARCH_NONE;
vSetExitInputState();
}
#ifdef DVD_NO_PTT_PLAY_UOP_BLOCK
if (fgCheckUopBlock(SV_NV_PTT_PLAY) == TRUE)
{
if (bDiscType == SV_DVD_AUDIO)
{
vSendUopCmd(UOP_TRACK_PLAY, _rNumInStateCtx.wNum, 0, 0);
}
else
{
vSendUopCmd(UOP_PTT_PLAY, _rNumInStateCtx.wNum, SV_PTT_PLAY_FORCE, 0);
}
}
else
#endif
{
if (bDiscType == SV_DVD_AUDIO)
{
vSendUopCmd(UOP_TRACK_PLAY, _rNumInStateCtx.wNum, 0, 0);
}
else
{
vSendUopCmd(UOP_PTT_PLAY, _rNumInStateCtx.wNum, SV_PTT_PLAY_NORMAL, 0);
}
}
}
else /* input cancelled */
{
if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
}
else
{
vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
}
vSetExitInputState();
_rSearchStateCtx.bType = SEARCH_NONE;
vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
}
}
else /* not complete yet! */
{
/* update OSD only */
if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
vOsdShowChapterTimeSearch(_rNumInStateCtx.wNum, bChNs, (OSD_DVD_CH_SEARCH | 1), 0);
}
else
{
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS), 1,
_rNumInStateCtx.wNum, bChNs, OSD_NO_DISAPPEAR);
}
else
{
vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS), 1,
_rNumInStateCtx.wNum, bChNs, OSD_NO_DISAPPEAR);
}
}
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
}
else /* the key is not grabed, assume exit input state */
{
vSetExitInputState();
if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
}
else
{
vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0);
}
if ((_bIRKey == IR_LEFT) || (_bIRKey == IR_RIGHT))
{
if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
_rSearchStateCtx.bType = SEARCH_DVD_TIME;
}
else
{
_rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
}
_bIRKey = IR_SELECT;
}
else if (_bIRKey == IR_SELECT)
{
/* note we pass IR_SELECT to main state change search mode */
if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
_rSearchStateCtx.bType = SEARCH_DVD_PTT_TTL;
}
else if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_CH_CHANGE)
{
if (fgIsTimeSearchAllow() == TRUE)
{
/* change to chapter time search in main state */
_rSearchStateCtx.bType = SEARCH_DVD_TIME;
}
else
{
vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
#ifdef SEARCH_INPUT_SHOW
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_TRACK_NO), bSharedInfo(SI_TRACK_NS),
(OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
}
#ifdef DVD_VR_SUPPORT
else if (bDiscType == SV_DVD_VR)
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO),
(OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
}
#endif /* DVD_VR_SUPPORT */
else
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS),
(OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
}
#endif
_rSearchStateCtx.bType = SEARCH_NONE;
return (TRUE);
}
}
}
else
{
if (_bIRKey == IR_TIME_OUT)
{
fgRetValue = TRUE;
}
_rSearchStateCtx.bType = SEARCH_NONE;
}
}
return (fgRetValue);
}
// *********************************************************************
// Time Search State Machine
// *********************************************************************
static BOOL fgCheckTitleTimeValid(BYTE bHour, BYTE bMin, BYTE bSec) large
{
BYTE bTmp;
bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_HH));
if (bHour > bTmp)
{
return (FALSE);
}
else if (bHour < bTmp)
{
return (TRUE);
}
bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_MM));
if (bMin > bTmp)
{
return (FALSE);
}
else if (bMin < bTmp)
{
return (TRUE);
}
bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_SS));
if (bSec > bTmp)
{
return (FALSE);
}
else
{
return (TRUE);
}
}
static BOOL fgCheckChapterTimeValid(BYTE bHour, BYTE bMin, BYTE bSec) large
{
BYTE bTmp;
bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_CHAPTER_HH));
if (bHour > bTmp)
{
return (FALSE);
}
else if (bHour < bTmp)
{
return (TRUE);
}
bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_CHAPTER_MM));
if (bMin > bTmp)
{
return (FALSE);
}
else if (bMin < bTmp)
{
return (TRUE);
}
bTmp = bBCDToHEX(bSharedInfo(SI_TIME_TOTAL_CHAPTER_SS));
if (bSec > bTmp)
{
return (FALSE);
}
else
{
return (TRUE);
}
}
void vDVDTimeSearchInit(BYTE fgInit) large
{
BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
vNumInInitState(NUM_IN_DVD_TIME, 5);
if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
{
_rSearchStateCtx.bType = SEARCH_DVD_TIME_CH;
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_TRACK_NO), bSharedInfo(SI_TRACK_NS), 0, 0);
}
#ifdef DVD_VR_SUPPORT
else if (bDiscType == SV_DVD_VR)
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO), 0, 0);
}
#endif /* DVD_VR_SUPPORT */
else
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS), 0, 0);
}
}
else
{
_rSearchStateCtx.bType = SEARCH_DVD_TIME;
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowTitleTimeSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS), 0, 0);
}
else
{
vOsdShowTitleTimeSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS), 0, 0);
}
}
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
BOOL fgDVDTimeSearchState(void) large
{
BOOL fgRetValue;
BYTE bHour, bMin, bSec;
BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
if ((_bIRKey <= IR_ADD10) || (_bIRKey == IR_CLEAR) || (_bIRKey == IR_ADD5)) // megaa ADD5
{
/* we accept +10 key but do no action */
fgRetValue = fgNumInState();
if (_rNumInStateCtx.rState.fgComplete)
{
vSetExitInputState();
bHour = _rNumInStateCtx.bDig[0];
bMin = _rNumInStateCtx.bDig[1] * 10 + _rNumInStateCtx.bDig[2];
bSec = _rNumInStateCtx.bDig[3] * 10 + _rNumInStateCtx.bDig[4];
if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
{
//vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0); /* clear OSD and input field */ // disabled by megaa
if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
(fgCheckTitleTimeValid(bHour, bMin, bSec) == TRUE))
{
#ifdef SEARCH_INPUT_SHOW
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowTitleTimeSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS),
OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
}
else
{
vOsdShowTitleTimeSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
}
#endif
vSendUopCmd(UOP_TIME_PLAY, bHour, bMin, bSec);
}
else
{
vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0); /* clear OSD and input field */ // added by megaa
vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
}
}
else /* chapter tiem search */
{
//vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0); /* clear OSD and input field */ // disabled by megaa
if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
(fgCheckChapterTimeValid(bHour, bMin, bSec) == TRUE))
{
#ifdef SEARCH_INPUT_SHOW
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_TRACK_NO), bSharedInfo(SI_TRACK_NS),
OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
}
#ifdef DVD_VR_SUPPORT
else if (bDiscType == SV_DVD_VR)
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO),
OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
}
#endif /* DVD_VR_SUPPORT */
else
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS),
OSD_DVD_SEARCH_END, _rNumInStateCtx.bDig);
}
#endif
vSendUopCmd(UOP_PTT_TIME_PLAY, bHour, bMin, bSec); //?
}
else
{
vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0); /* clear OSD and input field */ // added by megaa
vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
}
}
// remember clear search type
_rSearchStateCtx.bType = SEARCH_NONE;
}
else /* _rNumInStateCtx.rState.fgComplete */
{
if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
{
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowTitleTimeSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS),
_rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
}
else
{
vOsdShowTitleTimeSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS),
_rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
}
}
else /* chapter tiem search */
{
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_TRACK_NO), bSharedInfo(SI_TRACK_NS),
_rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
}
#ifdef DVD_VR_SUPPORT
else if (bDiscType == SV_DVD_VR)
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_VR_CH_NO_LO), bSharedInfo(SI_VR_CH_NS_LO),
_rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
}
#endif /* DVD_VR_SUPPORT */
else
{
vOsdShowChapterTimeSearch(bSharedInfo(SI_CHAP_NO), bSharedInfo(SI_CHAP_NS),
_rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
}
}
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
}
else /* > IR_ADD10 and not IR_CLEAR, IR_ADD5 */
{
if ((_bIRKey == IR_LEFT) || (_bIRKey == IR_RIGHT))
{
if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
{
/* switch to title search */
vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
vSetExitInputState();
/* pass to main state change search mode */
_rSearchStateCtx.bType = SEARCH_DVD_TIME_TTL;
}
else
{
/* switch to chapter search */
vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
vSetExitInputState();
/* pass to main state change search mode */
_rSearchStateCtx.bType = SEARCH_DVD_CH;
}
_bIRKey = IR_SELECT;
return (FALSE);
}
else /* other keys */
{
if (_rSearchStateCtx.bType == SEARCH_DVD_TIME)
{
vOsdShowTitleTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
}
else
{
vOsdShowChapterTimeSearch(0, 0, OSD_SEARCH_CLEAR, 0);
}
vSetExitInputState();
if (_bIRKey == IR_SELECT)
{
/* pass to main state change search mode */
return (FALSE);
}
else
{
/* remember clear search state */
_rSearchStateCtx.bType = SEARCH_NONE;
}
} /* other keys */
} /* > IR_ADD10 and not IR_CLEAR, IR_ADD5 */
return(TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -