www.pudn.com > 8032.RAR > fljview.c
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 04/07/20 5:09p $ ****************/
/*************** $Revision:: 21 $ ****************/
/*************** ****************/
/*************** Description : File List ****************/
/*************** JPEG & Digest module ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Jacob Lin ****************/
/**********************************************************************/
/**
* $(PROJ_HOME)/8032/custom/demo/fslist/fljview.c
*
* Object JPEG viewer
*/
#define __FLJVIEW_C__
#include "../general.h"
#include "flspec.h"
#include "flcomm.h"
#include "flconfig.h"
#pragma NOAREGS
#ifdef PLAYER_FLMENU
// MACRO DEFIMITIONS
// for _bFlJvOn
#define FLJV_OBJ_MV 0x1 // - obj main video
#ifdef JPEG_DDISC_DIGEST_ENABLE
#define FLJV_OBJ_DGTMN 0x2 // - obj digest menu
#define FLJV_OBJ_HPMN 0x3 // - obj help menu
// for _bFlJvDgtMnOn
#define FLJVDGTMN_OBJ_MN 0x1 // - object menu
#define FLJVDGTMN_BTN_SS 0x2 // - btn "SLIDE SHOW"
#define FLJVDGTMN_BTN_HP 0x3 // - btn "HELP"
#define FLJVDGTMN_BTN_NT 0x4 // - btn "NEXT"
#define FLJVDGTMN_BTN_PV 0x5 // - btn "PREV"
#endif
#define FLJV_MAX_TRANS_EFF 17
#if 0
#define FLJV_MAX_TRANS_EFF 16
// #define FLJV_MAX_TRANS_EFF 17 // random
#endif //0
// GLOBAL VARIABLES
// focus control
static xdata BYTE _bFlJvOn; // - focus on obj of JVIEW
#ifdef JPEG_DDISC_DIGEST_ENABLE
static xdata BYTE _bFlJvDgtMnOn; // - focus on obj of DIGEST MENU
// digest menu control
static xdata BYTE _bFlJvDgtItemIdx; // - digest item index
#endif
static xdata BYTE _bFlJvTransEff; // - the current transition effect.
///*static*/ xdata BYTE _bFlJvDgtItemNs; // - digest item number
// MEMBER FUNCTIONS
#ifdef JPEG_DDISC_DIGEST_ENABLE
// utilities
static void vFlJvDgtOn(void) large;
static void vFlJvShowDgtMn(void) large;
static void vFlJvBuryDgtMn(void) large;
static void vFlJvDrawDgtBtns(BYTE bLangIdx) large;
static void vFlJvDgtMnHil(void) large;
static void vFlJvDgtMnMnHil(void) large;
static WORD wFlJvGetDgtItemIdx(BYTE bItemIdx) large;
#endif
// event handler
// sub-obj "JVIEW MV"
static BOOL fgFlJvMvIrCmdDoneHdr(void) large;
static BOOL fgFlJvOnIrSelDone(void) large;
#ifndef GCY_EDIT
static BOOL fgFlJvOnIrTransEff(void) large;
#endif
static BOOL fgFlJvOnIrPlay(void) large;
static BOOL fgFlJvOnIrPause(void) large;
// sub-obj "JVIEW DIGEST MENU"
#ifdef JPEG_DDISC_DIGEST_ENABLE
static BOOL fgFlJvDgtMnIrCmdDoneHdr(void) large;
static void vFlJvDgtMnIrEnterHdr(void) large;
static void vFlJvDgtMnIrDirHdr(void) large;
static void vFlJvDgtMnMnIrDirHdr(void) large;
static void vFlJvDgtMnBtnsIrDirHdr(void) large;
#endif
// sub object state machine
static BOOL fgFlJvOnMv(void) large;
#ifdef JPEG_DDISC_DIGEST_ENABLE
static BOOL fgFlJvOnDgtMn(void) large;
#endif
static void vFlJvChgJpgState(BYTE bStt) large;
static void vFlJvRetClickItem(void) large;
/**
* Transition effect
*/
struct _sTransEffect
{
BYTE bCode;
WORD wMsg;
};
#if defined(TRANSITION_SPECIAL_EFFECT)
#if 1 // - JACOB: enable new effect "dissolve"
static code struct _sTransEffect _rFlJvTransEff[FLJV_MAX_TRANS_EFF] = {
{ 2, OSD_MSG_WIPE_TOP },
{ 3, OSD_MSG_WIPE_BOTTOM },
{ 0, OSD_MSG_WIPE_LEFT },
{ 1, OSD_MSG_WIPE_RIGHT },
{ 4, OSD_MSG_DGL_WIP_LEFT_TOP },
{ 5, OSD_MSG_DGL_WIP_RIGHT_TOP },
{ 6, OSD_MSG_DGL_WIP_LEFT_BOTTOM },
{ 7, OSD_MSG_DGL_WIP_RIGHT_BOTTOM },
{ 8, OSD_MSG_EXTEND_FROM_CENTER_H },
{ 9, OSD_MSG_EXTEND_FROM_CENTER_V },
{ 10, OSD_MSG_COMPRESS_TO_CENTER_H },
{ 11, OSD_MSG_COMPRESS_TO_CENTER_V },
{ 12, OSD_MSG_WINDOW_H },
{ 13, OSD_MSG_WINDOW_V },
{ 14, OSD_MSG_EDGE_TO_CENTER },
{ 26, OSD_MSG_MOVE_IN_FROM_TOP},
{ 0xFE, OSD_MSG_NONE }
};
#else
static code struct _sTransEffect _rFlJvTransEff[FLJV_MAX_TRANS_EFF] = {
{ 2, OSD_MSG_WIPE_TOP },
{ 3, OSD_MSG_WIPE_BOTTOM },
{ 0, OSD_MSG_WIPE_LEFT },
{ 1, OSD_MSG_WIPE_RIGHT },
{ 4, OSD_MSG_DGL_WIP_LEFT_TOP },
{ 5, OSD_MSG_DGL_WIP_RIGHT_TOP },
{ 6, OSD_MSG_DGL_WIP_LEFT_BOTTOM },
{ 7, OSD_MSG_DGL_WIP_RIGHT_BOTTOM },
{ 8, OSD_MSG_EXTEND_FROM_CENTER_H },
{ 9, OSD_MSG_EXTEND_FROM_CENTER_V },
{ 10, OSD_MSG_COMPRESS_TO_CENTER_H },
{ 11, OSD_MSG_COMPRESS_TO_CENTER_V },
{ 12, OSD_MSG_WINDOW_H },
{ 13, OSD_MSG_WINDOW_V },
{ 14, OSD_MSG_EDGE_TO_CENTER },
{ 0xFE, OSD_MSG_NONE },
#if (FLJV_MAX_TRANS_EFF == 17)
{ 0xFF OSD_MSG_RANDOM },
#endif
};
#endif //0
#endif /*#if defined(TRANSITION_SPECIAL_EFFECT)*/
/**
* Turn on the digest mode.
*/
#ifdef JPEG_DDISC_DIGEST_ENABLE
void vFlJvDgtOn(void) large
{
if (bSharedInfo(SI_JPG_MODE) != JPEGMOD_DIGEST)
{
vClearWB(WB_OVERLAY_MSG1);
// - send the UOP_DIGEST to turn on the digest mode
vSendUopCmd(UOP_DIGEST, 0x0,
bSharedInfo(SI_JPG_ITEM_IDX_LO),
bSharedInfo(SI_JPG_ITEM_IDX_HI));
}
else
{
//vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
}
return;
}
/**
* Show all visual components of the digest menu.
*/
void vFlJvShowDgtMn(void) large
{
// - adjust the OSD component state
BYTE i;
for (i=0; i<32; i++)
vDeleteWB(i);
// vCreateWBEx(WB_OVERLAY_MSG2);
vCreateWBEx(WB_OVERLAY_MSG1);
vCreateWBEx(WB_NORMAL_HEAD1);
vCreateWBEx(WB_NORMAL_HEAD2);
vCreateWBEx(FL_DGTMN_WB);
vEnableWB(FL_DGTMN_WB);
//vDisableWB(WB_NORMAL_VOL);
//vEnableWB(FL_DGTMN_WB);
vFlJvDrawDgtBtns(bEepromReadByte(OSD_LANG_POSITION));
// - turn on the hilit select state
vSetSharedInfo(SI_HLI_STATE, SV_ON);
// - set the focus
_bFlJvOn = FLJV_OBJ_DGTMN;
_bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
// - reset the item number counter and index
_bFlJvDgtItemIdx = 0;
// _bFlJvDgtItemNs = 0;
return;
}
#endif
/**
* Recover the display of object "file list jpeg viewer".
*/
void vFlJvRecover(void) large
{
// - resume jpg decoding
vSendUopCmd(UOP_PAUSE, 0x01, 0x02, 0x00);
#ifdef JPEG_DDISC_DIGEST_ENABLE
vSetHLCol(FLDGTMN_HILIT, FLDGTMN_HILIT_COL);
if (bSharedInfo(SI_JPG_MODE) == JPEGMOD_DIGEST)
{
// - recover to digest menu
vDisableWB(WB_NORMAL_VOL);
vEnableWB(FL_DGTMN_WB);
//vShowWbHili(FL_DGTMN_WB, FLDGTMN_HILIT);
vFlJvDgtMnHil();
// - draw the buttons on digest menu
vFlJvDrawDgtBtns(bEepromReadByte(OSD_LANG_POSITION));
}
else
#endif
if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
{
// - resume jpg decoding
//vSendUopCmd(UOP_PAUSE, 0x01, 0x02, 0x00);
//if (bSharedInfo(SI_JPG_STT) == JPEGSTT_DEC_STRT)
vFlUpdateVfd(TRUE);
}
else
{
// - do nothing here
}
return;
}
#ifdef JPEG_DDISC_DIGEST_ENABLE
/**
* Bury the digest menu (hide or disable all visual components of
* digest menu).
*/
void vFlJvBuryDgtMn(void) large
{
// - adjust the OSD component state
vHideHL(FLDGTMN_HILIT);
vDisableWB(FL_DGTMN_WB);
// - turn off the hilit selection mode
vSetSharedInfo(SI_HLI_STATE, SV_OFF);
// - the focus
_bFlJvOn = FLJV_OBJ_MV;
return;
}
/**
* Draw the buttons on the digest menu.
*/
void vFlJvDrawDgtBtns(BYTE bLangIdx) large
{
#ifndef SETUP_USE_TAB
// - draw bitmap for function buttons
if (bLangIdx == EV_OSD_CHINESE)
{
// - chinese version
vOsdPasteBmpXY(DGT_BTN_SS_L, DGT_BTN_T,
FL_DGTMN_WB, BMP_SLIDESHOW_CH);
vOsdPasteBmpXY(DGT_BTN_HP_L, DGT_BTN_T,
FL_DGTMN_WB, BMP_MENU_CH);
vOsdPasteBmpXY(DGT_BTN_PV_L, DGT_BTN_T,
FL_DGTMN_WB, BMP_PREV_CH);
vOsdPasteBmpXY(DGT_BTN_NT_L, DGT_BTN_T,
FL_DGTMN_WB, BMP_NEXT_CH);
}
else
#endif
{
// - other language
vOsdPasteBmpXY(DGT_BTN_SS_L, DGT_BTN_T,
FL_DGTMN_WB, BMP_SLIDESHOW);
vOsdPasteBmpXY(DGT_BTN_HP_L, DGT_BTN_T,
FL_DGTMN_WB, BMP_MENU);
vOsdPasteBmpXY(DGT_BTN_PV_L, DGT_BTN_T,
FL_DGTMN_WB, BMP_PREV);
vOsdPasteBmpXY(DGT_BTN_NT_L, DGT_BTN_T,
FL_DGTMN_WB, BMP_NEXT);
}
return;
}
/**
* Hilit the activated item. (image item or function buttons)
*/
void vFlJvDgtMnHil(void) large
{
if (_bFlJvOn != FLJV_OBJ_DGTMN)
return;
switch (_bFlJvDgtMnOn)
{
case FLJVDGTMN_OBJ_MN:
// - hilit the current item
vFlJvDgtMnMnHil();
return; // - not yet
case FLJVDGTMN_BTN_PV:
_wStartX = DGT_BTN_PV_L;
_wEndX = _wStartX + DGT_BTN_PV_W;
_wStartY = DGT_BTN_T;
_wEndY = _wStartY + DGT_BTN_PV_H;
// - shift the border if for buttons
_wStartX -= DGT_BTN_HL_LB;
_wEndX += DGT_BTN_HL_RB;
break;
case FLJVDGTMN_BTN_NT:
_wStartX = DGT_BTN_NT_L;
_wEndX = _wStartX + DGT_BTN_NT_W;
_wStartY = DGT_BTN_T;
_wEndY = _wStartY + DGT_BTN_NT_H;
// - shift the border if for buttons
_wStartX -= DGT_BTN_HL_LB;
_wEndX += DGT_BTN_HL_RB;
break;
case FLJVDGTMN_BTN_HP:
_wStartX = DGT_BTN_HP_L;
_wEndX = _wStartX + DGT_BTN_HP_W;
_wStartY = DGT_BTN_T;
_wEndY = _wStartY + DGT_BTN_HP_H;
// - shift the border if for buttons
_wStartX -= DGT_BTN_HL_LB;
_wEndX += DGT_BTN_HL_RB;
break;
case FLJVDGTMN_BTN_SS:
_wStartX = DGT_BTN_SS_L;
_wEndX = _wStartX + DGT_BTN_SS_W;
_wStartY = DGT_BTN_T;
_wEndY = _wStartY + DGT_BTN_SS_H;
// - shift the border if for buttons
_wStartX -= DGT_BTN_HL_LB;
_wEndX += DGT_BTN_HL_RB;
break;
default:
// - error
return;
}
// - show hilit, and turn on the hilit select state
vShowWbHili(FL_DGTMN_WB, FLDGTMN_HILIT);
vSetHLRng(FLDGTMN_HILIT, FL_DGTMN_WB);
return;
}
/**
* Hilit the image item on digest menu.
*/
void vFlJvDgtMnMnHil(void) large
{
if (_bFlJvDgtItemIdx >= (bSharedInfo(SI_THUMBNAIL_16_IDX_HI) + 1))
return;
#ifdef JPG_BUFFER_NTSC
//if (bSharedInfo(SI_TV_SYSTEM) != SV_PAL)
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#else
//if (bSharedInfo(SI_TV_SYSTEM) == SV_NTSC)
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#endif
{
// - for NTSC
WORD wWidth, wHeight;
BYTE bXDim, bYDim;
wWidth = DGT_ITEM_W;
wHeight = DGT_ITEM_H;
bXDim = _bFlJvDgtItemIdx % DGT_MN_X_DIM_NS;
bYDim = _bFlJvDgtItemIdx / DGT_MN_X_DIM_NS;
_wStartX = bXDim*(wWidth + DGT_ITEM_H_GAP) + DGT_ITEM_SX;// - HL_XB_SZ;
_wEndX = _wStartX + wWidth + 3 * HL_XB_SZ;
_wStartY = bYDim*DGT_ITEM_V_GAP + DGT_ITEM_SY - HL_YB_SZ;
_wEndY = _wStartY + wHeight + 2*HL_YB_SZ;
// - shift NTSC OSD offset
_wStartX += OSD_NTSC_H_OFST;
_wEndX += OSD_NTSC_H_OFST;
}
else
{
// - for PAL
DWRD dwTmpY, dwTmpY1;
BYTE bXDim, bYDim;
bXDim = _bFlJvDgtItemIdx % DGT_MN_X_DIM_NS;
bYDim = _bFlJvDgtItemIdx / DGT_MN_X_DIM_NS;
_wStartX = bXDim*(DGT_ITEM_W + DGT_ITEM_H_GAP) + DGT_ITEM_SX -
HL_PN_XOFST - HL_XB_SZ;
_wEndX = _wStartX + DGT_ITEM_W + 4*HL_XB_SZ;
dwTmpY = (DWRD)(bYDim*DGT_ITEM_V_GAP + DGT_ITEM_SY - HL_YB_SZ);
dwTmpY1 = (DWRD)(dwTmpY + DGT_ITEM_H + 2*HL_YB_SZ);
_wStartY = (WORD)((dwTmpY*HL_PN_YSUP)/HL_PN_YSDOWN) - HL_PN_YOFST;
_wEndY = (WORD)((dwTmpY1*HL_PN_YSUP)/HL_PN_YSDOWN) - HL_PN_YOFST;
// - shift PAL OSD offset
_wStartX += OSD_PAL_H_OFST;
_wEndX += OSD_PAL_H_OFST;
}
// - display the hilit
vSetHLRng(FLDGTMN_HILIT, 0xFF);
vShowHL(FLDGTMN_HILIT);
return;
}
/**
* Demo how to read the exe list index of image item on digest menu.
*/
WORD wFlJvGetDgtItemIdx(BYTE bItemIdx) large
{
WORD wIdx;
if (bItemIdx >= (bSharedInfo(SI_THUMBNAIL_16_IDX_HI) + 1))
return 0xFFFF;
bLoByte(wIdx) = bSharedInfo(SI_JPG_THUMBNAIL_START + 2*bItemIdx);
bHiByte(wIdx) = bSharedInfo(SI_JPG_THUMBNAIL_START + (2*bItemIdx+1));
return wIdx;
}
/**
* Init Obj JVIEW.
*/
#endif //JPEG_DDISC_DIGEST_ENABLE
BOOL fgFlJvInit(void) large
{
// - init UI component
#ifndef WB_ALLOC_MIN
vCreateWB(FL_DGTMN_WB, TRUE);
vSetWBTcColor(FL_DGTMN_WB);
vDisableWB(FL_DGTMN_WB);
vSetTransEn(FL_DGTMN_WB, 0);
// - draw the buttons on digest menu
vFlJvDrawDgtBtns(bEepromReadByte(OSD_LANG_POSITION));
#endif
// - control flags
_bFlJvOn = FLJV_OBJ_MV;
#if defined(TRANSITION_SPECIAL_EFFECT)
_bFlJvTransEff = 0;
vSetSharedInfo(SI_JPG_TRANSITION_EFFECT, _rFlJvTransEff[_bFlJvTransEff].bCode);
#endif
return TRUE;
}
/**
* Leave the object (called when we try to move the focus away).
*/
WORD wFlJvLeave(BOOL bSuicide) large
{
WORD wItem;
if (_wCurrItem != 0xFFFF)
wItem = _wCurrItem;
else
wItem = (WORD)bSharedInfo(SI_JPG_ITEM_IDX_HI) * 256 + bSharedInfo(SI_JPG_ITEM_IDX_LO);
#if (DRAM_SZ == DRAM_2M)
vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC);
#endif
// - 1. stop the decoding if the decoder is going
#if 0
if (bSuicide)
{
// vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
// vFlMnSetUopRetJob(UOP_STOP, UOP_RET_CHG_CMDTGT);
vFlSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, UOP_RET_CHG_CMDTGT);
}
#endif
if (bSuicide)
{
vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
}
// - 2. hide the hilit for digest menu
vHideHL(FLDGTMN_HILIT);
// - TOFIX: the index may be ambigous to reflect the current item
return (wItem);
}
/**
* Enter the object (called when we try to move the focus in).
*/
void vFlJvEnter(WORD wItem) large
{
#ifdef WB_ALLOC_MIN
#if (DRAM_SZ == DRAM_2M)
vOsdSetMemBlk(OSD_MEM_BLK_STATIC);
#endif
vOsdShowWb(OSD_WB_RESET);
#ifdef JPEG_DDISC_DIGEST_ENABLE
vCreateWBEx(FL_DGTMN_WB);
vSetTransEn(FL_DGTMN_WB, 0);
// - draw the buttons on digest menu
vFlJvDrawDgtBtns(bEepromReadByte(OSD_LANG_POSITION));
#endif
#endif
_rOsdStateCtx.bTimeType = OSD_SHOW_DISABLE;
//vEnableWB(WB_OVERLAY_MSG2);
// - set hilit color
vSetHLCol(FLDGTMN_HILIT, FLDGTMN_HILIT_COL);
#if 1//(DRAM_SZ != DRAM_2M)
if (!fgIsInSetupMenu())
{
vEnableWB(WB_NORMAL_HEAD1);
vEnableWB(WB_NORMAL_HEAD2);
}
#endif
#ifdef JPEG_DDISC_DIGEST_ENABLE
if (bSharedInfo(SI_JPG_MODE) == JPEGMOD_DIGEST)
{
vDisableWB(WB_NORMAL_VOL);
//vDeleteWB(WB_NORMAL_VOL);
vEnableWB(FL_DGTMN_WB);
vFlJvDgtMnHil();
}
#endif
#if 1//defined(TRANSITION_SPECIAL_EFFECT)
// - set shared info to config RISC
vSetSharedInfo(SI_PREVIEW_MODE, FALSE);
vSetSharedInfo(SI_JPG_ROTATE_AUTO_SLIDE, (0x80|FL_JPEG_SLIDESHOW_INTERVAL));
//vSetSharedInfo(SI_JPG_DIGEST_BG, 0x1);
#endif
// - set the foreground module as JPEG DECODER
vFlCtrlSetFg(FLMD_JPEG_DECODER);
while(bSharedInfo(SI_DDISC_PB_MODULE) != SV_DDISC_MODULE_JPG);
#ifdef SUPPORT_PCD
if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
{
if (bSharedInfo(SI_JPG_MODE) != JPEGMOD_DIGEST)
{
vSetSharedInfo(SI_PREVIEW_MODE, FALSE);
vSendUopCmd(UOP_PLAY, 0x0, 0x0, 0x0);
}
if (fgIsInSetupMenu())
{
// - pause jpg decoding
vSendUopCmd(UOP_PAUSE, 0x01, 0x01, 0x00);
//vFsMenuFreezeDec(TRUE);
}
}
#endif
_bFlVdoPbcStt = SV_PLAY;
if (_rFlCmdLock.bPath != FL_CMDPATH_SEL_1)
{
vFlClRls();
}
return;
}
/**
* We send a click item command from object "jpeg viewer" and handle the
* return here.
*/
static void vFlJvRetClickItem(void) large
{
vFlCmdDone();
vFlClRls();
return;
}
/**
* Handle the JPEG state change notification.
*/
static void vFlJvChgJpgState(BYTE bStt) large
{
WORD wIdx;
BYTE bMode;
// - get the index of the current item of JPEG module and
// the operation mode
bLoByte(wIdx) = bSharedInfo(SI_JPG_ITEM_IDX_LO);
bHiByte(wIdx) = bSharedInfo(SI_JPG_ITEM_IDX_HI);
bMode = bSharedInfo(SI_JPG_MODE);
switch (bStt)
{
case JPEGSTT_DEC_STRT:
if ((bMode == JPEGMOD_NORMAL) || (bMode == JPEGMOD_SLIDESHOW))
{
#ifdef FLJV_SHOW_DEC_STATUS
vOsdPosShow(OSD_POS_PBC_2, OSD_MSG_JPG_DECODING, OSD_NO_DISAPPEAR);
#endif
vFlUpdateVfd(FALSE);
}
#ifdef JPEG_DDISC_DIGEST_ENABLE
else if (bMode == JPEGMOD_DIGEST)
{
if (_bFlJvDgtItemIdx == 0)
{
vFlJvDgtMnMnHil();
}
}
#endif
break;
case JPEGSTT_DEC_FSH:
case JPEGSTT_DEC_ABT:
if (bMode == JPEGMOD_NORMAL)
{
#ifdef FLJV_SHOW_DEC_STATUS
vOsdPosShow(OSD_POS_PBC_2, OSD_MSG_JPG_DECODING, 1);
#endif
}
#ifdef JPEG_DDISC_DIGEST_ENABLE
else if (bMode == JPEGMOD_DIGEST)
{
// - TODO: do nothing here
}
break;
#endif
case JPEGSTT_DEC_ERR:
break;
default:
// - wrong case
break;
}
return;
}
/**
* IR_CMD_DONE handler of "JVIEW MAIN VIDEO".
*/
BOOL fgFlJvMvIrCmdDoneHdr(void) large
{
BYTE bTemp;
if (FL_ACK(_dwIrDoneParm) == FL_CMD_ASSERT)
{
// - get file list command assertion here
switch(bSharedInfo(FL_CMD_BLK_SA))
{
case FLCMD_CLICK_ITEM:
vFlJvRetClickItem();
break;
default:
// - TODO: other case
break;
}
}
else
{
// - notification
switch (FL_ACK(_dwIrDoneParm))
{
case SI_MP3_STT:
_fgFlMdChg = TRUE;
break;
case SI_JPG_STT:
vFlJvChgJpgState(FL_PARM1(_dwIrDoneParm));
break;
#ifdef JPEG_DDISC_DIGEST_ENABLE
case SI_JPG_MODE:
if (FL_PARM1(_dwIrDoneParm) == JPEGMOD_DIGEST)
{
vFlJvShowDgtMn();
}
break;
#endif
case SI_JPG_SLIDE_SHOW_DONE:
#ifdef JPEG_DDISC_DIGEST_ENABLE
if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
{
// - for PCD, turn on digest mode
vFlJvDgtOn();
}
else
#endif
{
// - for DATA disc, stop the module totally and change command target
// back to file menu
vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
//if (fgFlClLock(FL_CMDPATH_RPLC_CMDTGT))//cl 0512 test
vFlSetCmdTarget(FL_CMD_TARGET_MENU);
}
break;
case SI_DDISC_PB_MODULE:
break;
#ifdef FLJV_SHOW_ROTATE_PAN_MSG
case SI_JPG_ROTATE_PAN_ACK:
bTemp = bSharedInfo(SI_JPG_ROTATE_PAN_ACK);
if ((bTemp &0xF0) == 0x10) // JPG_ACK_ROTATING
{
vFlShowError(OSD_POS_ERROR, OSD_MSG_ROTATING, 4);
}
else
{
switch (bTemp & 0x0F)
{
case SV_UP:
vFlShowError(OSD_POS_ERROR, OSD_MSG_PAN_UP, 4);
break;
case SV_DOWN:
vFlShowError(OSD_POS_ERROR, OSD_MSG_PAN_DOWN, 4);
break;
case SV_LEFT:
vFlShowError(OSD_POS_ERROR, OSD_MSG_PAN_LEFT, 4);
break;
case SV_RIGHT:
vFlShowError(OSD_POS_ERROR, OSD_MSG_PAN_RIGHT, 4);
break;
}
}
break;
#endif
case FL_CMD_ASSERT:
// - "FS LIST" command ack, this should not happen here
default:
// - other notification and command ack.
return FALSE;
}
}
return TRUE;
}
static BOOL fgFlJvOnIrSelDone(void) large
{
WORD wIdx;
WORD wFldrNs;
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))
{
#if 0
if (fgIsPcdPlay())
{
vFlCmdClickItem(_bFlMnListId, wIdx);
}
else
#endif
{
wIdx--;
#ifdef JPEG_DDISC_DIGEST_ENABLE
if (bSharedInfo(SI_JPG_MODE) == JPEGMOD_DIGEST)
{
if (wIdx > (bSharedInfo(SI_THUMBNAIL_16_IDX_HI)))
return TRUE;
wIdx = wFlJvGetDgtItemIdx(wIdx);
}
#endif
_wCurrItem = wIdx;
_bFlMnCurItemIdx = wIdx % FLMN_ITEM_N;
if (fgFlClLock(FL_CMDPATH_SEL_0))
{
fgFlCmdGetItems(_bFlMnListId, wIdx - _bFlMnCurItemIdx);//, FLCMD_RET_OP_SEL);
}
}
// vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
//vFlCmdClickItem(_bFlMnListId, wIdx, FLCMD_RET_OP_CMDACK);
}
return TRUE;
}
#ifdef JPEG_DDISC_DIGEST_ENABLE
/**
* IR_CMD_DONE handler of object "JVIEWER DIGEST MENU".
*
* RETURN: the return value indicates if we grabbed this IR.
*/
BOOL fgFlJvDgtMnIrCmdDoneHdr(void) large
{
BYTE bItemNs;
if (FL_ACK(_dwIrDoneParm) == FL_CMD_ASSERT)
{
// - get file list command assertion here
switch(bSharedInfo(FL_CMD_BLK_SA))
{
case FLCMD_CLICK_ITEM:
vFlJvRetClickItem();
break;
default:
// - TODO: other case
break;
}
}
else
{
switch (FL_ACK(_dwIrDoneParm))
{
case SI_JPG_STT:
// - state of the JPEG module changed
if (FL_PARM1(_dwIrDoneParm) == JPEGSTT_DEC_STRT)
{
bItemNs = bSharedInfo(SI_THUMBNAIL_16_IDX_HI) + 1;
if (bItemNs == 1)
{
_bFlJvDgtItemIdx = 0;
_bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
vFlJvDgtMnMnHil(); // - first time to hilit the item
}
// - read in the list index of the thumbnail item
//wFlJvGetDgtItemIdx(bItemNs - 1);
#if 0
// - when JPEG decoding starts under digest mode, increase the item
// number counter
_bFlJvDgtItemNs ++;
//if (_bFlJvDgtItemNs == 1)
if ((_bFlJvDgtItemNs % DGT_MN_NS) == 1)
vFlJvDgtMnMnHil(); // - first tme to hilit the item
// - read in the list index of the thumbnail item
vFlJvDgtRdIdx(_bFlJvDgtItemNs - 1);
#endif
}
break;
case SI_JPG_MODE:
// - the module back from digest mode
#ifdef JPEG_DDISC_DIGEST_ENABLE
if (FL_PARM1(_dwIrDoneParm) != JPEGMOD_DIGEST)
{
// - bury the menu
vFlJvBuryDgtMn();
vEnableWB(WB_NORMAL_VOL);
}
break;
#endif
case SI_JPG_SLIDE_SHOW_DONE:
// - slide show done
//vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
break;
case FL_CMD_ASSERT:
// - "FS LIST" command ack, this should not happen here
default:
// - other notification and command ack.
return FALSE;
}
}
return TRUE;
}
#if 0 // - JACOB: for backup
BOOL fgFlJvDgtMnIrCmdDoneHdr(void) large
{
switch (FL_ACK(_dwIrDoneParm))
{
case SI_JPG_STT:
// - state of the JPEG module changed
if (FL_PARM1(_dwIrDoneParm) == JPEGSTT_DEC_STRT)
{
// - when JPEG decoding starts under digest mode, increase the item
// number counter
_bFlJvDgtItemNs ++;
if (_bFlJvDgtItemNs == 1)
vFlJvDgtMnMnHil(); // - first tme to hilit the item
// - read in the list index of the thumbnail item
vFlJvDgtRdIdx(_bFlJvDgtItemNs - 1);
}
break;
case SI_JPG_MODE:
// - the module back from digest mode
if (FL_PARM1(_dwIrDoneParm) != JPEGMOD_DIGEST)
{
// - bury the menu
vFlJvBuryDgtMn();
}
break;
case SI_JPG_SLIDE_SHOW_DONE:
// - slide show done
//vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
break;
case FL_CMD_ASSERT:
// - "FS LIST" command ack, this should not happen here
default:
// - other notification and command ack.
return FALSE;
}
return TRUE;
}
#endif //0
////////////////////////////////////////////////////////////////////////////////
// Jpeg View IR Key Handler
/**
* IR_ENTER handlder of "JVIEWER DIGEST MENU".
*/
void vFlJvDgtMnIrEnterHdr(void) large
{
switch (_bFlJvDgtMnOn)
{
case FLJVDGTMN_OBJ_MN:
// - select item from item menu
vSendUopCmd(UOP_DIGITAL_BTN, _bFlJvDgtItemIdx, 0x0, 0x0);
break;
case FLJVDGTMN_BTN_SS:
vSendUopCmd(UOP_PLAY, bSharedInfo(SI_THUMBNAIL_1_IDX_HI), bSharedInfo(SI_THUMBNAIL_1_IDX_LO), 0x00);
break;
case FLJVDGTMN_BTN_HP:
// - show help menu
vFlSetCmdTarget(FL_CMD_TARGET_HELP);
//vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
break;
case FLJVDGTMN_BTN_NT:
//_bFlJvDgtItemIdx = 0;
//_bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
vSendUopCmd(UOP_NEXT, 0x0, 0x0, 0x0);
break;
case FLJVDGTMN_BTN_PV:
//_bFlJvDgtItemIdx = 0;
//_bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
vSendUopCmd(UOP_PREVIOUS, 0x0, 0x0, 0x0);
break;
default:
// - error handling
break;
}
return;
}
#endif //JPEG_DDISC_DIGEST_ENABLE
/**
* General IR_TRANS_EFF handler of "JVIEW and JVIEW DIGEST MENU".
*/
#ifndef GCY_EDIT
static BOOL fgFlJvOnIrTransEff(void) large
{
#if defined(TRANSITION_SPECIAL_EFFECT)
_bFlJvTransEff = (++_bFlJvTransEff) % FLJV_MAX_TRANS_EFF;
vSetSharedInfo(SI_JPG_TRANSITION_EFFECT, _rFlJvTransEff[_bFlJvTransEff].bCode);
vFlShowError(OSD_POS_ERROR, _rFlJvTransEff[_bFlJvTransEff].wMsg, 4);
#endif
return TRUE;
}
#endif
static BOOL fgFlJvOnIrPlay(void) large
{
//if (bSharedInfo(SI_PBC_STATE) == SV_PAUSE)
if (_bFlVdoPbcStt == SV_PAUSE)
{
vSendUopCmd(UOP_PLAY, 0x00, bSharedInfo(SI_JPG_ITEM_IDX_LO), bSharedInfo(SI_JPG_ITEM_IDX_HI));
_bFlVdoPbcStt = SV_PLAY ; //nicle[04\07\27] fix jpeg pause once, can't pause anymore.
}
return TRUE;
}
/**
* IR_PAUSE handler of "JVIEW".
*
* NOTE: PCD only. to stop the slide show but do _NOT_ show digest.
*/
static BOOL fgFlJvOnIrPause(void) large
{
#ifdef FLJV_PAUSE_PLAY_SHOW_NEXT
WORD wIdx, wTotal;
#endif
#if defined(SOPPORT_PCD)
if (fgIsInputStateValid(INPUT_STATE_PCD_ZOOM))
{
vFlShowError(OSD_POS_ERROR, OSD_MSG_ERROR, OSD_TIMEOUT_SHORT);
return TRUE;
}
#endif
if (_bFlVdoPbcStt == SV_PAUSE)
{
/*#ifdef FLJV_PAUSE_PLAY_SHOW_NEXT
wIdx = (WORD) bSharedInfo(SI_JPG_ITEM_IDX_HI) * 256 + (WORD) bSharedInfo(SI_JPG_ITEM_IDX_LO);
// todo : check if wIdx is the last picture
wIdx ++;
vSendUopCmd(UOP_PLAY, 0x00, bLoByte(wIdx), bHiByte(wIdx));
#else
vSendUopCmd(UOP_PLAY, 0x00, bSharedInfo(SI_JPG_ITEM_IDX_LO), bSharedInfo(SI_JPG_ITEM_IDX_HI));
#endif
_bFlVdoPbcStt = SV_PLAY;*/ //nicle[04\07\22] pr18
return TRUE;
}
//else if (bSharedInfo(SI_PBC_STATE) == SV_PLAY)
else if (_bFlVdoPbcStt == SV_PLAY)
{
vSendUopCmd(UOP_PAUSE, 0x0, 0x0, 0x0);
_bFlVdoPbcStt = SV_PAUSE;
return TRUE;
}
return FALSE;
}
#ifdef JPEG_DDISC_DIGEST_ENABLE
/**
* IR_DIR (LEFT, RIGHT, UP and DOWN) handler of "JVIEW DIGEST MENU".
*/
void vFlJvDgtMnIrDirHdr(void) large
{
switch (_bFlJvDgtMnOn)
{
case FLJVDGTMN_OBJ_MN:
vFlJvDgtMnMnIrDirHdr();
break;
case FLJVDGTMN_BTN_SS:
case FLJVDGTMN_BTN_HP:
case FLJVDGTMN_BTN_NT:
case FLJVDGTMN_BTN_PV:
vFlJvDgtMnBtnsIrDirHdr();
break;
default:
// - error handling
break;
}
return;
}
/**
* IR_DIR (LEFT, RIGHT, UP and DOWN) handler of "JVIEW DIGEST MENU ITEM MENU".
*
* NOTE: Adjust the global variable _bFlJvDgtItemIdx to indicate
* the current item.
*/
void vFlJvDgtMnMnIrDirHdr(void) large
{
BYTE bItemNs = bSharedInfo(SI_THUMBNAIL_16_IDX_HI) + 1;
switch (_bIRKey)
{
case IR_RIGHT:
// - move to next right item
_bFlJvDgtItemIdx ++;
if ((_bFlJvDgtItemIdx % DGT_MN_X_DIM_NS) == 0)
_bFlJvDgtItemIdx -= DGT_MN_X_DIM_NS;
else if (_bFlJvDgtItemIdx >= bItemNs)
_bFlJvDgtItemIdx -= (bItemNs % DGT_MN_X_DIM_NS);
break;
case IR_LEFT:
// - move to next left item
_bFlJvDgtItemIdx = ((_bFlJvDgtItemIdx % DGT_MN_X_DIM_NS) == 0) ?
(_bFlJvDgtItemIdx + (DGT_MN_X_DIM_NS - 1)) :
(_bFlJvDgtItemIdx - 1);
if (_bFlJvDgtItemIdx >= bItemNs)
_bFlJvDgtItemIdx = bItemNs -1;
//_bFlJvDgtItemIdx -= (DGT_MN_NS - bItemNs);
break;
case IR_UP:
// - move to upper item
if (_bFlJvDgtItemIdx < DGT_MN_X_DIM_NS) // - first row
// - move to function buttons
_bFlJvDgtMnOn = FLJVDGTMN_BTN_SS;
else
_bFlJvDgtItemIdx -= DGT_MN_X_DIM_NS;
break;
case IR_DOWN:
// - move to lower item
if ((_bFlJvDgtItemIdx + DGT_MN_X_DIM_NS) >= bItemNs)
_bFlJvDgtMnOn = FLJVDGTMN_BTN_SS;
else
_bFlJvDgtItemIdx += DGT_MN_X_DIM_NS;
break;
default:
// - this should _NOT_ happen
return;
}
vFlJvDgtMnHil();
return;
}
/**
* IR_DIR (LEFT, RIGHT, UP and DOWN) handler of "JVIEW DIGEST MENU BUTTONS".
*/
void vFlJvDgtMnBtnsIrDirHdr(void) large
{
switch (_bIRKey)
{
case IR_RIGHT:
// - move the next button
if (_bFlJvDgtMnOn == FLJVDGTMN_BTN_SS)
_bFlJvDgtMnOn = FLJVDGTMN_BTN_HP;
else if (_bFlJvDgtMnOn == FLJVDGTMN_BTN_HP)
_bFlJvDgtMnOn = FLJVDGTMN_BTN_PV;
else if (_bFlJvDgtMnOn == FLJVDGTMN_BTN_PV)
_bFlJvDgtMnOn = FLJVDGTMN_BTN_NT;
else
_bFlJvDgtMnOn = FLJVDGTMN_BTN_SS;
break;
case IR_LEFT:
// - move to previous button
if (_bFlJvDgtMnOn == FLJVDGTMN_BTN_SS)
_bFlJvDgtMnOn = FLJVDGTMN_BTN_NT;
else if (_bFlJvDgtMnOn == FLJVDGTMN_BTN_HP)
_bFlJvDgtMnOn = FLJVDGTMN_BTN_SS;
else if (_bFlJvDgtMnOn == FLJVDGTMN_BTN_PV)
_bFlJvDgtMnOn = FLJVDGTMN_BTN_HP;
else
_bFlJvDgtMnOn = FLJVDGTMN_BTN_PV;
break;
case IR_UP:
case IR_DOWN:
default:
// - move to menu
_bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
break;
}
vFlJvDgtMnHil();
return;
}
#endif
/**
* Focus on object "MAIN VIDEO - JVIEWER".
*/
BOOL fgFlJvOnMv(void) large
{
BOOL fgIsGrabbed = TRUE;
#ifndef JPEG_DDISC_DIGEST_ENABLE
// if (bSharedInfo(SI_DISC_TYPE) != SV_PCD)//oneway
{
if (_bIRKey == IR_STOP)
_bIRKey = IR_ROOT_MENU;
}
#endif
#if 0//oneway
if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
{
if (_bIRKey == IR_ROOT_MENU)
_bIRKey = IR_STOP;
}
#endif
switch (_bIRKey)
{
case IR_CMD_DONE:
fgIsGrabbed = fgFlJvMvIrCmdDoneHdr();
break;
#ifdef JPEG_DDISC_DIGEST_ENABLE
case IR_STOP:
// - turn on digest menu
vFlJvDgtOn();
break;
#endif
#if 0
case IR_LEFT:
case IR_RIGHT:
case IR_UP:
case IR_DOWN:
fgIsGrabbed = FALSE;
break;
#endif
case IR_NEXT:
vSendUopCmd(UOP_NEXT, 0, 0, 0);
break;
case IR_PREV:
vSendUopCmd(UOP_PREVIOUS, 0, 0, 0);
break;
case IR_ROOT_MENU:
// - back to file menu state
fgIsGrabbed = TRUE;
// - stop the JPEG module and turn back to "PBC_STOP_STATE"
// the JPEG module will go back to background and
// we will get the PB_MODULE notification
//vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
if (fgFlClLock(FL_CMDPATH_RPLC_CMDTGT))
vFlSetCmdTarget(FL_CMD_TARGET_MENU);
//vFlCtrlRefocus(IR_ROOT_MENU);
break;
case IR_PROGRAM:
#if 1//(DRAM_SZ == DRAM_4M)
// case IR_ZOOM_IN:
// vFlShowError(OSD_POS_ERROR, OSD_MSG_ERROR, OSD_TIMEOUT_SHORT);
// fgIsGrabbed = TRUE;
#else
fgIsGrabbed = fgFlJvOnIrTransEff();
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
break;
#endif
case IR_PLAY_ENTER:
case IR_PLAY:
case IR_ENTER:
case IR_PLAY_PAUSE:
fgIsGrabbed = fgFlJvOnIrPlay();
break;
case IR_PAUSE:
fgIsGrabbed = fgFlJvOnIrPause();
break;
case IR_MUTE:
case IR_FF:
case IR_FR:
#if 1//def JPG_INFO
vFlShowError(OSD_POS_ERROR, OSD_MSG_ERROR, OSD_TIMEOUT_SHORT);
#endif
/*
if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
vFlShowError(OSD_POS_ERROR, SV_ERR_DISC_NOT_SUPPORT, OSD_TIMEOUT_SHORT);
else
vFlShowError(OSD_POS_ERROR, SV_ERR_GENERAL, OSD_TIMEOUT_SHORT);
*/
fgIsGrabbed = TRUE;
break;
case IR_SELECT_DONE:
fgIsGrabbed = fgFlJvOnIrSelDone();
break;
case IR_DISPLAY:
break;
default:
fgIsGrabbed = FALSE;
break;
}
return fgIsGrabbed;
}
#ifdef JPEG_DDISC_DIGEST_ENABLE
/**
* Focus on JVIEW digest menu.
*/
BOOL fgFlJvOnDgtMn(void) large
{
BOOL fgIsGrabbed = TRUE;
switch (_bIRKey)
{
case IR_CMD_DONE:
fgIsGrabbed = fgFlJvDgtMnIrCmdDoneHdr();
break;
case IR_PLAY:
case IR_ENTER:
case IR_PLAY_ENTER:
case IR_PLAY_PAUSE:
vFlJvDgtMnIrEnterHdr();
break;
case IR_SELECT_DONE:
fgIsGrabbed = fgFlJvOnIrSelDone();
break;
case IR_STOP:
break;
case IR_LEFT:
case IR_RIGHT:
case IR_UP:
case IR_DOWN:
vFlJvDgtMnIrDirHdr();
break;
case IR_NEXT:
case IR_PREV:
//_bFlJvDgtItemIdx = 0;
//_bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
fgIsGrabbed = FALSE;
break;
case IR_ROOT_MENU:
if (bSharedInfo(SI_DISC_TYPE) != SV_PCD)
{
if (fgFlClLock(FL_CMDPATH_RPLC_CMDTGT))
{
vFlSetCmdTarget(FL_CMD_TARGET_MENU);
}
}
else
{
vFlShowError(OSD_POS_ERROR, OSD_MSG_ERROR, OSD_TIMEOUT_SHORT);
}
break;
default:
fgIsGrabbed = FALSE;
break;
}
return fgIsGrabbed;
}
#endif
/**
* IR dispatcher when the focus is on the object.
*/
BOOL fgFlOnJv(void) large
{
BOOL fgIsGrabbed;
switch (_bFlJvOn)
{
case FLJV_OBJ_MV:
fgIsGrabbed = fgFlJvOnMv();
break;
#ifdef JPEG_DDISC_DIGEST_ENABLE
case FLJV_OBJ_DGTMN:
fgIsGrabbed = fgFlJvOnDgtMn();
break;
#endif
default:
fgIsGrabbed = FALSE;
break;
}
// - the second level handler
if (fgIsGrabbed == FALSE)
{
switch (_bIRKey)
{
case IR_CMD_DONE:
fgIsGrabbed = TRUE;
break;
default:
// - keep the fgIsGrabbed as "FALSE" to pass the IRs
break;
}
}
return fgIsGrabbed;
}
#ifdef JPEG_DDISC_DIGEST_ENABLE
void vFlJvChgLang(BYTE bLang) large
{
vFlJvDrawDgtBtns(bLang);
}
#endif
#if 0
void vFlJvHandleUopRet(BYTE bUopId) large
{
if (_bFlWaitUopRet == bUopId)
{
switch(bUopId)
{
case UOP_NEXT:
case UOP_PREVIOUS:
// _bFlJvDgtItemIdx = 0;
// _bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
break;
/*
case UOP_STOP:
switch (_bFlUopRetJob)
{
}
break;
*/
}
}
}
#endif
#endif // #ifdef PLAYER_FLMENU