⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 play_iso.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********************************************************************/
/***************    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 + -