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

📄 flmpeg.c

📁 MTK 1389e版 MINI组合音响代码
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 03/08/13 3:48p    $       ****************/
/***************  $Revision:: 2                $       ****************/
/***************                                       ****************/
/***************   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



#if 1//def SUPPORT_CAPTURE_LOGO
extern BYTE bSetLogoType(WORD wItem, BYTE bValue) large;
#endif

#ifdef PLAYER_FLMENU

 #ifdef MPEG4_TXT_SP // //Add by Tide@08-04-04
  xdata BYTE _bSbStatus = 0xff;

 extern BOOL _bSetupResumeSub;
 
#endif

//#define DEBUG_FLM
#ifdef DEBUG_FLM
extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#endif
/**
 * 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_CENTER, OSD_SP_FROM_BOTTOM);
  #ifdef  SUPPORT_ASIAN
  vFlSetMp4SpParam(WB_MP4_SP, OSD_ALIGN_X_CENTER, OSD_SP_FROM_TOP , 0);  
  #else
  vFlSetMp4SpParam(WB_MP4_SP, OSD_ALIGN_X_CENTER, OSD_SP_FROM_TOP | OSD_SP_FULL_ASCII_TBL , 0);
  #endif //Add by Tide @ 08-23-04
#endif//MPEG4_TXT_SP
  return TRUE;
}


#ifdef SUPPORT_OGG //)&&defined(SUPPORT_WAIXIAO)
 //extern xdata BYTE _fgFILETYPE;
 extern BOOL _fgFILETYPE;
#endif

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


#ifdef MPEG4_TXT_SP
  vDeleteWB(WB_MP4_SP);
//vSetFsCodePage(CODE_PAGE_MENU);  
#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);
  }
vOsdPosClear(OSD_POS_PLAY_STATUS);    //Add by Tide@08-04-04

#ifdef MPEG4_TXT_SP //  //Add by Tide@08-04-04
_bSbStatus = 0xff;    

      _bSetupResumeSub = 0;

#endif

#ifdef SUPPORT_OGG //)&&defined(SUPPORT_WAIXIAO)
   _fgFILETYPE = 0;
#endif

  return (wItem);
}

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

#ifdef DEBUGE_LIKE
DRS232LogS("-en\n");
#endif
  vDisableWB(FL_MENU_WB);
  vDisableWB(FL_INFO_WB);
  vOsdShowWb(OSD_WB_RESTORE);
  vEnableWB(WB_NORMAL_HEAD2);

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


#if 1//def SUPPORT_OGG //tide
if(_fgFILETYPE == 1)//用什么背景请自行更改
   {  
     vSetSharedInfo(SI_FLASH_LOGO_IDX, 0);          //删掉当前画面并设定default LOGO画面
     // assume bSetLogoType() does not use code segment
     
/*
   #ifdef SUPPORT_CAPTURE_LOGO
   bSetLogoType(0, bEepromReadByte(LOGO_TYPE_POSITION));   
   vPlayerShowLogo(SV_LOGO_SETUP, LOGO_BLUE);
   #else
   vPlayerShowLogo(SV_LOGO_FLASH, LOGO_BLUE);
   #endif
*/
   }
#endif


#if 0//def SUPPORT_OGG //)&&defined(SUPPORT_WAIXIAO)
if(_fgFILETYPE == 1)			//new ui +
  {  
   	//vSetSharedInfo(SI_FLASH_LOGO_IDX, LOGO_FBL2);
		//bSetLogoType(LOGO_FBL2, EV_LOGO_DEFAULT);	
		 vPlayerShowLogo(SV_LOGO_SETUP, LOGO_BLUE); //060321
  }
#endif


#ifdef MPEG4_TXT_SP //Vincent -5Version @03-28-04
  vCreateWB(WB_MP4_SP, TRUE);
  vSetWBTcColor(WB_MP4_SP);
  #if 1  //XIAO 04-02-12
