📄 play_dvd.c
字号:
if ((bSharedInfo(SI_PBC_STATE) != SV_PLAY) || ((bTmp1 & 0x1f) >= bTmp2) || (bTmp2 == 0))
{
vSetExitInputState();
return (FALSE);
}
if (_bIRKey == IR_SUB_TITLE)
{
#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
if (bTmp2 > 0)
{
if (bTmp1 & 0x40)
{
if ((bTmp1 & 0x1f) >= bTmp2 - 1)
{
/* turn off sub-picture */
bTmp1 = 0x00;
}
else
{
/* next sp */
bTmp1 = ((bTmp1 & 0x1f) + 1) | 0x40;
}
}
else
{
bTmp1 = 0x40; /* first stream is 0 */
}
vSendUopCmd(UOP_CHANGE_SPSTN, bTmp1, 0, 0);
} /* bTmp2 > 0 */
vIrSetTimeOut(IR_TIMEOUT_SUBTITLE);
return (TRUE);
}
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_SELECT)
else if ((_bIRKey <= IR_ADD10 || _bIRKey == IR_ADD5) && (bTmp2 > 0) && (bTmp1 & 0x40)) /* only valid when sub-title on */ // megaa ADD5
{
fgNumInState();
if (_rNumInStateCtx.rState.fgComplete)
{
if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
(_rNumInStateCtx.wNum <= bTmp2))
{
if (_rNumInStateCtx.wNum > 0)
{
vSendUopCmd(UOP_CHANGE_SPSTN, (_rNumInStateCtx.wNum - 1) | 0x40, 0, 0);
}
#ifdef NO_ADD10_KEY
else if (_rNumInStateCtx.wNum == 0)
{
vSendUopCmd(UOP_CHANGE_SPSTN, 0, 0, 0); /* sub-title off */
}
#endif
}
else
{
vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
}
vSetExitInputState();
}
#ifndef NO_ADD10_KEY
else if (_bIRKey == IR_NUM0) /* the fgNumInState() does not handle number 0 */
{
vSendUopCmd(UOP_CHANGE_SPSTN, 0, 0, 0); /* sub-title off */
vSetExitInputState();
}
#endif /* NO_ADD10_KEY */
else /* _rNumInStateCtx.rState.fgComplete */
{
vOsdShowSubtitle(OSD_SUBTITLE_HILI | _rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.wNum, bTmp2,
bSharedInfo(SI_SP_LCD_0), bSharedInfo(SI_SP_LCD_1), OSD_NO_DISAPPEAR);
vIrSetTimeOut(IR_TIMEOUT_SUBTITLE);
}
return (TRUE);
}
#endif
else
{
vSetExitInputState();
}
if (_bIRKey == IR_TIME_OUT)
{
return (TRUE);
}
return (FALSE); // default does not grab the key
}
void vDVDSubtitleChangeExit(void) large
{
vOsdShowSubtitle(OSD_SUBTITLE_CLEAR, 0, 0, 0, 0, 0);
}
// *********************************************************************
// Change Angle
// *********************************************************************
void vDVDAngleChangeInit(BYTE fgInit) large
{
vOsdShowAngle(OSD_ANGLE_HILI, bSharedInfo(SI_AGL_NO), bSharedInfo(SI_AGL_NS));
vIrSetTimeOut(IR_TIMEOUT_ANGLE);
}
BOOL fgDVDAngleChangeState(void) large
{
BYTE bTmp1 = bSharedInfo(SI_AGL_NO);
BYTE bTmp2 = bSharedInfo(SI_AGL_NS);
if ((bSharedInfo(SI_PBC_STATE) != SV_PLAY) ||
(bTmp2 <= 1) || (bTmp2 > 9) || (bTmp1 > bTmp2))
{
vSetExitInputState();
if (_bIRKey == IR_TIME_OUT)
{
return (TRUE);
}
else
{
return (FALSE);
}
}
if (_bIRKey == IR_ANGLE) /* change to next angle */
{
#if 0
if (bTmp1 >= bTmp2)
{
bTmp1 = 1;
}
else
{
bTmp1++;
}
vSendUopCmd(UOP_CHANGE_AGL, bTmp1, 0, 0);
#else
vSendUopCmd(UOP_NEXT_AGL, 0, 0, 0);
#endif
vIrSetTimeOut(IR_TIMEOUT_ANGLE);
return (TRUE);
}
else if ((_bIRKey <= IR_NUM9) && (bTmp2 > 1))
{
if ((_bIRKey > 0) && (_bIRKey <= bTmp2))
{
vSendUopCmd(UOP_CHANGE_AGL, _bIRKey, 0, 0);
/* don't escape input state here, update OSD */
vOsdShowAngle(OSD_ANGLE_HILI, _bIRKey, bTmp2);
}
vIrSetTimeOut(IR_TIMEOUT_ANGLE);
return (TRUE);
}
else
{
vSetExitInputState();
}
if (_bIRKey == IR_TIME_OUT)
{
return (TRUE);
}
return (FALSE); // default does not grab the key
}
void vDVDAngleChangeExit(void) large
{
if (fgIsAngleShow())
{
vOsdShowAngle(OSD_ANGLE_NORMAL, bSharedInfo(SI_AGL_NO), bSharedInfo(SI_AGL_NS));
}
else
{
vOsdShowAngle(OSD_ANGLE_CLEAR, 0, 0);
}
}
// *********************************************************************
// Change display mode
// *********************************************************************
void vDVDDisplayChangeInit(BYTE fgInit) large
{
vOsdDisplayChange(DISP_REMAIN_CHG_INIT, bCurrRemainType());
vIrSetTimeOut(IR_TIMEOUT_DISPLAY);
}
BOOL fgDVDDisplayChangeState(void) large
{
BYTE bType = bCurrRemainType();
if (_bIRKey != IR_DISPLAY)
{
vSetExitInputState();
if (_bIRKey == IR_TIME_OUT)
{
return (TRUE);
}
}
else /* if (_bIRKey == IR_DISPLAY) */
{
bType++;
if (bType > OSD_SHOW_DVD_REMAIN_MAX)
{
bType = OSD_SHOW_DISABLE;
}
vOsdDisplayChange(DISP_REMAIN_CHG_INIT, bType);
vIrSetTimeOut(IR_TIMEOUT_DISPLAY);
return (TRUE);
}
return (FALSE);
}
void vDVDDisplayChangeExit(void) large
{
vOsdDisplayChange(DISP_REMAIN_CHG_EXIT, 0);
}
// *********************************************************************
// Handle playback UOP return
// *********************************************************************
BYTE bDVDHandleUopRet(BYTE bUopId, BYTE bUopRet) large
{
BYTE bRet;
BYTE bTmp1, bTmp2;
if (bUopRet != SV_NO_ERROR)
{
bRet = UOP_FAIL; /* show error */
}
else
{
bRet = UOP_UPDATE;
}
switch (bUopId)
{
case UOP_DIGITAL_BTN:
case UOP_ARROW_BTN:
{
bRet = UOP_OK; /* no show error */
break;
}
/* normal playback */
case UOP_PLAY:
case UOP_RESUME_PLAY:
if (bUopRet == SV_NO_ERROR)
{
vOsdShowPlayStatus(OSD_SHOW_PLAY, OSD_TIMEOUT_SHORT);
if (bSharedInfo(SI_DVD_DOM) == SV_VTSTT_DOM)
{
bTmp1=bSharedInfo(SI_TT_NO);
bTmp2=bSharedInfo(SI_TRACK_NO);
vVfdWord(VFD_WORD_TT, bHEXToBCD(bTmp1), 1);
vVfdWord(VFD_WORD_CH, bHEXToBCD(bTmp2), 1);
vVfdSymbol(VFD_SYM_PLAYINFO_TT_CH);
}
}
_fgDVDStopPlayWait = FALSE ;
break;
/* case UOP_PAUSE: */
/* case UOP_STOP: */
case UOP_NEXT:
#ifdef DVD_SHOW_MSG_FIRST
if (bUopRet != SV_NO_ERROR)
{
/* TODO: recall play status */
vOsdShowPlayStatus(OSD_SHOW_CLEAR, 0);
}
#else
if (bUopRet == SV_NO_ERROR)
{
vOsdShowPlayStatus(OSD_SHOW_NEXT_CH, OSD_TIMEOUT_SHORT);
}
#endif
break;
case UOP_TOP:
case UOP_PREVIOUS:
#ifdef DVD_SHOW_MSG_FIRST
if (bUopRet != SV_NO_ERROR)
{
/* TODO: recall play status */
vOsdShowPlayStatus(OSD_SHOW_CLEAR, 0);
}
#else
if (bUopRet == SV_NO_ERROR)
{
vOsdShowPlayStatus(OSD_SHOW_PREV_CH, OSD_TIMEOUT_SHORT);
}
#endif
#ifdef KARAOKE_SCORING
if (bUopRet == SV_NO_ERROR)
{
vAdspResetKScore();
}
#endif
break;
case UOP_REPEAT:
bTmp1 = bSharedInfo(SI_REPEAT_MODE);
bTmp2 = bSharedInfo(SI_USR_AUX_CTRL);
if ((bUopRet == SV_NO_ERROR) && (!fgISUsrSeqPlay(bTmp2)))
{
/*
Move the normal display in else condition in any case by Bright_liu 2005/12/01, for CQ(PL00205173)
In Goto menu, press the IR_AB first, the press the IR_REPEAT key, exit the GOTO menu,
press IR_VRMT/IR_PROGRAM/IR_MARK, no OSD display.
*/
switch (bTmp1)
{
case SV_REPEAT_ALL:
#ifdef PLAYER_GOTO
// megaa Goto begin
if (fgIsInGoto())
{
vShowGotoRepeat(OSD_MSG_ICON_RPT_ALL);
}
else
// megaa Goto end
#endif
{
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_ALL, OSD_TIMEOUT_SHORT);
}
break;
case SV_REPEAT_TITLE:
#ifdef PLAYER_GOTO
// megaa Goto begin
if (fgIsInGoto())
{
vShowGotoRepeat(OSD_MSG_ICON_RPT_TT);
}
else
// megaa Goto end
#endif
{
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_TITLE, OSD_TIMEOUT_SHORT);
}
break;
case SV_REPEAT_CHAPTER:
#ifdef PLAYER_GOTO
// megaa Goto begin
if (fgIsInGoto())
{
vShowGotoRepeat(OSD_MSG_ICON_RPT_CH);
}
else
// megaa Goto end
#endif
{
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_CHAPTER, OSD_TIMEOUT_SHORT);
}
break;
case SV_REPEAT_NONE:
case SV_REPEAT_ABNONE:
#ifdef PLAYER_GOTO
// megaa Goto begin
if (fgIsInGoto())
{
vShowGotoRepeat(OSD_MSG_OFF);
}
else
// megaa Goto end
#endif
{
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_OFF, OSD_TIMEOUT_SHORT);
}
break;
default:
break;
} /* switch () */
}
break;
/* trick mode control */
#ifdef DVD_SHOW_MSG_FIRST
case UOP_FORWARD:
case UOP_REVERSE:
/* note only for FF/FR/SF/SR */
if (bUopRet == SV_NO_ERROR)
{
vOsdShowPlayStatus(OSD_SHOW_CLEAR, 0);
bRet = UOP_OK; /* no need to update again! */
}
break;
#endif /* DVD_SHOW_MSG_FIRST */
/* case UOP_STEP: */
/* case UOP_STEP_BACK: */
/* case UOP_A_TO_B: */
/* case UOP_FREEZE: */
/* PBC control */
case UOP_MENU_CALL:
if (bUopRet == SV_NO_ERROR)
{
vDVDShowMenuType(OSD_TIMEOUT);
}
break;
/* case UOP_RETURN: */
case UOP_CHANGE_ASTN:
case UOP_NEXT_ASTN:
{
bTmp1 = bSharedInfo(SI_AST_NO);
bTmp2 = bSharedInfo(SI_AST_NS);
#ifdef AUDIO_STREAM_CHANGE_MUTE
if (!fgIsMute()) /* if mute off */
{
// TODO: if change from PCM to PCM?
if (bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM)
{
vAdspMute(ADSP_ON, AST_PCM_CHANGE_UNMUTE_CNT); // extra mute time for PCM
}
}
#endif /* AUDIO_STREAM_CHANGE_MUTE */
if ((bUopRet == SV_NO_ERROR) && (bTmp1 < bTmp2) && (bTmp2 > 0))
{
#ifdef PLAYER_KARAOKE
if ((bAdspCurrVocal() != VOCAL_AUDIO1) && (bAdspCurrVocal() != VOCAL_AUDIO2))
#endif
{
// Seiya: Added on 2004/07/27 for dual mono switch.
#ifdef DVD_VR_SUPPORT
// LLY.1126, must set dual mono L/R channel to DSP immediately
// while NV can know current audio stream type is dual mono
// Otherwise, L/R channel info maybe wrong during vShowAudio()
// Because, the info. is read-back from DSP
if(fgIsVRDualMono())
{
//set desired dual mono stream channel mode,
vAdspLR(bSharedInfo(SH_VR_DUAL_MONO_MODE));
}
#endif
vDVDShowAudio(bTmp1, bTmp2);
}
//#if SUPPORT_DVD_AUDIO
#if 0
if (bSharedInfo(SI_DISC_TYPE) == SV_DVD_AUDIO)
vSendUopCmd(UOP_TOP, 0, 0, 0);
#endif
}
else
{
#if (DVD_USER_STREAM_CHANGE == DVD_STREAM_CHANGE_DIRECT)
vOsdShowAudio(OSD_AUDIO_CLEAR, 0, 0, 0, 0, 0, 0);
#else
if (fgIsInputStateValid(INPUT_STATE_AUDIO_CHANGE))
{
fgSetPlayPostKey(IR_TIME_OUT);
}
#endif
}
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -