📄 flmpeg.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 + -