📄 safe.c
字号:
#else
#define PAL4_ORIGIN __palette4F(0xa2, 0x2c, 0x8e, 0xff)
#define PAL4_WHITE __palette4F(0xff, 0x80, 0x80, 0xff)
#define PAL4_LGREEN __palette4F(177, 141, 73, 0xff)
#define PAL4_PURPEL __palette4F(136, 165, 182, 0xff)
#define PAL4_BLUE __palette4F(107, 187, 115, 0xff)
#endif
int *safeVar;
BYTE *gpImgAddr;
#define nSaverLocX (safeVar[0])
#define nSaverLocY (safeVar[1])
#define nSaverW (safeVar[2])
#define nSaverH (safeVar[3])
#define nSaverOffsetX (safeVar[4])
#define nSaverOffsetY (safeVar[5])
#define nSaverColor (safeVar[6])
#define SAFEMAXVAR (7)
void SetMovePointer(UINT8 reg,UINT16 reg_x,UINT16 reg_y)
{
UINT16* pOSDHeader1 = (UINT16*)(get_osdbuf_baseptr() + region[reg].osd_header[0] * 32);
UINT16* pOSDHeader2 = (UINT16*)(get_osdbuf_baseptr() + region[reg].osd_header[1] * 32);
wbe16(pOSDHeader1 + 4, reg_y);
wbe16(pOSDHeader2 + 4, reg_y);
wbe16(pOSDHeader1 + 5, reg_x);
wbe16(pOSDHeader2 + 5, reg_x);
// printf("pHeader1Row = %x\n", pHeader1Row);
// printf("val = %x\n", *pHeader1Row);
}
void MovePointer()
{
UINT16 nCol, nRow;
nRow = nSaverLocY & 0x3ff; // Row
nCol = nSaverLocX & 0x3ff;
SetMovePointer(0,nCol,nRow);
// printf("pHeader1Row = %x\n", pHeader1Row);
// printf("val = %x\n", *pHeader1Row);
}
#ifdef REALCOLOR_SCREENSAVER
void InitOsdScreenSaver(void)
{
// force display off
while (!((osd0_state == 1) || (osd0_state == 0)))
DispPolling(1);
disable_video();
DISABLE_OSD();
safeVar = (int*)(SDRAM_BASE + (TEMPYA * 1024));
// setup first free address
//osd_free = addr_vxvy(0,0);
// get saver size
nSaverW = OSD_SAVER_W;
nSaverH = OSD_SAVER_H;
if ((nSaverW % 16) != 0)
nSaverW = (nSaverW / 16 + 1) * 16;
if ((nSaverW % 2) != 0)
nSaverH += 1;
// reset saver offset
nSaverOffsetX = 1;
nSaverOffsetY = 1;
nSaverLocX = 2;
nSaverLocY = 2;
nSaverColor = 0;
osd__pal[4] = palette_256color_sreensaver[nSaverColor];//jhuang 2004/8/2
osd_init_screensaver();
// osd_create_region1(®ion[0], 0, 0, NULL, OSD_FORMAT_4COLOR, OSD_NONINTERLACED);
osd_draw_256color_bmp(0, 0, (BYTE*)realcolor_saver,0);
//SetOsdCol(0, 0, 0,0x000000ff);//black color
#ifdef COLORFUL_SCREENSAVER //xulf0722
ColorDisplay();
#endif
#if (defined(DVB_SETUP)&&!defined(SUPPORT_DVD_OSD)&&defined(OSD_SCREEN_SAVER)) //xsyan add
enable_osd_saver();
#else
ENABLE_OSD();
#endif
}
void DisplayScreenSaver(void)
{
//change X, Y-axes position
GetNewSaverLoc();
#ifndef REALCOLOR_QSI //liulifeng add 2004-7-12 13:00
delay_1ms(8);
#endif
//move start pointer
MovePointer();
#ifdef SAFE_AUTO_POWEROFF
{
unsigned rtc,diff; // zhangyu ,3-10-2 10:40
rtc = get_rtc_val();
diff=rtc-save_srn_start_t;
if (diff > SAFE_POWEROFF_WAIT_TIME) ircmd_power();
}
#endif
}
#ifdef REALCOLOR_QSI //liulifeng add 2004-7-12 13:00
//extern const UINT32 *osd__pal[];//jhuang move top 2004/8/2
//extern const UINT32 palette_256color_sreensaver[5][256];//jhuang move top
//const BYTE change_realcolor=0;
void ChangeColor_256real ( void )
{
int id;
nSaverColor++;
if (nSaverColor >= 5)
nSaverColor = 0;
osd__pal[4] = palette_256color_sreensaver[nSaverColor];
for ( id = 0 ;id < 256 ; id++) SetOsdCol ( 0 , 0 , id , osd__pal[4][id] );
//osd_init_screensaver();
//delay_1ms(13);
delay_1ms(18);//jhuang 2004/8/2
osd_draw_256color_bmp(0, 0, (BYTE*)realcolor_saver[nSaverColor],0);
}
#endif
void GetNewSaverLoc()
{
//change X-axes position
if (nSaverOffsetX > 0)
{
if ((nSaverLocX + nSaverW / 2 + nSaverOffsetX) > (720 / 2 - 1))
{
nSaverOffsetX *= (-1);
#ifdef REALCOLOR_QSI //liulifeng add 2004-7-12 13:00
ChangeColor_256real ();
//change_realcolor=1;
#endif
}
nSaverLocX += nSaverOffsetX;
}
else
{
if ((nSaverLocX + nSaverOffsetX) < 1)
{
nSaverOffsetX *= (-1);
#ifdef REALCOLOR_QSI //liulifeng add 2004-7-12 13:00
ChangeColor_256real ();
//change_realcolor=1;
#endif
}
nSaverLocX += nSaverOffsetX;
}
//change Y-axes position
if (nSaverOffsetY > 0)
{
UINT32 ySize;
if ( getVPP_TVsystem()==1) { //Jeff 20030827
ySize = 576;
} else {
ySize = 480;
}
if (p_scan == 0)
{
if ((nSaverLocY + nSaverH / 2 + nSaverOffsetY) > (ySize / 2 - 1))
{
nSaverOffsetY *= (-1);
#ifdef REALCOLOR_QSI //liulifeng add 2004-7-12 13:00
ChangeColor_256real ();
//change_realcolor=1;
#endif
}
}
else
{
if ((nSaverLocY + nSaverH + nSaverOffsetY) > (ySize - 1))
{
nSaverOffsetY *= (-1);
#ifdef REALCOLOR_QSI //liulifeng add 2004-7-12 13:00
ChangeColor_256real ();
//change_realcolor=1;
#endif
}
}
nSaverLocY += nSaverOffsetY;
}
else
{
if ((nSaverLocY + nSaverOffsetY) < 1)
{
nSaverOffsetY *= (-1);
#ifdef REALCOLOR_QSI //liulifeng add 2004-7-12 13:00
ChangeColor_256real ();
//change_realcolor=1;
#endif
}
nSaverLocY += nSaverOffsetY;
}
}
#else
void DecompressOSDPic()
{
safeVar = (int*)(SDRAM_BASE + (TEMPYA * 1024));
gpImgAddr = (BYTE*)(SDRAM_BASE + (TEMPYA * 1024) + SAFEMAXVAR *4 );
#ifndef NO_SHOW_PIC_SAVER//lizhx 20040505
dsp3_decompress((const BYTE *)romimg_OSDSaver, gpImgAddr);
#endif
}
void InitOsdScreenSaver(void)
{
// force display off
while (!((osd0_state == 1) || (osd0_state == 0)))
DispPolling(1);
disable_video();
DISABLE_OSD();
// setup first free address
osd_free = addr_vxvy(0,0);
DecompressOSDPic();
// get saver size
nSaverW = OSD_SAVER_W;
nSaverH = OSD_SAVER_H;
if ((nSaverW % 16) != 0)
nSaverW = (nSaverW / 16 + 1) * 16;
if ((nSaverW % 2) != 0)
nSaverH += 1;
// reset saver offset
nSaverOffsetX = 1;
nSaverOffsetY = 1;
nSaverLocX = 2;
nSaverLocY = 2;
nSaverColor = 0;
region[0].osd_w = nSaverW * 2 / 8; // bytes
region[0].osd_h = nSaverH;
#ifdef SCREENSAVER_ZOOM_IN_2
header_id = NES_HEADER;//NORMAL_HEADER;
#else
header_id = NORMAL_HEADER;
#endif
osd_create_region1(®ion[0], 0, 0, NULL, OSD_FORMAT_4COLOR, OSD_INTERLACED);
// osd_create_region1(®ion[0], 0, 0, NULL, OSD_FORMAT_4COLOR, OSD_NONINTERLACED);
DrawOsdScreenSaver(0, 0);
SetOsdCol(0, 0, 0,0x000000ff);//black color
ColorDisplay();
#if (defined(DVB_SETUP)&&!defined(SUPPORT_DVD_OSD)&&defined(OSD_SCREEN_SAVER)) //xsyan add
enable_osd_saver();
#else
ENABLE_OSD();
#endif
}
void DisplayScreenSaver(void)
{
//change X, Y-axes position
GetNewSaverLoc();
//move start pointer
MovePointer();
#ifdef SAFE_AUTO_POWEROFF
{
unsigned rtc,diff; // zhangyu ,3-10-2 10:40
rtc = get_rtc_val();
diff=rtc-save_srn_start_t;
if (diff > SAFE_POWEROFF_WAIT_TIME) ircmd_power();
}
#endif
}
void GetNewSaverLoc()
{
//change X-axes position
if (nSaverOffsetX > 0)
{
if ((nSaverLocX + nSaverW / 2 + nSaverOffsetX) > (720 / 2 - 1))
{
nSaverOffsetX *= (-1);
ChangeColorTable();
}
nSaverLocX += nSaverOffsetX;
#ifdef NO_SHOW_PIC_SAVER//lizhx 20040505
PrintOsdMsg(STR_OS_DVD, REGION0, 1,0);
#endif
}
else
{
if ((nSaverLocX + nSaverOffsetX) < 1)
{
nSaverOffsetX *= (-1);
ChangeColorTable();
}
nSaverLocX += nSaverOffsetX;
#ifdef NO_SHOW_PIC_SAVER//lizhx 20040505
PrintOsdMsg(STR_OS_DVD, REGION0, 1,0);
#endif
}
//change Y-axes position
if (nSaverOffsetY > 0)
{
INT32 ySize;
if ( getVPP_TVsystem()==1) { //Jeff 20030827
ySize = 576;
} else {
ySize = 480;
}
if (p_scan == 0)
{
if ((nSaverLocY + nSaverH / 2 + nSaverOffsetY) > (ySize / 2 - 1))
{
nSaverOffsetY *= (-1);
ChangeColorTable();
}
}
else
{
if ((nSaverLocY + nSaverH + nSaverOffsetY) > (ySize - 1))
{
nSaverOffsetY *= (-1);
ChangeColorTable();
}
}
nSaverLocY += nSaverOffsetY;
#ifdef NO_SHOW_PIC_SAVER//lizhx 20040505
PrintOsdMsg(STR_OS_DVD, REGION0, 1,0);
#endif
}
else
{
if ((nSaverLocY + nSaverOffsetY) < 1)
{
nSaverOffsetY *= (-1);
ChangeColorTable();
}
nSaverLocY += nSaverOffsetY;
#ifdef NO_SHOW_PIC_SAVER//lizhx 20040505
PrintOsdMsg(STR_OS_DVD, REGION0, 1,0);
#endif
}
}
#endif
void ExitOsdScreenSaver(void)
{
enable_video();
#ifdef DYNAMIC_SPECTRUM
if(bEqDisplay)
Show3dspectrum();
else
#endif
osd_init();
#ifndef SDRAM_16Mb_Mode//nono 2004-5-12 20:50 to avoid the bug when exit saver,show display incorrectly
t_disp = old_t_disp;
if (t_disp != 0)
{
//#ifdef SDRAM_16Mb_Mode
//to avoid the bug when exit saver,show display incorrectly
//zhaoyanhua add 2003-11-14 10:35
// DispPolling(3);
//#else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -