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

📄 fljview.c

📁 mtk1389L latest sourcecode enjoy
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********************************************************************/
/***************    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 + -