📄 play_iso.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 05/07/06 10:11a $ ****************/
/*************** $Revision:: 19 $ ****************/
/*************** ****************/
/*************** 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;
#ifdef WB_ALLOC_MIN
// *********************************************************************
// Function : void vDisableStaticWB(BYTE bType) large
// Description :
// Parameter : None
// Return : None
// *********************************************************************
void vDisableStaticWB()
{
vDisableWB(WB_NORMAL_HEAD1);
vDisableWB(WB_OVERLAY_MSG1);
vDisableWB(WB_NORMAL_HEAD2);
vDisableWB(WB_NORMAL_PBC1);
vDisableWB(WB_NORMAL_PBC2);
vDisableWB(WB_NORMAL_VOL);
}
#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); */
#ifdef WB_ALLOC_MIN
vDisableStaticWB();
#endif
#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_DEFAULT);
#endif
#if (defined(SUPPORT_CAPTURE_LOGO) && defined(PLAYER_FLMENU))
vSetSharedInfo(SI_FLASH_LOGO_IDX, 2);
vSetSharedInfo(SI_DEFAULT_LOGO, SV_LOGO_FLASH);
#endif
vSetSharedInfo(SI_MP3_BITRATE_LO, 0);
vSetSharedInfo(SI_MP3_BITRATE_HI, 0);
// 20050323, IS00001865, RISC won't clear the value until it's clicked, so we clear it in 8032
vSetSharedInfo(SI_MP3_MOD, SV_STOP);
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
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_PLS_SELECT, OSD_TIMEOUT);
#endif
}
_rSearchStateCtx.bType = SEARCH_NONE;
#ifdef PLAYER_BOOKMARK
vBookmarkReset();
#endif
}
// *********************************************************************
// Function : void vISOExit(void) large
// Description : ISO play module exit
// Parameter : None
// Return : None
// *********************************************************************
void vISOExit(void) large
{
BYTE bValue ;
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);
#if 1
// 20050614, restore SI_DEFAULT_LOGO because it'll be written as SV_LOGO_FLASH in vISOInit().
switch (bEepromReadByte(LOGO_TYPE_POSITION))
{
case EV_LOGO_JACKET:
bValue = SV_LOGO_JACKET;
break;
case EV_LOGO_BLUE:
bValue = SV_LOGO_COLOR;
break;
case EV_LOGO_CAPTURED:
bValue = SV_LOGO_CAPTURE;
break;
case EV_LOGO_DEFAULT:
default:
bValue = SV_LOGO_FLASH;
break;
}
vSetSharedInfo(SI_DEFAULT_LOGO, bValue);
#else
// assume bSetLogoType() does not use code segment
//050609 avoid to move logo data before adsp stop
bSetLogoType(0, bEepromReadByte(LOGO_TYPE_POSITION));
#endif
#endif
}
// *********************************************************************
// Function : BOOL fgFsMenuShow(BOOL fgOnOff)
// Description :
// Parameter : None
// Return : None
// *********************************************************************
void vISOFsMenuShow(BYTE bMode) large
{
if (bMode <= FS_MENU_SHOW_ON)
vFsMenuInit(TRUE);
else if(FS_MENU_SHOW_REFRESH)
vFsMenuInit(FALSE);
}
// *********************************************************************
// 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) */
{
// 20050324, IS00001871, 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 */
#if defined(PLAYER_GOTO) || defined(MPEG_GOTO)
// *********************************************************************
// 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;
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 */
{
// 20050324, IS00001871, 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;
}
#endif /* defined(PLAYER_GOTO) || defined(MPEG_GOTO) */
/************************************************************************
Function : void vOsdUpdate(void)
Description : Update OSD/VFD
Parameter : None
Return : None
************************************************************************/
#ifndef NEW_PLAY
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -