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

📄 safe.c

📁 Sunplus 8202S source code.
💻 C
📖 第 1 页 / 共 3 页
字号:
#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(&region[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(&region[0], 0, 0, NULL, OSD_FORMAT_4COLOR, OSD_INTERLACED);
//  osd_create_region1(&region[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 + -