📄 fljview.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 07/05/09 4:26p $ ****************/
/*************** $Revision:: 4 $ ****************/
/*************** ****************/
/*************** 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
#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"
#define FLJVDGTMN_OBJ_COLOR 2 // White
#define FLJVDGTMN_BTN_COLOR 0x0C // Light green
#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
static xdata BYTE _bFlJvDgtMnOn; // - focus on obj of DIGEST MENU
// digest menu control
static xdata BYTE _bFlJvDgtItemIdx; // - digest item index
static xdata BYTE _bFlJvTransEff; // - the current transition effect.
///*static*/ xdata BYTE _bFlJvDgtItemNs; // - digest item number
// MEMBER FUNCTIONS
// utilities
static BOOL fgFlJvDgtOn(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;
// event handler
// sub-obj "JVIEW MV"
static BOOL fgFlJvMvIrCmdDoneHdr(void) large;
static BOOL fgFlJvOnIrSelDone(void) large;
static BOOL fgFlJvOnIrTransEff(void) large;
static BOOL fgFlJvOnIrPlay(void) large;
static BOOL fgFlJvOnIrPause(void) large;
// sub-obj "JVIEW DIGEST MENU"
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;
// sub object state machine
static BOOL fgFlJvOnMv(void) large;
static BOOL fgFlJvOnDgtMn(void) large;
static void vFlJvChgJpgState(BYTE bStt) large;
static void vFlJvRetClickItem(void) large;
#ifdef SUPPORT_EMD
static void vFlJvRetAddItem(void) large;
static void vFlJvRetDelItem(void) large;
#endif
/**
* Transition effect
*/
struct _sTransEffect
{
BYTE bCode;
WORD wMsg;
};
#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
////////////////////////////////////////////////////////////////////////////////
//
// Event Handler Map
//
static code sFlIrHandler _rFlJvIrHandler[] =
{
{ IR_CMD_DONE, fgFlJvMvIrCmdDoneHdr },
{ IR_SELECT_DONE, fgFlJvOnIrSelDone },
{ IR_STOP, fgFlJvDgtOn }, // turn on digest menu
#ifndef MT1389_REV_HD
{ IR_PROGRAM, fgFlJvOnIrTransEff },
#endif
{ IR_PLAY_ENTER, fgFlJvOnIrPlay },
{ IR_PLAY, fgFlJvOnIrPlay },
{ IR_ENTER, fgFlJvOnIrPlay },
{ IR_PLAY_PAUSE, fgFlJvOnIrPlay },
{ IR_PAUSE, fgFlJvOnIrPause }
};
/**
* Turn on the digest mode.
*/
BOOL fgFlJvDgtOn(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 TRUE;
}
/**
* 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_NORMAL_HEAD1);
vCreateWBEx(WB_NORMAL_HEAD2);
/*
We found the real reasion that maybe the PREV/NEXT play state icon can not be show.
Add it by Bright_liu 2005/11/18, for CQ(PL00205076 ,PL00205130)
*/
vEnableWB(WB_NORMAL_HEAD1);
// - set the focus
_bFlJvOn = FLJV_OBJ_DGTMN;
_bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
// _bFlJvDgtItemNs = 0;
// - reset the item number counter and index
_bFlJvDgtItemIdx = 0;
#ifdef HILI_USE_OSD
vCreateWBEx(WB_DGST_HILI);
vEnableWB(WB_DGST_HILI);
#endif
vCreateWBEx(FL_DGTMN_WB);
vEnableWB(FL_DGTMN_WB);
//vDisableWB(WB_NORMAL_VOL);
//vEnableWB(FL_DGTMN_WB);
vFlJvDrawDgtBtns(bEepromReadByte(OSD_LANG_POSITION));
vFlJvDgtMnHil () ;
// - turn on the hilit select state
vSetSharedInfo(SI_HLI_STATE, SV_ON);
return;
}
/**
* Recover the display of object "file list jpeg viewer".
*/
void vFlJvRecover(void) large
{
BYTE bTmp;
#ifndef HILI_USE_OSD
vSetHLCol(FLDGTMN_HILIT, FLDGTMN_HILIT_COL);
#endif
// - resume jpg decoding
if(_bJpgIdx > 0)
{
vSendUopCmd(UOP_PAUSE, 0x01, 0x02, SV_SMS_EXIT/*0x00*/);//added the para "SV_SMS_EXIT" by msz00049 for CR PL00105955
_bJpgIdx = 0;
}
bTmp = bSharedInfo(SI_ZOOM_SWITCH);
if (bTmp)
{
vCreateWBEx(WB_OVERLAY_MSG2);
vOsdShowZoomPct(bTmp);
}
if (bSharedInfo(SI_JPG_MODE) == JPEGMOD_DIGEST)
{
// - recover to digest menu
vDisableWB(WB_NORMAL_VOL);
#ifdef HILI_USE_OSD
//vDisableWB(WB_NORMAL_HEAD1);
vDisableWB(WB_NORMAL_HEAD2);
vDisableWB(WB_NORMAL_PBC1);
vDisableWB(WB_NORMAL_PBC2);
vEnableWB(WB_DGST_HILI);
#endif
vEnableWB(FL_DGTMN_WB);
//vShowWbHili(FL_DGTMN_WB, FLDGTMN_HILIT);
// - draw the buttons on digest menu
vFlJvDrawDgtBtns(bEepromReadByte(OSD_LANG_POSITION));
vFlJvDgtMnHil();
}
else 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;
}
/**
* Bury the digest menu (hide or disable all visual components of
* digest menu).
*/
void vFlJvBuryDgtMn(void) large
{
// - adjust the OSD component state
vDisableWB(FL_DGTMN_WB);
#ifdef HILI_USE_OSD
// Disable by Cleaning to transparents color.
_wStartX = 0;
_wStartY = 0;
_wEndX = DGST_HILI_WIDTH - 1;
_wEndY = DGST_HILI_HEIGHT - 1;
vRectangle(WB_DGST_HILI, 0, 0, 1, 0); // CLear
#ifdef JPG_BUFFER_NTSC
#ifdef MT1389_REV_HD
if ((bSharedInfo(SI_NTSC_PAL) == SV_NTSC) || (bSharedInfo(SI_HD_MODE) != SV_HD_MODE_OFF))
#else
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#endif /*MT1389_REV_HD*/
#else
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#endif
{
_wEndY = (WORD)DGST_HILI_HEIGHT * 480 / 576 - 1;
}
else
{
_wEndY = DGST_HILI_HEIGHT - 1;
}
vRectangle(WB_DGST_HILI, 0, 0, 1, 0);
#else
vHideHL(FLDGTMN_HILIT);
#endif
// - 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
{
// - 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
{
// - 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;
}
vEnableWB(WB_DGST_HILI); //corresponding fgCOMTvFormatKey vDisableWB(WB_DGST_HILI)
#ifdef HILI_USE_OSD
// Disable by Cleaning to transparents color.
_wStartX = 0;
_wStartY = 0;
_wEndX = DGST_HILI_WIDTH - 1;
_wEndY = DGST_HILI_HEIGHT - 1;
vRectangle(WB_DGST_HILI, 0, 0, 1, 0); // CLear
#ifdef JPG_BUFFER_NTSC
#ifdef MT1389_REV_HD
if ((bSharedInfo(SI_NTSC_PAL) == SV_NTSC) || (bSharedInfo(SI_HD_MODE) != SV_HD_MODE_OFF))
#else
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#endif /*MT1389_REV_HD*/
#else
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#endif
{
_wEndY = (WORD)DGST_HILI_HEIGHT * 480 / 576 - 1;
}
else
{
_wEndY = DGST_HILI_HEIGHT - 1;
}
vRectangle(WB_DGST_HILI, 0, 0, 1, 0);
// - Clean the OSD Highlight of SS/HELP MENU/PREV/NEXT.
_wStartX = DGT_BTN_SS_L;
_wEndX = DGT_BTN_SS_L + DGT_BTN_SS_W + DGT_BTN_HP_W + DGT_BTN_PV_W
+ DGT_BTN_NT_W + 3*DGT_BTN_H_GAP + DGT_BTN_HL_RB;
_wStartY = DGT_BTN_T;
_wEndY = _wStartY + DGT_BTN_PV_H;
vChgColRep(FL_DGTMN_WB, 0x03, 0); // This will erase the background color of menu/help button
vChgColRep(FL_DGTMN_WB, FLJVDGTMN_BTN_COLOR, 0);
#endif
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;
}
#ifdef HILI_USE_OSD
vChgColRep(FL_DGTMN_WB, 0, FLJVDGTMN_BTN_COLOR);
// 20050712, PL00001236, redraw the button bitmap on white rectangle again
//vFlJvReDrawDgtBtn (bEepromReadByte(OSD_LANG_POSITION), _bFlJvDgtMnOn) ;
#else
// - show hilit, and turn on the hilit select state
vShowWbHili(FL_DGTMN_WB, FLDGTMN_HILIT);
vSetHLRng(FLDGTMN_HILIT, FL_DGTMN_WB);
#endif
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
#ifdef MT1389_REV_HD
if ((bSharedInfo(SI_NTSC_PAL) == SV_NTSC) || (bSharedInfo(SI_HD_MODE) != SV_HD_MODE_OFF))
#else
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#endif /*MT1389_REV_HD*/
#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;
}
#ifdef HILI_USE_OSD
/*
Add it by Bright_liu 005/11/16, for CQ(PL00205117)
when in PCD digest mode, the second line high line has error.
*/
_wStartY = ((_wStartY >> 1) << 1);
_wEndY = ((_wEndY >> 1) << 1) + 1;
vWBChgPos(WB_DGST_HILI);
_wStartX = 0;
_wStartY = 0;
_wEndX = DGST_HILI_WIDTH - 1;
_wEndY = DGST_HILI_HEIGHT - 1;
vRectangle(WB_DGST_HILI, 0, 0, 1, 0); // CLear
#ifdef JPG_BUFFER_NTSC
#ifdef MT1389_REV_HD
if ((bSharedInfo(SI_NTSC_PAL) == SV_NTSC) || (bSharedInfo(SI_HD_MODE) != SV_HD_MODE_OFF))
#else
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#endif /*MT1389_REV_HD*/
#else
if (bSharedInfo(SI_NTSC_PAL) == SV_NTSC)
#endif
{
_wEndY = (WORD)DGST_HILI_HEIGHT * 480 / 576 - 1;
}
else
{
_wEndY = DGST_HILI_HEIGHT - 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -