📄 fljview.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 05/10/03 9:01p $ ****************/
/*************** $Revision:: 17 $ ****************/
/*************** ****************/
/*************** 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 16
// GLOBAL VARIABLES
// focus control
static xdata BYTE _bFlJvOn; // - focus on obj of JVIEW
static xdata BYTE _fgPcdFirst;
#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;
static BOOL fgFlJvOnIrTransEff(void) large;
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] = {
#if 0
{ 2, OSD_MSG_JPG_DECODING }, //tmp message for TRANS_EFFECT
{ 3, OSD_MSG_JPG_DECODING },
{ 0, OSD_MSG_JPG_DECODING },
{ 1, OSD_MSG_JPG_DECODING },
{ 4, OSD_MSG_JPG_DECODING },
{ 5, OSD_MSG_JPG_DECODING },
{ 6, OSD_MSG_JPG_DECODING },
{ 7, OSD_MSG_JPG_DECODING },
{ 8, OSD_MSG_JPG_DECODING },
{ 9, OSD_MSG_JPG_DECODING },
{ 10, OSD_MSG_JPG_DECODING },
{ 11, OSD_MSG_JPG_DECODING },
{ 12, OSD_MSG_JPG_DECODING },
{ 13, OSD_MSG_JPG_DECODING },
{ 14, OSD_MSG_JPG_DECODING },
{ 26, OSD_MSG_JPG_DECODING}
//{ 0xFE, OSD_MSG_NONE }
#else // 20050406, IS00001996, windy has added these msgs
{ 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 },
// 20050406, current these 2 mode has problem, MOVE_IN_FROM_TOP will only show upper part, NONE will show nothing.
// CL Wang will check this issue
{ 26, OSD_MSG_MOVE_IN_FROM_TOP}
//{ 0xFE, OSD_MSG_NONE }
#endif
};
#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
#else
static code struct _sTransEffect _rFlJvTransEff[1];
#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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -