📄 play_iso.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 07/04/26 2:13p $ ****************/
/*************** $Revision:: 6 $ ****************/
/*************** ****************/
/*************** Description : ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : ****************/
/**********************************************************************/
#define _PLAY_ISO_C_
#pragma NOAREGS
#include "general.h"
#ifdef SUPPORT_DATA_DISC
#if (defined(SUPPORT_CAPTURE_LOGO) && defined(PLAYER_FLMENU))
#include "setupmn\stprisc.h" /* for component key */
#endif
extern void vSetupMenuClose(void) large;
// *********************************************************************
// Function : void vISOInit(BYTE bType) large
// Description : ISO play module initial
// Parameter : None
// Return : None
// *********************************************************************
void vISOInit(BYTE bType) large
{
/* vISOFsMenuShow(FS_MENU_SHOW_INIT); */
#if (defined(SUPPORT_CAPTURE_LOGO) && defined(PLAYER_FLMENU))
vSetSharedInfo(SI_FLASH_LOGO_IDX, 2);
vSetSharedInfo(SI_DEFAULT_LOGO, SV_LOGO_FLASH);
#endif
if (fgIsInSetupMenu())
{
#ifdef WB_ALLOC_MIN
vSetupMenuClose();
#endif
vISOFsMenuShow(FS_MENU_SHOW_INIT);
vOsdPosClear(OSD_POS_INIT);
}
#ifdef SUPPORT_DRM
else if(fgIsInDRMShow())
{
vDRMDisRgCdExitState();
vISOFsMenuShow(FS_MENU_SHOW_INIT);
vOsdPosClear(OSD_POS_INIT);
}
#endif
else
{
vISOFsMenuShow(FS_MENU_SHOW_ON);
#ifndef ISO_AUTO_PLAY
/* alan cheng: comment out the following line because the WB for WB_MP4_SP
may not have enough memory when USB is enabled
according to Michael Tsao */
//vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_PLS_SELECT, OSD_TIMEOUT);
#endif
}
_rSearchStateCtx.bType = SEARCH_NONE;
vBookmarkReset();
}
// *********************************************************************
// Function : void vISOExit(void) large
// Description : ISO play module exit
// Parameter : None
// Return : None
// *********************************************************************
void vISOExit(void) large
{
vFsMenuExit();
/* make sure the WB is deleted */
vDeleteWB(FSMENU_OSD_WBIDX_BASIC);
vDeleteWB(FSMENU_OSD_WBIDX_SEC);
#if (defined(SUPPORT_CAPTURE_LOGO) && defined(PLAYER_FLMENU))
vSetSharedInfo(SI_FLASH_LOGO_IDX, 0);
// assume bSetLogoType() does not use code segment
bSetLogoType(0, bEepromReadByte(LOGO_TYPE_POSITION));
#endif
vSetSharedInfo(SI_DDISC_DEF_PMODE, DDISC_DEF_PLAYBACK_MODE);
}
// *********************************************************************
// Function : BOOL fgFsMenuShow(BOOL fgOnOff)
// Description :
// Parameter : None
// Return : None
// *********************************************************************
void vISOFsMenuShow(BYTE bMode) large
{
switch (bMode)
{
case FS_MENU_SHOW_INIT:
case FS_MENU_SHOW_ON:
vFsMenuInit(TRUE);
break;
case FS_MENU_SHOW_REFRESH:
vFsMenuInit(FALSE);
break;
case FS_MENU_SHOW_HIDE:
/* not support yet! */
break;
default:
break;
}
}
// *********************************************************************
// FS menu key filter
// *********************************************************************
void vISOFSMenuFilterInit(BYTE fgInit) large
{
}
BOOL fgISOFSMenuFilterState(void) large
{
return (FALSE); /* Key is not grabbed. */
}
void vISOFSMenuFilterExit(void) large
{
}
// *********************************************************************
// File Number Select State Machine
// *********************************************************************
#if (!defined(NO_ADD10_KEY) && defined(ISO_SELECT_USE_ADD10_KEY))
void vISOFileSelectInit(BYTE fgInit) large
{
if (fgFlCheckStatus(FL_STATUS_OCCUPIED))
return;
_rSearchStateCtx.bType = SEARCH_ISO_FILE;
vNumInInitState(NUM_IN_TYPE_4, 1);
/* here is some trick, not a good way! */
if (_bIRKey > IR_ADD10 && _bIRKey != IR_ADD5) // megaa ADD5
{
vOsdShowSelect3(0, OSD_SELECT_HILI, OSD_NO_DISAPPEAR);
}
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
BOOL fgISOFileSelectState(void) large
{
BOOL fgRetValue;
if (_bIRKey == IR_GOTO)
return FALSE;
fgRetValue = fgNumInState();
if (fgRetValue == TRUE)
{
if (_rNumInStateCtx.rState.fgComplete)
{
if (_rNumInStateCtx.rState.fgCancel == FALSE)
{
/* Check inputed number in the FS menu */
vOsdShowSelect3(_rNumInStateCtx.wNum, _rNumInStateCtx.rState.bDigNum, OSD_TIMEOUT_SHORT);
_rNumInStateCtx.bDig[0] = _rNumInStateCtx.wNum / 100;
_rNumInStateCtx.wNum -= _rNumInStateCtx.bDig[0] * 100;
_rNumInStateCtx.bDig[1] = _rNumInStateCtx.wNum / 10;
_rNumInStateCtx.wNum -= _rNumInStateCtx.bDig[1] * 10;
_rNumInStateCtx.bDig[2] = _rNumInStateCtx.wNum;
/* pass to FS menu */
fgSetPlayPostKey(IR_SELECT_DONE);
_rSearchStateCtx.bType = SEARCH_NONE;
vSetExitInputState();
return (TRUE);
}
else
{
#ifndef PLAYER_FLMENU
vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
#endif
vSetExitInputState();
vOsdShowSelect3(0, OSD_SELECT_CLEAR, 0);
}
}
else /* _rNumInStateCtx.rState.fgComplete */
{
vOsdShowSelect3(_rNumInStateCtx.wNum, OSD_SELECT_HILI | _rNumInStateCtx.rState.bDigNum, OSD_NO_DISAPPEAR);
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
}
else /* if (fgRetValue == TRUE) */
{
vSetExitInputState();
vOsdShowSelect3(0, OSD_SELECT_CLEAR, 0);
}
return (TRUE);
}
void vISOFileSelectExit(void) large
{
_rSearchStateCtx.bType = SEARCH_NONE;
}
#else /* no use ADD10 key */
void vISOFileSelectInit(BYTE fgInit) large
{
if (fgFlCheckStatus(FL_STATUS_OCCUPIED))
return;
_rSearchStateCtx.bType = SEARCH_ISO_FILE;
#if (defined(NO_ADD10_KEY) || defined(ISO_TIMEOUT_SELECT))
if (wFlGetListLen() < 1000)
vNumInInitState(NUM_IN_SEQ_LIMIT, 3);
else
vNumInInitState(NUM_IN_SEQ_LIMIT, 4);
#else
if (wFlGetListLen() < 1000)
vNumInInitState(NUM_IN_TYPE_2, 3);
else
vNumInInitState(NUM_IN_TYPE_2, 4);
#endif
/* here is some trick, not a good way! */
if (_bIRKey > IR_ADD10 && _bIRKey != IR_ADD5) // megaa ADD5
{
vOsdShowSelect3(0, OSD_SELECT_HILI, OSD_NO_DISAPPEAR);
}
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
BOOL fgISOFileSelectState(void) large
{
BOOL fgRetValue;
if (_bIRKey == IR_GOTO)
return FALSE;
fgRetValue = fgNumInState();
if (fgRetValue == TRUE)
{
/* we accept +10 key but do no action */
if (_rNumInStateCtx.rState.fgComplete)
{
if (_rNumInStateCtx.rState.fgCancel == FALSE)
{
/* Check inputed number in the FS menu */
vOsdShowSelect3(_rNumInStateCtx.bDig, _rNumInStateCtx.rState.bDigNum, OSD_TIMEOUT_SHORT);
/* pass to FS menu */
_bIRKey = IR_SELECT_DONE;
_rSearchStateCtx.bType = SEARCH_NONE;
vSetExitInputState();
return (FALSE);
}
else
{
vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
vSetExitInputState();
vOsdShowSelect3(0, OSD_SELECT_CLEAR, 0);
}
}
else /* _rNumInStateCtx.rState.fgComplete */
{
vOsdShowSelect3(_rNumInStateCtx.bDig, OSD_SELECT_HILI | _rNumInStateCtx.rState.bDigNum, OSD_NO_DISAPPEAR);
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
}
else /* if (fgRetValue == TRUE) */
{
// 20050414, IS00002438, clear timeout key so that it won't show prohibit icon
if (_bIRKey == IR_TIME_OUT)
_bIRKey = IR_NONE ;
vSetExitInputState();
vOsdShowSelect3(0, OSD_SELECT_CLEAR, 0);
return FALSE;
}
return (TRUE);
}
void vISOFileSelectExit(void) large
{
_rSearchStateCtx.bType = SEARCH_NONE;
#ifdef PLAYER_FLMENU
if (fgFlCheckStatus(FL_STATUS_IN_MENU))
vOsdShowSelect3(_rNumInStateCtx.bDig, OSD_SELECT_HILI | 5, OSD_TIMEOUT_SHORT);
#endif
}
#endif /* no use ADD10 key */
// *********************************************************************
// Time Check Function
// *********************************************************************
static BOOL fgCheckItemTimeValid(BYTE bHour, BYTE bMin, BYTE bSec) large
{
BYTE bTmp;
BYTE fgFlMenuOn = fgFlCheckStatus(FL_STATUS_IN_MENU);
bTmp = bBCDToHEX(bSharedInfo(fgFlMenuOn ? SI_MP3_TOTAL_TIME_HH : SI_TIME_TOTAL_TRACK_HH));
if (bHour > bTmp)
{
return (FALSE);
}
else if (bHour < bTmp)
{
return (TRUE);
}
bTmp = bBCDToHEX(bSharedInfo(fgFlMenuOn ? SI_MP3_TOTAL_TIME_MM : SI_TIME_TOTAL_TRACK_MM));
if (bMin > bTmp)
{
return (FALSE);
}
else if (bMin < bTmp)
{
return (TRUE);
}
bTmp = bBCDToHEX(bSharedInfo(fgFlMenuOn ? SI_MP3_TOTAL_TIME_SS : SI_TIME_TOTAL_TRACK_SS));
if (bSec > bTmp)
{
return (FALSE);
}
else
{
return (TRUE);
}
}
// *********************************************************************
// Time Search State Machine
// *********************************************************************
void vISOTimeSearchInit(BYTE fgInit) large
{
_rSearchStateCtx.bType = SEARCH_ISO_TIME;
if (fgFlCheckStatus(FL_STATUS_IN_MPEG))
vNumInInitState(NUM_IN_DVD_TIME, 5);
else
vNumInInitState(NUM_IN_VCD_TIME, 4);
vOsdShowIsoTimeSearch(0, OSD_SEARCH_FILE, 0);
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
BOOL fgISOTimeSearchState(void) large
{
BOOL fgRetValue;
BYTE bHour, bMin, bSec;
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();
vOsdShowIsoTimeSearch(0, OSD_SEARCH_CLEAR, 0);
if (fgFlCheckStatus(FL_STATUS_IN_MPEG))
{
bHour = _rNumInStateCtx.bDig[0];
bMin = _rNumInStateCtx.bDig[1] * 10 + _rNumInStateCtx.bDig[2];
bSec = _rNumInStateCtx.bDig[3] * 10 + _rNumInStateCtx.bDig[4];
}
else
{
bHour = 0;
bMin = _rNumInStateCtx.bDig[0] * 10 + _rNumInStateCtx.bDig[1];
bSec = _rNumInStateCtx.bDig[2] * 10 + _rNumInStateCtx.bDig[3];
}
if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
(fgCheckItemTimeValid(bHour, bMin, bSec) == TRUE))
{
#ifdef SEARCH_INPUT_SHOW
vOsdShowIsoTimeSearch(OSD_ISO_SEARCH_END, OSD_SEARCH_FILE, _rNumInStateCtx.bDig);
#endif
vSendUopCmd(UOP_TIME_PLAY, bHour, bMin, bSec);
}
else
{
vOsdShowError(SV_ERR_INPUT_INVALID, OSD_TIMEOUT_SHORT);
}
}
else /* _rNumInStateCtx.rState.fgComplete */
{
vOsdShowIsoTimeSearch(_rNumInStateCtx.rState.bDigNum, OSD_SEARCH_FILE, _rNumInStateCtx.bDig);
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
}
else /* > IR_ADD10 and not IR_CLEAR, IR_ADD5 */
{
// 20050414, IS00002438, clear timeout key so that it won't show prohibit icon
if (_bIRKey == IR_TIME_OUT)
_bIRKey = IR_NONE ;
vSetExitInputState();
vOsdShowIsoTimeSearch(0, OSD_SEARCH_CLEAR, 0);
return FALSE;
}
return (TRUE);
}
void vISOTimeSearchExit(void) large
{
_rSearchStateCtx.bType = SEARCH_NONE;
/*
Add it by Bright_liu 2005/12/15, for CQ(PL00205115)
when in PAUSE, exit time search, the time disppear.
*/
#ifdef PLAYER_FLMENU // Bright_liu
if (fgFlCheckStatus(FL_STATUS_IN_MENU))
vISOShowTimeMark(TRUE);
#endif
}
/************************************************************************
Function : void vOsdUpdate(void)
Description : Update OSD/VFD
Parameter : None
Return : None
************************************************************************/
BYTE bISOHandleUopRet(BYTE bUopId, BYTE bUopRet) large
{
BYTE bRet = UOP_UPDATE;
BYTE bTmp1, bTmp2;
//Mars,[2002/9/17],to handle uop return in jpg digest mode
#ifdef PLAYER_FLMENU
vFlHandleUopRet(bUopId, bUopRet);
#else
vFsMenuHandleUopRet(bUopId, bUopRet);
#endif
if (bUopRet != SV_NO_ERROR)
{
return (UOP_FAIL); /* show error */
}
switch (bUopId)
{
case UOP_DIGITAL_BTN:
case UOP_ARROW_BTN:
{
bRet = UOP_OK; /* no show error */
break;
}
/* normal playback */
case UOP_PLAY:
vOsdShowPlayStatus(OSD_SHOW_PLAY, OSD_TIMEOUT_SHORT);
break;
/* case UOP_PAUSE: */
/* case UOP_STOP: */
case UOP_NEXT:
vOsdShowPlayStatus(OSD_SHOW_NEXT_ITEM, OSD_TIMEOUT_SHORT);
break;
case UOP_PREVIOUS:
vOsdShowPlayStatus(OSD_SHOW_PREV_ITEM, OSD_TIMEOUT_SHORT);
break;
case UOP_REPEAT:
{
bTmp1 = bFlGetRepeatType();
bTmp2 = bSharedInfo(SI_ISO_ITEM_TYPE);
if ((fgIsIsoItemStill(bTmp2) || fgIsIsoItemAV(bTmp2))
&& (bUopRet == SV_NO_ERROR))
{
switch (bTmp1)
{
case SV_REPEAT_ALL:
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_ALL, OSD_TIMEOUT_SHORT);
break;
case SV_REPEAT_TRACK:
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_ONE, OSD_TIMEOUT_SHORT);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -