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