📄 play_iso.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 03/10/14 8:12p $ ****************/
/*************** $Revision:: 2 $ ****************/
/*************** ****************/
/*************** Description : ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : ****************/
/**********************************************************************/
#define _PLAY_ISO_C_
#pragma NOAREGS
#include "general.h"
#ifdef MPEG4_TXT_SP
extern xdata BYTE _bSbStatus;
extern BOOL _bSetupResumeSub;
#endif
//#define DEBUGE_LIKE
#ifdef DEBUGE_LIKE
extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#endif
#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;
#if defined(MPEG4_TXT_SP) //Vincent -5Version @03-28-04
xdata BYTE _bSubtitleState;
//extern xdata BYTE _bSbStatus; // //Add by Tide@08-04-04
//xdata BYTE _bPressSbKey = 0;
#endif
#ifdef MP3_AUTO_PLAY
extern BYTE xdata IsoFileCmdTimer;
#endif
// *********************************************************************
// 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);
}
else
{
vISOFsMenuShow(FS_MENU_SHOW_ON);
#ifndef ISO_AUTO_PLAY
//10/10 vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_PLS_SELECT, OSD_TIMEOUT);
#endif
}
_rSearchStateCtx.bType = SEARCH_NONE;
vBookmarkReset();
_rNumInStateCtx.rState.fgComplete = TRUE; //BillDen
}
// *********************************************************************
// 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
}
// *********************************************************************
// 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 */
//10/17am for play mp4 osd display
fgRetValue = bSharedInfo(SI_ISO_ITEM_TYPE);
if (bSharedInfo(SI_DISC_TYPE) == SV_PCD || fgRetValue == SV_ISO_AVI || fgRetValue == SV_ISO_JPG) //BillDen
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) */
{
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_TIME_RMN_HH : SI_TIME_TOTAL_TRACK_HH));
if (bHour > bTmp)
{
return (FALSE);
}
else if (bHour < bTmp)
{
return (TRUE);
}
bTmp = bBCDToHEX(bSharedInfo(fgFlMenuOn ? SI_TIME_RMN_MM : SI_TIME_TOTAL_TRACK_MM));
if (bMin > bTmp)
{
return (FALSE);
}
else if (bMin < bTmp)
{
return (TRUE);
}
bTmp = bBCDToHEX(bSharedInfo(fgFlMenuOn ? SI_TIME_RMN_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;
/*bywhy 2003/02/20*/
if ((_bIRKey <= IR_ADD10) || (_bIRKey == IR_CLEAR)|| (_bIRKey == IR_RETURN) || (_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 */
{
vSetExitInputState();
vOsdShowIsoTimeSearch(0, OSD_SEARCH_CLEAR, 0);
return FALSE;
}
return (TRUE);
}
void vISOTimeSearchExit(void) large
{
_rSearchStateCtx.bType = SEARCH_NONE;
}
/************************************************************************
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;
BYTE bISOType = bSharedInfo(SI_ISO_ITEM_TYPE);
//Mars,[2002/9/17],to handle uop return in jpg digest mode
#ifdef PLAYER_FLMENU
vFlHandleUopRet(bUopId, bUopRet);
#else
vFsMenuHandleUopRet(bUopId, bUopRet);
#endif
#ifdef DEBUGE_LIKE
DRS232LogS("r7\n");
DRS232LogB(bUopId, bUopRet, bSharedInfo(SI_ISO_ITEM_TYPE),0);
#endif
#if 0//def SUPPORT_WAIXIAO
if ((bUopRet != SV_NO_ERROR)&&(/*fgIsIsoPlay()&&(*/bSharedInfo(SI_ISO_ITEM_TYPE) != SV_ISO_AVI))//)
#else
if (bUopRet != SV_NO_ERROR)
#endif
{
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);
if ((bISOType == SV_ISO_AVI || bISOType == SV_ISO_NONE)&&
bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT) //BillDen
{
vOsdPosShow(OSD_POS_REMAIN_MSG, OSD_MSG_DECODING, OSD_NO_DISAPPEAR); //BillDen
vSetSharedInfo(SI_MPIC_STT, 3);
vNotifySharedInfo(SI_MPIC_STT, 0, 0);
}
break;
case UOP_PREVIOUS:
vOsdShowPlayStatus(OSD_SHOW_PREV_ITEM, OSD_TIMEOUT_SHORT);
if ((bISOType == SV_ISO_AVI || bISOType == SV_ISO_NONE)&&
bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT) //BillDen
{
vOsdPosShow(OSD_POS_REMAIN_MSG, OSD_MSG_DECODING, OSD_NO_DISAPPEAR); //BillDen
vSetSharedInfo(SI_MPIC_STT, 3);
vNotifySharedInfo(SI_MPIC_STT, 0, 0);
}
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;
#ifdef DDISC_PB_SINGLE_ENABLED
case SV_SINGLE:
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_MP3_SINGLE, OSD_TIMEOUT_SHORT);
break;
#endif
case SV_REPEAT_NONE:
case SV_REPEAT_ABNONE:
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_REPEAT_OFF, OSD_TIMEOUT_SHORT);
break;
#if 0 //bywhy 10/09
case SV_SHUFFLE:
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_MP3_SHUFFLE, OSD_TIMEOUT_SHORT);
break;
case SV_RANDOM:
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_MP3_RANDOM, OSD_TIMEOUT_SHORT);
break;
#endif
default:
break;
} /* switch () */
bRet = UOP_OK;
}
break;
} /* UOP_REPEAT */
/* trick mode control */
/* case UOP_FORWARD: */
/* case UOP_REVERSE: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -