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

📄 flmpeg.c

📁 MTK1389 SOURCE CODE
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 04/07/07 7:13p    $       ****************/
/***************  $Revision:: 7                $       ****************/
/***************                                       ****************/
/***************   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;



/**
 * Operation to init module "MPEG player".
 */
BOOL fgFlMpInit(void) large
{
#ifdef MPEG4_TXT_SP
  _wStartX = 0;
  _wStartY = 0;
  _wEndX = MP4_SP_WIDTH;
  _wEndY = MP4_SP_HEIGHT;
  vFlSetMp4SpParam(WB_MP4_SP, OSD_ALIGN_X_LEFT, OSD_SP_FROM_TOP , 0);
#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);
#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) 
  vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC);
#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)
  vOsdSetMemBlk(OSD_MEM_BLK_STATIC);
#endif  
  vOsdShowWb(OSD_WB_RESTORE);
  vEnableWB(WB_NORMAL_HEAD2);

  // - set the MPEG player as forground module
  vFlCtrlSetFg(FLMD_MPEG_PLAYER);

#ifdef MPEG4_TXT_SP
  //vSetFsCodePage(0);
  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);
#endif

  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);
      break;
    case MPICSTT_PB_FSH:
    case MPICSTT_PB_ABT:
      // - TODO: error handling
      if (fgFlClLock(FL_CMDPATH_CHG_CMDTGT))
      {
        vFlSetCmdTarget(FL_CMD_TARGET_MENU);
      }
      break;
    case MPICSTT_PB_ERR:
    default:
      // - do nothing here
      break;
  }

  return;
}

static void vFlMpRetClickItem(void) large
{
  vFlCmdDone();
  vFlClRls();
#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;
    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 + -