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

📄 fljview.c

📁 MTK 1389e版 MINI组合音响代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 03/10/27 10:19a   $       ****************/
/***************  $Revision:: 1                $       ****************/
/***************                                       ****************/
/***************   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

//#define DEBUG_LIKE
#ifdef DEBUG_LIKE
extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#endif
#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 FLJV_MAX_TRANS_EFF  18 //17->18 BillDen
#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 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;

//  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;

/**
 * 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},
  { 0xFF,  OSD_MSG_RANDOM }, //BillDen
  { 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

/**
 * Turn on the digest mode.
 */
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_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;
}

/**
 * Recover the display of object "file list jpeg viewer".
 */
void vFlJvRecover(void) large
{
  vSetHLCol(FLDGTMN_HILIT, FLDGTMN_HILIT_COL);  

  // - resume jpg decoding
  vSendUopCmd(UOP_PAUSE, 0x01, 0x02, 0x00);
  
  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 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
  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
{
  // - draw bitmap for function buttons
  #if defined(HongKong) || defined(DVP550DX)  || defined(DV965JP) || defined(SUPPORT_RUSSIAN) \
  	|| defined(TW_3408) ||(defined(CS360)&&!defined(SUPPORT_WAIXIAO))//Vincent @11-24-03
  if (bLangIdx == 1)//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.
 */
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;

  _bFlJvTransEff = 0;
  vSetSharedInfo(SI_JPG_TRANSITION_EFFECT, _rFlJvTransEff[_bFlJvTransEff].bCode);

  return TRUE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -