📄 ssbmp.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 + -