www.pudn.com > 6027_HD65.rar > flmpeg.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