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

📄 flmpeg.c

📁 MTK 1389E SOURCE CODE
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 05/10/26 4:46p    $       ****************/
/***************  $Revision:: 16               $       ****************/
/***************                                       ****************/
/***************   Description : File List             ****************/
/***************                 MPEG Playback Module  ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Jacob Lin             ****************/
/**********************************************************************/

/**
 *          $(PROJ_HOME)/8032/custom/demo/fslist/flmpeg.c
 *
 *          Play module of video clip named "MPEG PLAYER".
 */
#define __FLMPEG_C_

#include "../general.h"
#include "flspec.h"
#include "flcomm.h"
#include "flconfig.h"


#pragma NOAREGS
#ifdef DDISC_FTYPE_MPG_SUPPORT
#ifdef PLAYER_FLMENU

/**
 * Internal global functions.
 */
static void vFlMpChgMpgState(BYTE bStt) large;
static BOOL fgFlMpOnIrCmdDone(void) large;
static BOOL fgFlMpOnIrSelDone(void) large;
static BOOL fgFlMpOnIrNext(void) large;
static BOOL fgFlMpOnIrPrev(void) large;
static void vFlMpRetClickItem(void) large;

  #ifdef MPEG_FNT_SUB_CHK
BYTE bSpkConfig(WORD wEEPos, BYTE bValue) large;
#endif
/**
 * Operation to init module "MPEG player".
 */
BOOL fgFlMpInit(void) large
{
#ifdef MPEG4_TXT_SP
  _wStartX = 0;
  _wStartY = 0;

// Fix Me
#if 1
  _wEndX = MP4_SP_WIDTH;
  _wEndY = MP4_SP_HEIGHT * 2;
  vFlSetMp4SpParam(WB_MP4_SP, OSD_ALIGN_X_LEFT, OSD_SP_FROM_TOP , 0);
#else
  _wEndX = NORMAL_VOL_WIDTH;
  _wEndY = NORMAL_VOL_HEIGHT;
  vFlSetMp4SpParam(WB_NORMAL_VOL, OSD_ALIGN_X_LEFT, OSD_SP_FROM_TOP , 0);
#endif

#endif

  return TRUE;
}

/**
 * Operation when we try to leave object "MPEG player".
 */
WORD wFlMpLeave(BOOL bSuicide) large
{
  WORD  wItem;


#ifdef MPEG4_TXT_SP
  //vSetFsCodePage(CODE_PAGE_MENU);
  vDeleteWB(WB_MP4_SP);

  #if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
    vOsdSetMemBlk(OSD_MEM_BLK_STATIC, OSD_MEM_DEFAULT);
  #endif
#endif
  vClearWB(WB_NORMAL_HEAD2);

  if (_wCurrItem != 0xFFFF)
    wItem = _wCurrItem;
  else
    wItem = (WORD)bSharedInfo(SI_MPIC_ITEM_IDX_HI) * 256 + bSharedInfo(SI_MPIC_ITEM_IDX_LO);

  if (bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT)
  {
    //vFlSendUopCmd(UOP_STOP, 0, UOP_RET_CHG_CMDTGT);
    vSendUopCmd(UOP_STOP, 0, 0, 0);
  }

  vDisableWB(WB_NORMAL_HEAD1);
  vDisableWB(WB_NORMAL_HEAD2);
  vDisableWB(WB_NORMAL_PBC1);
  vDisableWB(WB_NORMAL_PBC2);
  vDisableWB(WB_NORMAL_VOL);

#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_DEFAULT);
#endif

  return (wItem);
}

/**
 * Enter the MPEG playback control module "file list mpeg".
 */
void vFlMpEnter(WORD wItem) large
{
  vDisableWB(FL_MENU_WB);
  vDisableWB(FL_INFO_WB);

#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  vOsdSetMemBlk(OSD_MEM_BLK_STATIC, OSD_MEM_DEFAULT);
#endif

  vOsdShowWb(OSD_WB_RESTORE);
  vEnableWB(WB_NORMAL_HEAD2);
  
#ifdef MPEG_FNT_SUB_CHK
  fgEepromWriteByte(FNT_SPK_POSITION, SPK_LARGE);
  fgEepromWriteByte(SUB_SPK_POSITION, EV_OFF);  
  bSpkConfig(FNT_SPK_POSITION, SPK_LARGE);
#endif
  // - set the MPEG player as forground module
  vFlCtrlSetFg(FLMD_MPEG_PLAYER);

  _fgFlWaitStop = FALSE ;
  return;
}

void vFlMpRecover(void) large
{
  if (bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT)
    vFlUpdateVfd(TRUE);
}

/**
 * Function to handle state change of MPEG player module
 */
void vFlMpChgMpgState(BYTE bStt) large
{
  switch (bStt)
  {
    case MPICSTT_PB_STRT:
      _wFlCurAdoDir = 0xFFFF;
      _wFlCurAdoIdx = 0xFFFF;
      vFlUpdateVfd(FALSE);

  #ifdef MPEG4_TXT_SP
      if (bSharedInfo(SI_TXT_SP_EXIST))
      {
        //vSetFsCodePage(0);
    #if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
        vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_DEFAULT);
    #endif

		vCreateWB(WB_MP4_SP, TRUE);
		vSetWBTcColor(WB_MP4_SP);
		vSetMsgCol4(WB_MP4_SP, 0, 0, 0, 2);
		vSetTransEn(WB_MP4_SP, 0);
		vEnableWB(WB_MP4_SP); 
      }
      else
      {
		  vDeleteWB(WB_MP4_SP);
      }
  #endif
      break;
    case MPICSTT_PB_ABT:
      // 20050325, IS00001571, wait until MPS is stopped, then we switch back to menu
      if (_fgFlWaitStop)
      {
        _fgFlWaitStop = FALSE ;
        if (fgFlClLock(FL_CMDPATH_SEL_0))
        {
          fgFlCmdGetItems(_bFlMnListId, _wCurrItem - _bFlMnCurItemIdx);//, FLCMD_RET_OP_SEL);
        }
        break ;
      }
    case MPICSTT_PB_FSH:
      // - TODO: error handling
      if (fgFlClLock(FL_CMDPATH_CHG_CMDTGT))
      {
        vFlSetCmdTarget(FL_CMD_TARGET_MENU);
      }
      break;
    case MPICSTT_PB_ERR:
      // 20050503, PL00000140, set PBC state to SV_STOP so that we accept setup key in case the file can't playback
      if (bSharedInfo(SI_PBC_STATE) == SV_PRE_PLAY)
        vSetSharedInfo(SI_PBC_STATE, SV_STOP) ;
    default:
      // - do nothing here
      break;
  }

  return;
}

static void vFlMpRetClickItem(void) large
{
  vFlCmdDone();
  vFlClRls();

// 20050415, if use into key on menu to select MPS item. It'll change target to MPS after get item. vFlMpEnter() will be called before clicked.
// If we call vOsdSetMemBlk() before RISC's MPS is activated, the command will be invalid. So we call it after click return.
#ifdef MPEG4_TXT_SP
  #if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  vFlSetCmdTarget(FL_CMD_TARGET_MPEG);
  #endif
#endif
#if 0
  WORD wBlkPtr;
  BYTE bRCode;

  wBlkPtr = FL_CMD_BLK_SA + 1;
  bRCode = bSharedInfo(wBlkPtr ++);

  if (bRCode == FLRET_S_OK)
  {
    switch(bSharedInfo(wBlkPtr ++))
    {
      case FTYPE_JPG:
        _bFlCmdTarget = FL_CMD_TARGET_JPEG;
        //vFlSetCmdTarget(FL_CMD_TARGET_JPEG);
        break;
      case FTYPE_MP3:
        vFlSetCmdTarget(FL_CMD_TARGET_MENU);
        break;
      case FTYPE_MPG:
        //vFlSetCmdTarget(FL_CMD_TARGET_MPEG);
        break;
    }
  }
#endif
}


/**
 * Handle the notification.
 */
static BOOL fgFlMpOnIrCmdDone(void) large
{
  BYTE bModule;

  if (FL_ACK(_dwIrDoneParm) == FL_CMD_ASSERT)
  {
    // - for FS LIST command notification
    switch(bSharedInfo(FL_CMD_BLK_SA))
    {
      case FLCMD_CLICK_ITEM:
        vFlMpRetClickItem();
        break;
      default:
        // - do nothing here
        break;
    }
  }
  else
  {
    // - others
    switch (FL_ACK(_dwIrDoneParm))
    {
      case SI_MPIC_STT:
        vFlMpChgMpgState(FL_PARM1(_dwIrDoneParm));
        break;
      case SI_DDISC_PB_MODULE:
#if 0
        if (bSharedInfo(SI_DDISC_PB_MODULE) == SV_DDISC_MODULE_JPG)
        {
          _bFlCmdTarget = FL_CMD_TARGET_JPEG;
        }
        else if (bSharedInfo(SI_DDISC_PB_MODULE) == SV_DDISC_MODULE_MP3)
        {
          vFlSetCmdTarget(FL_CMD_TARGET_MENU);
        }
#endif
        break;
      default:
        // - do nothing here
        break;
    }
  }

  return TRUE;
}

/**
 * Handle the IR_SEL_DONE for digital button selection.
 */
