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

📄 flmpeg.c

📁 MTK portableDVD 采用mtk1389方案的代码
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 04/07/16 10:15a   $       ****************/
/***************  $Revision: 2.0 $       ****************/
/***************                                       ****************/
/***************   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"
#ifdef MPEG4_TXT_SP
xdata BYTE _bSbStatus = 0xff;
extern xdata BYTE _bSetupResumeSub;
#endif

#ifdef SUPPORT_OGG
extern BYTE bSetLogoType(WORD wItem, BYTE bValue) large;
#endif

#pragma NOAREGS

#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;
  #ifdef SUPPORT_ASIAN  //asia korea and english
  vFlSetMp4SpParam(WB_MP4_SP, OSD_ALIGN_X_CENTER, OSD_SP_FROM_TOP , 0);
  #else //euro
    vFlSetMp4SpParam(WB_MP4_SP, OSD_ALIGN_X_CENTER, OSD_SP_FROM_BOTTOM | OSD_SP_FULL_ASCII_TBL , 0);
//这样可支持英文和其它欧洲文字(如果已将那些欧洲字符做到datarom0.bin中的ASC表中去的话)
//这是表示遇到字符编码大于128的字符则从datarom0.bin中的ASC表中寻找
  #endif
//vFlSetMp4SpParam(WB_MP4_SP, OSD_ALIGN_X_CENTER, OSD_SP_FROM_BOTTOM);
#endif
  return TRUE;
}

/**
 * Operation when we try to leave object "MPEG player".
 */
 #ifdef SUPPORT_OGG  //tide
 extern  xdata BYTE _fgFILETYPE;
#endif

WORD wFlMpLeave(BOOL bSuicide) large
{
  WORD  wItem;


#ifdef MPEG4_TXT_SP
  vDeleteWB(WB_MP4_SP);
#endif

#ifdef SUPPORT_OGG 
  if (_fgFILETYPE == 1)
  {  
		vSetSharedInfo(SI_FLASH_LOGO_IDX, LOGO_STAND);
  }
#endif

  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);

   vOsdShowWb(OSD_WB_DISABLE);

  vSetSharedInfo(SI_MP3_BITRATE_LO, 0xff);     //for patch
#ifdef MPEG4_TXT_SP
   _bSbStatus = 0xff;
  _bSetupResumeSub = 0;
#endif

#ifdef SUPPORT_OGG  //tide
   _fgFILETYPE = 0;
#endif

  return (wItem);
}

/**
 * Enter the MPEG playback control module "file list mpeg".
 */
void vFlMpEnter(WORD wItem) large
{
  vDisableWB(FL_MENU_WB);
  vOsdShowWb(OSD_WB_RESTORE);
  vEnableWB(WB_NORMAL_HEAD2);
	vDisableWB(WB_NORMAL_INITMSG);
  // - set the MPEG player as forground module
  vFlCtrlSetFg(FLMD_MPEG_PLAYER);
  vSetSharedInfo(SI_JPG_STT, JPEGSTT_DEC_FSH);     //potato for patch

#ifdef SUPPORT_OGG 
  if (_fgFILETYPE == 1)
  {  
		vSetSharedInfo(SI_FLASH_LOGO_IDX, LOGO_FBL2);
		bSetLogoType(LOGO_FBL2, EV_LOGO_DEFAULT);	
  }
#endif

#ifdef MPEG4_TXT_SP
  vCreateWB(WB_MP4_SP, TRUE);
  vSetWBTcColor(WB_MP4_SP);
  vSetMsgCol4(WB_MP4_SP, 0, 0, 3, 2);
  vSetTcPal(WB_MP4_SP, 1, BLEND_2, 0);    
  vSetTcPal(WB_MP4_SP, 0, BLEND_2, TRUECOLOR_BLACK);
  vSetTcPal(WB_MP4_SP, 3, BLEND_3, TRUECOLOR_BLACK);
  vSetTcPal(WB_MP4_SP, 2, BLEND_3, FL_COLOR_GRAY);
  vSetTransEn(WB_MP4_SP, 0);  
  vEnableWB(WB_MP4_SP);
  vSendUopCmd(UOP_CHANGE_SPSTN, 0x00, 0, 0); 
  _bSbStatus = 0xfe;
#endif

    #ifdef PORTABLEDVD //billy[060710]  
	if(_bVRMTState == EV_DIR_KEY_STATE)
      _bVRMTState = EV_NORMAL_STATE;
    #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
{
  switch (bStt)
  {
    case MPICSTT_PB_STRT:
#ifdef DDISC_SUPPORT_QT_CHAPTER
	  //alfonso	
	  vOsdPosClear(OSD_POS_MP4_CHAP);
#endif /* DDISC_SUPPORT_QT_CHAPTER */
      _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))    
      {
       if(bSharedInfo(SI_SPST_NS) > 0)   //tide
        vSendUopCmd(UOP_CHANGE_SPSTN, 0, 0, 0);
	    _bSetupResumeSub = 1;
      }
	  	
	  if(bSharedInfo(SI_SPST_NS) == 0)  //tide
	      vDeleteWB(WB_MP4_SP);
	  if(_rAudioCtrl.sVol.fgIsMute == TRUE)    //tide
	      vOsdShowMute(OSD_MUTE_ON);
	#endif		
	      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();
}


