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

📄 play_iso.c

📁 mtk1389L latest sourcecode enjoy
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********************************************************************/
/***************    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 + -