static BOOL fgFlMpOnIrSelDone(void) large
{
  WORD  wIdx;

  wIdx = (WORD) _rNumInStateCtx.bDig[0] * 100 + _rNumInStateCtx.bDig[1] * 10 + _rNumInStateCtx.bDig[2];

  if (_wFlMnListLen >= 1000)
  {
    wIdx = wIdx * 10 + _rNumInStateCtx.bDig[3];
  }

  if ((wIdx != 0) && (wIdx <= _wFlMnListLen))
  {
    wIdx--;
    _wCurrItem = wIdx;
    _bFlMnCurItemIdx = wIdx % FLMN_ITEM_N;
    // 20050325, IS00001571, If need to switch back to parent menu, we need to wait MPS stop because MPS need to wait DSP stop, for some
    // bitstream, it takes more time, when we issue UOP_STOP, SI_MPIC_STT will become MPICSTT_PB_ABT, then we switch to menu
    //20050407, IS00002269, expand this to all item
    if (/*wIdx == 0 && */(bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT))
    {
      vSendUopCmd(UOP_STOP, 0, 0, 0) ;
      _fgFlWaitStop = TRUE ;
      return TRUE ;
    }
    if (fgFlClLock(FL_CMDPATH_SEL_0))
    {
      fgFlCmdGetItems(_bFlMnListId, wIdx - _bFlMnCurItemIdx);//, FLCMD_RET_OP_SEL);
    }
    //vFlCmdClickItem(_bFlMnListId, wIdx, FLCMD_RET_OP_CMDACK);
  }

  return TRUE;
}

/**
 * Handle IR_NEXT.
 */
static BOOL fgFlMpOnIrNext(void) large
{
#ifdef FL_SINGLE_CAN_PREV_NEXT
  WORD wCurr, wTotal, wPos;

  if (_bFlPbMode == SV_SINGLE)
  {
    wPos = FL_LIST_FIELD(0);
    wCurr = (WORD)bSharedInfo(SI_MPIC_ITEM_IDX_HI)*256 +
      bSharedInfo(SI_MPIC_ITEM_IDX_LO);
    wTotal = (WORD)bSharedInfo(wPos+5)*256 + bSharedInfo(wPos+4);

    if(wCurr < wTotal)
    {
      //vOsdShowPlayStatus(OSD_SHOW_NEXT_ITEM, OSD_TIMEOUT_SHORT);
      vFlMnClickItem(0, wCurr+1);
    }
    else
    {
      //vOsdShowError(SV_ERR_GENERAL, FSMENU_MSG_TIMEOUT);
    }
    return TRUE;
  }
  return FALSE;
#else
  return FALSE;
#endif
}

/**
 * IR_PREV handler.
 */
static BOOL fgFlMpOnIrPrev(void) large
{
#ifdef FL_SINGLE_CAN_PREV_NEXT
  WORD wCurr, wTotal, wPos;

  if (_bFlPbMode == SV_SINGLE)
  {
    wCurr = (WORD)bSharedInfo(SI_MPIC_ITEM_IDX_HI)*256 +
      bSharedInfo(SI_MPIC_ITEM_IDX_LO);
    if(wCurr > 0)
    {
      //vOsdShowPlayStatus(OSD_SHOW_PREV_ITEM, OSD_TIMEOUT_SHORT);
      vFlMnClickItem(0, wCurr-1);
    }
    else
    {
//    vOsdShowError(SV_ERR_GENERAL, FSMENU_MSG_TIMEOUT);
    }
    return TRUE;
  }
#else
  return FALSE;
#endif
}

/**
 * The input machine focuses on MPEG player.
 */
BOOL fgFlOnMp(void) large
{
  BOOL fgIsGrabbed = FALSE;

  // - IR re-mapping
  if (_bIRKey == IR_ROOT_MENU)
  {
    _bIRKey = IR_STOP;
  }

  switch (_bIRKey)
  {
    case IR_CMD_DONE:
      fgIsGrabbed = fgFlMpOnIrCmdDone();
      break;
    case IR_SELECT_DONE:
      fgIsGrabbed = fgFlMpOnIrSelDone();
      break;
    case IR_NEXT:
      fgIsGrabbed = fgFlMpOnIrNext();
      break;
    case IR_PREV:
      fgIsGrabbed = fgFlMpOnIrPrev();
      break;
      /* pass session */
    case IR_STOP:
      break;
    default:
      // - do nothing
      break;
  }

  return fgIsGrabbed;
}

#if 0 // - JACOB: tmp
BOOL fgFlOnMp(void) large
{
  BOOL fgIsGrabbed = FALSE;

  switch (_bIRKey)
  {
    case IR_CMD_DONE:
      fgIsGrabbed = fgFlMpOnIrCmdDone();
      break;
    case IR_SELECT_DONE:

      break;
    case IR_ROOT_MENU:
    case IR_STOP:
      vFlSetCmdTarget(FL_CMD_TARGET_MENU);
      break;
    case IR_NEXT:
      fgIsGrabbed = fgFlMpOnIrNext();
      break;
    case IR_PREV:
      fgIsGrabbed = fgFlMpOnIrPrev();
      break;
    default:
      // - do nothing here
      break;
  }

  return fgIsGrabbed;
}
#endif //0

#endif  // #ifdef PLAYER_FLMENU
#endif //DDISC_FTYPE_MPG_SUPPORT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -