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

📄 ssbmp.c

📁 MTK 1389E SOURCE CODE
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 05/10/04 10:14a   $       ****************/
/***************  $Revision:: 7                $       ****************/
/***************                                       ****************/
/***************   Description : OSD                   ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Peter Huang           ****************/
/**********************************************************************/

#include "general.h"

#pragma NOAREGS

#ifdef SS_BMP

#define X_PLUS  0x1
#define Y_PLUS  0x2

#ifdef ALL_WB_USE_TRUECOLOR
  #define SS_MAX_COL 4
code WORD _pwSSCol[SS_MAX_COL][3] = {
  { 0x4800 | 0x02AF, 0x0800 | 0x02AF, 0x1800 | 0x02AF },
  { 0x4800 | 0x018B, 0x0800 | 0x018B, 0x1800 | 0x018B },
  { 0x2800 | 0x02CB, 0x0000 | 0x02CB, 0x1800 | 0x02CB },
  { 0x4800 | 0x0590, 0x0800 | 0x0590, 0x2800 | 0x0590 }
};
#else // not define ALL_WB_USE_TRUECOLOR
  #define SS_MAX_COL 32
  #if 0
code BYTE _pbSSCol[SS_MAX_COL] = {0x24, 0x11, 0x30, 0x13,
                                  0x34, 0x21, 0x06, 0x08,
                                  0x04, 0x06, 0x25, 0x26,
                                  0x31, 0x63, 0x56, 0x45,
                                  0x44, 0x31, 0x50, 0x33,
                                  0x54, 0x41, 0x26, 0x28,
                                  0x24, 0x66, 0x45, 0x76,
                                  0x11, 0x13, 0x46, 0x15};
  #else
code BYTE _pbSSCol[SS_MAX_COL] = {64, 74, 65, 78,
                                  69, 40, 42, 72,
                                  73, 76, 77, 10,
                                  41, 12, 44, 45,
                                  46, 49, 1, 5,
                                  68, 9, 70, 32,
                                  33, 4, 36, 37,
                                  8, 81, 82, 85};
  #endif
#endif // not define ALL_WB_USE_TRUECOLOR

xdata BYTE _bSSCount = 0;
xdata BYTE _bSSColIdx = 0;

#ifdef SS_FADE_INOUT

xdata BYTE _bSSDelay;

typedef struct
{
  BYTE bMixCnt:3;
  BYTE bMixRat:4;
}structMixCnt;

xdata structMixCnt rSsMix;
#endif

void vBmpScrSaveInit(void) large
{
  BYTE pbBmp[3];

#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  //050608 Paddy use DSP working area to show screen saver bmp
  if (!fgIsInSetupMenu() && !fgIsIsoPlay() && !fgIsPcdPlay() && !fgIsCddaPlay())
    vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_DEFAULT);
#endif    
  // added by megaa
  #ifdef ALL_WB_USE_TRUECOLOR
  vCreateWB(WB_SS, TRUE);
  vSetWBTcColor(WB_SS);
  #else
  vCreateWB(WB_SS, FALSE);
  #endif

#ifdef SS_FADE_INOUT
  vSetSharedInfo(SH_SS_COUNT, 0);
  rSsMix.bMixCnt = 1;
  rSsMix.bMixRat = 15;
  _bSSDelay = 0;
#endif

#ifdef SS_USE_ONE_BMP
  pbBmp[0] = 1;
  #ifdef ALL_WB_USE_TRUECOLOR
  pbBmp[1] = BMP_DVD2;
  #else
  pbBmp[1] = BMP_DVD;
  #endif
#else
  pbBmp[0] = 2;
  pbBmp[1] = BMP_LOAD_BIG_0;
  pbBmp[2] = BMP_LOAD_BIG_1;
#endif

  vSaveOsdState();

#ifndef HILI_USE_OSD
  vHideHL(HL_1);
  vHideHL(HL_2);
#endif  
  vChgColDis();

  vSetTransEn(WB_SS, 0);

  vOsdShowBmpXY(0, 0, WB_SS, pbBmp, 1, OSD_NO_DISAPPEAR);

  _wStartX = SS_START_X;
  _wStartY = SS_START_Y;
  vWBChgPos(WB_SS);
#ifdef ALL_WB_USE_TRUECOLOR
  _bSSColIdx = 0;
  #ifdef SS_FADE_INOUT
    vSetTcPal(WB_SS, 1, BLEND_2, _pwSSCol[_bSSColIdx][0]);
    vSetTcPal(WB_SS, 2, BLEND_2, _pwSSCol[_bSSColIdx][1]);
    vSetTcPal(WB_SS, 3, BLEND_2, _pwSSCol[_bSSColIdx++][2]);
  #else
    vSetTcPal(WB_SS, 1, BLEND_3, _pwSSCol[_bSSColIdx][0]);
    vSetTcPal(WB_SS, 2, BLEND_3, _pwSSCol[_bSSColIdx][1]);
    vSetTcPal(WB_SS, 3, BLEND_3, _pwSSCol[_bSSColIdx++][2]);
  #endif
#else // not define ALL_WB_USE_TRUECOLOR
  vSetPal(WB_SS, 1, BLEND_3, _pbSSCol[_bSSColIdx++]);
#endif // not define ALL_WB_USE_TRUECOLOR

  vSetSharedInfo(SH_SCR_COL_CNT, 1);

  vSendUopCmd(UOP_SCR_SAVE, SV_SCR_SAVER_ON, 0, 0);

  _bSSCount = (X_PLUS | Y_PLUS);

  vEnableWB(WB_SS);

/*
  vBmpScrSaveState();
  vBmpScrSaveState();
  vBmpScrSaveState();
  vBmpScrSaveState();
*/
  _bSSColIdx = 0x82;
}

void vBmpScrSaveExit(void) large
{
  vOsdCmdFlush();
  while (bSharedInfo(SI_OSD_CMD_BUF_FULL) == TRUE)
  {
    /* wait till flush command finish */
  }

  vDeleteWB(WB_SS);
  vRestoreOsdState();
  vSendUopCmd(UOP_SCR_SAVE, SV_SCR_SAVER_OFF, 0, 0);
#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  if (!fgIsInSetupMenu() && !fgIsIsoPlay() && !fgIsPcdPlay() && !fgIsCddaPlay())
    vOsdSetMemBlk(OSD_MEM_BLK_STATIC, OSD_MEM_DEFAULT);
#endif    
}

void vBmpScrSaveMove(void) large
{
#ifdef SS_USE_ONE_BMP
  BOOL fgChgCol;
#endif
  WORD wTotalH;
#ifdef SS_FADE_INOUT
  BYTE bSSCount;
#endif

  if (bSharedInfo(SI_OSD_CMD_BUF_FULL) == TRUE)
  {
    return;
  }

#ifdef SS_FADE_INOUT
  if (_bSSDelay)
  {
    if (_bSSDelay--)
    {
      return;
    }
  }
#endif

  wTotalH = (bSharedInfo(SI_NTSC_PAL) == SV_PAL) ? 576 : 480;

#ifdef SS_USE_ONE_BMP
  fgChgCol = FALSE;
#endif

  if (_wStartX < 20)
  {
    _bSSCount |= X_PLUS;
#ifdef SS_USE_ONE_BMP
    fgChgCol = TRUE;
#endif
  }
  else if (_wStartX > (720 - (SS_BMP_WIDTH + 20)))
  {
    _bSSCount &= ~X_PLUS;
#ifdef SS_USE_ONE_BMP
    fgChgCol = TRUE;
#endif
  }
  if (_wStartY < 10)
  {
    _bSSCount |= Y_PLUS;
#ifdef SS_USE_ONE_BMP
    fgChgCol = TRUE;
#endif
  }
  else if (_wStartY > (wTotalH - SS_BMP_HEIGHT))
  {
    _bSSCount &= ~Y_PLUS;
#ifdef SS_USE_ONE_BMP
    fgChgCol = TRUE;
#endif
  }

  if (fgChgCol)
  {
    unsigned char bCol;
    //vSetPal(WB_SS, 1, BLEND_3, (TH0 == 0) ? 1 : TH0);
    bCol = (char)bSharedInfo(SH_SCR_COL_CNT);

#ifndef SS_FADE_INOUT
  #ifdef ALL_WB_USE_TRUECOLOR
    vSetTcPal(WB_SS, 1, BLEND_3, _pwSSCol[_bSSColIdx][0]);
    vSetTcPal(WB_SS, 2, BLEND_3, _pwSSCol[_bSSColIdx][1]);
    vSetTcPal(WB_SS, 3, BLEND_3, _pwSSCol[_bSSColIdx][2]);
    _bSSColIdx++;
    if (_bSSColIdx >= SS_MAX_COL)
    {
      _bSSColIdx = 0;
    }
  #else // no use true color
    #ifdef SS_NO_LIGHT_COL
    vSetPal(WB_SS, 1, BLEND_3, _pbSSCol[_bSSColIdx++]);
    if (_bSSColIdx >= SS_MAX_COL)
    {
      _bSSColIdx = 0;
    }
    #else // use all color
    vSetPal(WB_SS, 1, BLEND_3, bSharedInfo(SH_SCR_COL_CNT));
    vSetSharedInfo(SH_SCR_COL_CNT, bSharedInfo(SH_SCR_COL_CNT) + 13);
    if (bSharedInfo(SH_SCR_COL_CNT) == 0)
    {
       vSetSharedInfo(SH_SCR_COL_CNT, 1);
    }
    #endif // end SS_NO_LIGHT_COL
  #endif // end ALL_WB_USE_TRUECOLOR
#endif // end SS_FADE_INOUT
  }

  if (bSharedInfo(SI_OSD_CMD_BUF_FULL) == TRUE)
  {
    return;
  }

  if (_bSSCount & X_PLUS)
  {
    _wStartX += MOVE_PER_STATE;
  }
  else
  {
    _wStartX -= MOVE_PER_STATE;
  }

  if (_bSSCount & Y_PLUS)
  {
    _wStartY += MOVE_PER_STATE;
  }
  else
  {
    _wStartY -= MOVE_PER_STATE;
  }

#ifdef SS_FADE_INOUT
  if ((rSsMix.bMixRat == 0) && (rSsMix.bMixCnt == 0))
#endif
  {
    vWBChgPos(WB_SS);
#ifdef SS_FADE_INOUT
  #ifdef ALL_WB_USE_TRUECOLOR
    vSetTcPal(WB_SS, 1, BLEND_2, _pwSSCol[_bSSColIdx][0]);
    vSetTcPal(WB_SS, 2, BLEND_2, _pwSSCol[_bSSColIdx][1]);
    vSetTcPal(WB_SS, 3, BLEND_2, _pwSSCol[_bSSColIdx][2]);
    _bSSColIdx++;
    if (_bSSColIdx >= SS_MAX_COL)
    {
      _bSSColIdx = 0;
    }
  #else // not true color
    #ifdef SS_NO_LIGHT_COL
    vSetPal(WB_SS, 1, BLEND_1, _pbSSCol[_bSSColIdx]);
    vSetPal(WB_SS, 2, BLEND_2, _pbSSCol[_bSSColIdx++]);
    if (_bSSColIdx >= SS_MAX_COL)
    {
      _bSSColIdx = 0;
    }
    #else // use all color available
    vSetPal(WB_SS, 1, BLEND_1, bSharedInfo(SH_SCR_COL_CNT));
    vSetPal(WB_SS, 2, BLEND_2, bSharedInfo(SH_SCR_COL_CNT));
    #endif // end SS_NO_LIGHT_COL
  #endif // end ALL_WB_USE_TRUECOLOR
#endif // end SS_FADE_INOUT
  }

  #ifdef SS_FADE_INOUT
  if (rSsMix.bMixCnt++ == 0)
  {
    bSSCount = bSharedInfo(SH_SS_COUNT);
    bSSCount++;
    vSetSharedInfo(SH_SS_COUNT, bSSCount);

    if ((bSSCount & 0x01) == 0x01)
    {
      if (bSSCount & 0x80)
      {
        rSsMix.bMixRat++;
        vSetWBMixRatio(WB_SS, rSsMix.bMixRat);
      }
      else
      {
        rSsMix.bMixRat --;
        vSetWBMixRatio(WB_SS, rSsMix.bMixRat);
      }

      if (rSsMix.bMixRat == 15)
      {
        //start fade in
        _bSSDelay = 0xFF;
        vSetSharedInfo(SH_SS_COUNT, 0x00);
      }
      else if (rSsMix.bMixRat == 0)
      {
        //start fade out
        _bSSDelay = 0xFF;
        vSetSharedInfo(SH_SS_COUNT, 0x80);
#ifdef ALL_WB_USE_TRUECOLOR
        vSetTcPal(WB_SS, 1, BLEND_2, TRUECOLOR_BLACK);
        vSetTcPal(WB_SS, 2, BLEND_2, TRUECOLOR_BLACK);
        vSetTcPal(WB_SS, 3, BLEND_2, TRUECOLOR_BLACK);
#else
        vSetPal(WB_SS, 1, BLEND_1, 0);
        vSetPal(WB_SS, 2, BLEND_2, 0);
#endif
      }
    }
  }
  #endif
}

void vBmpScrSaveState(void) large
{
  // send 3 move command to RISC per state
  // the move command will be execute every V-sync
  // In PAL, call this state 16 hz
  // In NTSC, call this state 20 hz

  if (_bSSColIdx > 0x80)
  {
    _bSSColIdx--;
    if (_bSSColIdx == 0x80)
    {
      _bSSColIdx = 0;
    }
  }
  else
  {
    vBmpScrSaveMove();
    vBmpScrSaveMove();
    vBmpScrSaveMove();
    vBmpScrSaveMove();
  }
}

#else  // SS_BMP

code WORD _pwSSCol[1] = { 0 };

#endif /* SS_BMP */

⌨️ 快捷键说明

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