//  #if defined(SUPPORT_RUSSIAN)||defined(X640S)||defined(ER1500)||defined(CS360)||defined(SUPPORT_WAIXIAO)
    vSetFsCodePage(CODE_PAGE_ASC2); //for serbian subtitle #long@03/11/04      
    vSetMsgCol4(WB_MP4_SP, 0, 0, 3, 2);   
    vSetPal(WB_MP4_SP, 1, BLEND_2, 0);    
    vSetTcPal(WB_MP4_SP, 0, BLEND_2, TRUECOLOR_BLACK);
//    vSetTcPal(WB_MP4_SP, 0, BLEND_2, TRUECOLOR_BLACK);     
    vSetTransEn(WB_MP4_SP, 0);  
   // vEnableWB(WB_MP4_SP);  //Vincent @04-28-04
   // _bSbStatus = 0xfe;
  #else  
    vSetMsgCol4(WB_MP4_SP, 0, 0, 0, 2);  
    vSetTransEn(WB_MP4_SP, 0);
  #endif  
  vEnableWB(WB_MP4_SP);
  _bSbStatus = 0xfe;     //Add by Tide@08-04-04
  #endif
  
#ifdef DEBUG_MP4
DRS232LogS("m4\n");
DRS232LogB(_bSbStatus, _fgFILETYPE,0,0);
#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
 */
xdata BYTE fgShowNoSupport=0; //BillDen
void vFlMpChgMpgState(BYTE bStt) large
{

#if 0//def SUPPORT_WAIXIAO
WORD  wBlkPtr, wItem;

  wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block

//if(bSharedInfo(wBlkPtr ++)==0x16)    //FTYPE_OGG=0x16
     bStt=0x1;
#endif
	
#ifdef DEBUG_FLM
DRS232LogS("MP\n");
DRS232LogB(bStt, 0,0,0);
#endif	

  switch (bStt)
  {
    case MPICSTT_PB_STRT:
      _wFlCurAdoDir = 0xFFFF;
      _wFlCurAdoIdx = 0xFFFF;
      vFlUpdateVfd(FALSE);
      vOsdPosClear(OSD_POS_REMAIN_MSG); //BillDen


      #ifdef MPEG4_TXT_SP   //tide
      if ( (bSharedInfo(SI_USR_SP_LCD_0) == 0) && (bSharedInfo(SI_USR_SP_LCD_1) == 0) )    file://guosong
      {
        vSendUopCmd(UOP_CHANGE_SPSTN, 0, 0, 0);
	
	 _bSetupResumeSub = 1;
	
      }
	#endif		


      //MTK_guosong @04-16-04
 //     if ( (bSharedInfo(SI_USR_SP_LCD_0) == 0) && (bSharedInfo(SI_USR_SP_LCD_1) == 0) )   
//    {
 //      vSendUopCmd(UOP_CHANGE_SPSTN, 0, 0, 0);
//    }
      
      break;
    case MPICSTT_PB_ERR:
      fgShowNoSupport=0xff; //BillDen
    case MPICSTT_PB_FSH:
    case MPICSTT_PB_ABT:
      // - TODO: error handling
      if (fgFlClLock(FL_CMDPATH_CHG_CMDTGT))
      {
        vFlSetCmdTarget(FL_CMD_TARGET_MENU);
      }
      break;
    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:
	  #if 0//def DEBUG_FLM
DRS232LogS("M2\n");
DRS232LogB(FL_PARM1(_dwIrDoneParm), FL_PARM2(_dwIrDoneParm),0,0);
#endif
        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);
      if(bFlGetItemType(_bFlMnCurItemIdx) != FTYPE_NONE) //BillDen
        vOsdPosShow(OSD_POS_REMAIN_MSG, OSD_MSG_DECODING, OSD_NO_DISAPPEAR);
    }
    //vFlCmdClickItem(_bFlMnListId, wIdx, FLCMD_RET_OP_CMDACK);
  }
//10/18am bg
  else
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
  }
//10/18am end
  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) //BillDen
  {
    if (bSharedInfo(SI_MPIC_STT) != MPICSTT_PB_STRT)
      _bIRKey = IR_NONE;
  }
  if (_bIRKey == IR_ROOT_MENU)
  {
    if (bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT) //BillDen
      _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

⌨️ 快捷键说明

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