⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fljview.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********************************************************************/
/***************    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 + -