📄 flmpeg.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 05/10/26 4:46p $ ****************/
/*************** $Revision:: 16 $ ****************/
/*************** ****************/
/*************** 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;
#ifdef MPEG_FNT_SUB_CHK
BYTE bSpkConfig(WORD wEEPos, BYTE bValue) large;
#endif
/**
* Operation to init module "MPEG player".
*/
BOOL fgFlMpInit(void) large
{
#ifdef MPEG4_TXT_SP
_wStartX = 0;
_wStartY = 0;
// Fix Me
#if 1
_wEndX = MP4_SP_WIDTH;
_wEndY = MP4_SP_HEIGHT * 2;
vFlSetMp4SpParam(WB_MP4_SP, OSD_ALIGN_X_LEFT, OSD_SP_FROM_TOP , 0);
#else
_wEndX = NORMAL_VOL_WIDTH;
_wEndY = NORMAL_VOL_HEIGHT;
vFlSetMp4SpParam(WB_NORMAL_VOL, OSD_ALIGN_X_LEFT, OSD_SP_FROM_TOP , 0);
#endif
#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);
#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
vOsdSetMemBlk(OSD_MEM_BLK_STATIC, OSD_MEM_DEFAULT);
#endif
#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) || defined(USE_DRAM_CFG1)
vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_DEFAULT);
#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) || defined(USE_DRAM_CFG1)
vOsdSetMemBlk(OSD_MEM_BLK_STATIC, OSD_MEM_DEFAULT);
#endif
vOsdShowWb(OSD_WB_RESTORE);
vEnableWB(WB_NORMAL_HEAD2);
#ifdef MPEG_FNT_SUB_CHK
fgEepromWriteByte(FNT_SPK_POSITION, SPK_LARGE);
fgEepromWriteByte(SUB_SPK_POSITION, EV_OFF);
bSpkConfig(FNT_SPK_POSITION, SPK_LARGE);
#endif
// - set the MPEG player as forground module
vFlCtrlSetFg(FLMD_MPEG_PLAYER);
_fgFlWaitStop = FALSE ;
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);
#ifdef MPEG4_TXT_SP
if (bSharedInfo(SI_TXT_SP_EXIST))
{
//vSetFsCodePage(0);
#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_DEFAULT);
#endif
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);
}
else
{
vDeleteWB(WB_MP4_SP);
}
#endif
break;
case MPICSTT_PB_ABT:
// 20050325, IS00001571, wait until MPS is stopped, then we switch back to menu
if (_fgFlWaitStop)
{
_fgFlWaitStop = FALSE ;
if (fgFlClLock(FL_CMDPATH_SEL_0))
{
fgFlCmdGetItems(_bFlMnListId, _wCurrItem - _bFlMnCurItemIdx);//, FLCMD_RET_OP_SEL);
}
break ;
}
case MPICSTT_PB_FSH:
// - TODO: error handling
if (fgFlClLock(FL_CMDPATH_CHG_CMDTGT))
{
vFlSetCmdTarget(FL_CMD_TARGET_MENU);
}
break;
case MPICSTT_PB_ERR:
// 20050503, PL00000140, set PBC state to SV_STOP so that we accept setup key in case the file can't playback
if (bSharedInfo(SI_PBC_STATE) == SV_PRE_PLAY)
vSetSharedInfo(SI_PBC_STATE, SV_STOP) ;
default:
// - do nothing here
break;
}
return;
}
static void vFlMpRetClickItem(void) large
{
vFlCmdDone();
vFlClRls();
// 20050415, if use into key on menu to select MPS item. It'll change target to MPS after get item. vFlMpEnter() will be called before clicked.
// If we call vOsdSetMemBlk() before RISC's MPS is activated, the command will be invalid. So we call it after click return.
#ifdef MPEG4_TXT_SP
#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
vFlSetCmdTarget(FL_CMD_TARGET_MPEG);
#endif
#endif
#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;
// 20050325, IS00001571, If need to switch back to parent menu, we need to wait MPS stop because MPS need to wait DSP stop, for some
// bitstream, it takes more time, when we issue UOP_STOP, SI_MPIC_STT will become MPICSTT_PB_ABT, then we switch to menu
//20050407, IS00002269, expand this to all item
if (/*wIdx == 0 && */(bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT))
{
vSendUopCmd(UOP_STOP, 0, 0, 0) ;
_fgFlWaitStop = TRUE ;
return TRUE ;
}
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 + -