/**
 * 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:
        break;
      default:
        // - do nothing here
        break;
    }
  }
  
  return TRUE;
}

/**
 * Handle the IR_SEL_DONE for digital button selection.
 */
static BOOL fgFlMpOnIrSelDone(void) large
{
  WORD  wIdx,wFldrNs;
//tide  
  wIdx = (WORD) _rNumInStateCtx.bDig[0] * 100 + _rNumInStateCtx.bDig[1] * 10 + _rNumInStateCtx.bDig[2];
  bLoByte(wFldrNs) = bSharedInfo(FL_LIST_FIELD(_bFlMnListId) + 2);
  bHiByte(wFldrNs) = bSharedInfo(FL_LIST_FIELD(_bFlMnListId) + 3);
  if(bSharedInfo(FL_LIST_FIELD(_bFlMnListId)) == FLPARM_LIST_FOLDER && wFldrNs)
    wIdx++;

  if(wIdx <= wFlGetSubFldrNs(_bFlMnListId))
  	return FALSE;
  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
      {
        vOsdPosClear(OSD_POS_PLAY_STATUS_ALL);
        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;
#ifdef PLAYER_ZOOMIN_INDICATOR
			if(fgIsZoomBrShow())
			{
				vZoomBrOff();
			}
#endif
    }
	}

  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:
	     if (bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT)	//mpegic disc playing?
      {
	if ((bSharedInfo(SI_REPEAT_MODE) != SV_REPEAT_NONE) ||			//repeat
		(bSharedInfo(SI_USR_AUX_CTRL) == SV_REPEAT_SET_A) ||		//ab repeat.
		   (bSharedInfo(SI_USR_AUX_CTRL) == SV_REPEAT_AB))
        {
          vSendUopCmd(UOP_REPEAT, SV_REPEAT_NONE, 0, 0);
	   vSendUopCmd(UOP_A_TO_B, SV_REPEAT_ABNONE, 0, 0);
        }
      }
      break;
    default:
      // - do nothing
      break;
  }

  return fgIsGrabbed;
}


#ifdef MPEG4_TXT_SP   
BOOL fgFlMpSubLeave(void) large
{
  BOOL fgRet = TRUE;
	
  if (_bSbStatus != 0xff)
  {
    if (_bSbStatus != 0)
    {
      _bSetupResumeSub=1;
      vSendUopCmd(UOP_CHANGE_SPSTN, 0, 0, 0);
    }
    vDeleteWB(WB_MP4_SP);
  }

	return(fgRet);
}

BOOL fgFlMpSubResume(void) large
{
  BOOL fgRet = TRUE;

  if (_bSbStatus != 0xff)
  { 
    vDisableWB(WB_NORMAL_INITMSG);
		
    vCreateWB(WB_MP4_SP, TRUE);
    vSetWBTcColor(WB_MP4_SP);
    vSetMsgCol4(WB_MP4_SP, 0, 0, 3, 2);   
    vSetTcPal(WB_MP4_SP, 1, BLEND_2, 0);    
    vSetTcPal(WB_MP4_SP, 0, BLEND_2, TRUECOLOR_BLACK);  
		vSetTcPal(WB_MP4_SP, 3, BLEND_3, TRUECOLOR_BLACK);
	  vSetTcPal(WB_MP4_SP, 2, BLEND_3, FL_COLOR_GRAY);
    vSetTransEn(WB_MP4_SP, 0); 
    vEnableWB(WB_MP4_SP);
    if (_bSbStatus == 0xfe)
    {
      vSendUopCmd(UOP_CHANGE_SPSTN, 0x00, 0, 0);
    }
    else if (_bSbStatus != 0)
    {   	
      vSendUopCmd(UOP_CHANGE_SPSTN, _bSbStatus, 0, 0);
    } 
    _bSetupResumeSub = 1;
  }

	return(fgRet);
}
#endif

#endif  // #ifdef PLAYER_FLMENU

⌨️ 快捷键说明

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