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

📄 preview.c

📁 代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
** FILE
** preview.c
**
** DESCRIPTION
** .... pseudo hook for PREVIEW playback
*/

#include "config.h"
#include "global.h"
#include "regmap.h"
#include "macro.h"
#include "hwsetup.h"

#include "cfont.h"
#include "func.h"
#include "util.h"
#include "sio.h"
#include "epp.h"
#include "osd.h"
#include "user_init.h"
#include "stc.h"
#include "osdutil.h"
#if CONFIG == CONFIG_COMBO_VCD
#include "framebuf.h"
#endif

void    SetupDigestBackground(void);

//#define MONE_PREVIEW_NAVIGATION
//MSX to SS
#define   FRAME_TIME    ((M2I(gettrkmsf(cd_trk_now+1)&0x00ffffff)-M2I(gettrkmsf(cd_trk_now)&0x00ffffff) )/9)    //copy from bbk702
#define   LAST_FRAME_TIME    ((M2I(gettrkmsf_leadout()&0x00ffffff)-M2I(gettrkmsf(cd_trk_hi)&0x00ffffff) )/9)    //copy from bbk702

/*
** XY locations of small preview windows
*/
static const UINT16 xxx[9] = {
    32 + 4, 132, 232 - 4,
    32 + 4, 132, 232 - 4,
    32 + 4, 132, 232 - 4,
};

static const UINT16 yyy[9] = {
    0 + 3 + 6, 0 + 3 + 6, 0 + 3 + 6,
    0 + 72 + 3, 0 + 72 + 3, 0 + 72 + 3,
    0 + 72 + 3 + 72 - 6, 0 + 72 + 3 + 72 - 6, 0 + 72 + 3 + 72 - 6,
};

#if 0
static const UINT16 yyy_pal[9] = {
    0 + 3, 0 + 3, 0 + 3,
    0 + 72 + 3 + 12, 0 + 72 + 3 + 12, 0 + 72 + 3 + 12,
    0 + 72 + 3 + 12 + 12 + 72, 0 + 72 + 3 + 12 + 12 + 72,
    0 + 72 + 3 + 12 + 12 + 72,
};
#endif

static const UINT16 sdram_xxx[9] = {
    32 + 16, 172 + 4, 312 - 8,
    32 + 16, 172 + 4, 312 - 8,
    32 + 16, 172 + 4, 312 - 8,
};

static const UINT16 sdram_yyy[9] = {
    0 + 20 + 15, 0 + 20 + 15, 0 + 20 + 15,
    0 + 144 + 40 - 20 + 3, 0 + 144 + 40 - 20 + 3, 0 + 144 + 40 - 20 + 3,
    0 + 144 + 60 + 144 - 20 - 20 - 9, 0 + 144 + 60 + 144 - 20 - 20 - 9,
    0 + 144 + 60 + 144 - 20 - 20 - 9
};


//#define   PREVIEW_TIME_FIRST  15
//#define   PREVIEW_TIME        15
#define MSF_PREVIEW_INIT    ((UINT32)(-1))
/*
**
**
*/
int preview_navigation(void)
{
#ifdef IR_PREVIEW_ON

    BYTE    done;
    BYTE    i, n;
    BYTE    first;
    UINT32  msf_saved[9];

#ifdef  MONE_PREVIEW_NAVIGATION
    epp_write_slow("PREVIEW navigation\n");
#endif

    base_track = cd_trk_lo_now;     //jhuang 2002/4/2 move to global.h
    SelectReady = C_FALSE;              //global var.

    done = 0;
    first = 1;
    //t_disp = ON;//jhuang 2002/4/27 must turn off in preview/9frame
    OSD_OnOffRegion(OSD_OFF, REGION0);
    OSD_OnOffRegion(OSD_OFF, REGION1);
    osd_init_preview();
    
    ///#if CONFIG == CONFIG_COMBO_SVCD
    ///if(cd_type_loaded == CDSVCD)
    ///    reset_servo_cdpt = 1;
    ///#endif    

    do
    {
    preview_start:

        n = 0;
        preview_id = 0;                         //jhuang 2-6-16

        ClearCommand();

        //for (n=0; n<9 && !done; n++)
        while(!done && n < 9)
        {
            /*wyf 2002/4/27 */
            //psprintf(RegionValStr[5], Ch2_ye4 ":%d/%d", base_track + n - 1,
            //               cd_total_trk());
            

            if(first)
            {
                //n=0;

                if(!IsAVDPreview())
                    DisplayPreviewBackground();
                else
                    SetupDigestBackground();

#if CONFIG == CONFIG_COMBO_VCD
                WAIT_VSYNC;
                enable_video();
#endif
                for(i = 0; i < 9; i++)
                    msf_saved[i] = gettrkmsf(base_track + n);   //MSF_PREVIEW_INIT;

                first = 0;
            }

            cd_trk_now = base_track + n;

            if(cd_trk_now > cd_trk_hi)  //jhuang 2002/3/8
            {
                cd_trk_now = base_track;
                n = 0;
                SelectReady = C_TRUE;
                continue;
            }

            /*
             ** setup framebuffer copy location
             */
#if CONFIG==CONFIG_COMBO_SVCD
            if((cd_type_loaded == CDSVCD)||(vcd_b_pic_move_right==1))
#ifdef NINTAUS
        if (vcd_b_pic_move_right==1)
                    PlayTrackPreview(xxx[n], yyy[n] + (IsAVDDisplayNTSC()? 6 : 18), cd_trk_now);
        else
                PlayTrackPreview(sdram_xxx[n], sdram_yyy[n] + (IsAVDDisplayNTSC()? 6 : 18), cd_trk_now);
#else
        if (vcd_b_pic_move_right==1)
                    PlayTrackPreview(xxx[n], yyy[n] + (IsAVDDisplayNTSC()? 6 + (n / 3 + 4) * 1 : 18), cd_trk_now); //wyf fixed SVCD disc NTSC 9frame osd bug 2-8-20 19:24.
        else
                PlayTrackPreview(sdram_xxx[n], sdram_yyy[n] + (IsAVDDisplayNTSC()? 6 + (n / 3 + 1) * 30 : 18), cd_trk_now); //wyf fixed SVCD disc NTSC 9frame osd bug 2-8-20 19:24.
#endif
            else
                PlayTrackPreview(xxx[n], yyy[n] + (IsAVDDisplayNTSC()? 12 : 18), cd_trk_now);
#else
            PlayTrackPreview(xxx[n], yyy[n] + (IsAVDDisplayNTSC()? 12 : 18), cd_trk_now);
#endif

            if(SelectReady == C_FALSE)
            {
                timeout_playback = (100 * PREVIEW_TIME_FIRST) / 16; //init 15 sec,revise
                PicStart = 1;                       //for play first picture
            }
            else
            {
                PicStart = 0;                       //set to none sense

                //timeout_playback = 0;
                if(v11_trk_now < cd_trk_hi)
                    timeout_playback = (100 * (FRAME_TIME * 9) + 15) / 16;  //init  sec,revise
                else
                    timeout_playback = (100 * (LAST_FRAME_TIME * 9) + 15) / 16; //init  sec,revise
            }

/*show trk here*/
            preview_osd(n);                     
            if(osd_font_mode)
                psprintf(RegionValStr[5], OS_PAGE":%d/%d", cd_trk_now-1 ,
                             cd_total_trk());
            else                 
                psprintf(RegionValStr[5],"p:%d/%d", cd_trk_now-1 ,
                             cd_total_trk());
            PrintOsdMsg(STR_OS_NULL, REGION5, 0, 1, CH_P);  

            MediaMainLoop();

            /*
             ** save status
             */
            //msf_saved[n] = s_msf ;//jhuang mark

            if((GetCmdType(sys_cmd)) == CMD_FUNC)
            {
                switch (GetCmdSrc(sys_cmd))
                {
                    case CMD_FUNC_STOP:
                        remkey_timer = T1SECOND; //ZHX 080703 clear OSD
                        done = 4;                       //exit now
                        break;

                    case CMD_FUNC_OPEN:
#ifdef POWER_KEY      
                   case CMD_FUNC_POWER:
#endif                        
                        done = 4;                       //charles 0402
                        break;

                    case CMD_FUNC_9FRAMES:
                    case CMD_FUNC_PREVIEW:
                    case CMD_FUNC_PLAY:
                        //UISetNMNorm();//move to end
                        done = 2;
                        break;

                    case CMD_FUNC_NEXT:
                        if(base_track < cd_trk_hi)
                        {
                            base_track = (base_track) + 9;
                            first = 1;
                            SelectReady = C_FALSE;

                            goto preview_start;
                        }
                        break;

                    case CMD_FUNC_PREV:
                        if(base_track >= cd_trk_lo_now)
                        {
                            base_track = base_track - 9;
                            if(base_track < cd_trk_lo_now)
                            {
                                base_track = cd_trk_lo_now;
                            }

                            first = 1;
                            SelectReady = C_FALSE;

                            goto preview_start;
                        }
                        break;

                    case CMD_FUNC_TIMEOUT:  //P
                        if(GetIntrFlag() & INTR_TIMEOUT)
                        {
                            n++;

                            if(n == 9)
                            {
                                SelectReady = C_TRUE;
                            }

                            if(n > 9)
                            {
                                n = 0;
                            }
                        }
                        break;
                }
            }
            else if((GetCmdType(sys_cmd)) == CMD_IR_SELECT)
            {
                SelectReady = C_TRUE;
                n = GetCmdSrc(sys_cmd) - 1;
#ifdef DIRECT_PLAY_9FRM
                cd_trk_now = GetCmdSrc(sys_cmd);
                done=3;//select & exit;
                break;
#endif                
            }
        }                                                       //while(!done&&n<9)
    } while(!done);

    UISetNMNorm();//charles 2002/12/9 move here
    osd_init();

    switch (done)
    {
        case 3:
            psprintf(RegionValStr[REGION1], " %d", GetCmdSrc(sys_cmd));
            PrintOsdMsg(STR_OS_SELECT, REGION1, 1, 1, CH_N);
            break;

        case 2:
            //PrintOsdMsg(STR_OS_BROWSE_CNL,REGION1,1,0,CH_N);

#ifdef NINTAUS
            s_msf = gettrkmsf(base_track + n);  //jack
#endif
            PrintOsdMsg(STR_OS_PLAY, REGION1, 1, 0, CH_N);
            remkey_timer = T4SECOND; //ZHX 080703 clear OSD
            break;

        case 1:
            ClearCommand();
            break;

        case 4:
            break;
    }
    //epp_write_slow("exit preview --->\n");

    //UISetNMNorm();//charles 2002/12/9 move up
    ///reset_servo_cdpt = 0;
    SelectReady = C_FALSE;              //global var.
    return 0;

#else
    return 0;
#endif //#ifdef IR_PREVIEW_ON
}

/*
**
**
*/
int frames9_navigation(void)
{
#ifdef IR_PREVIEW_ON                        // 2002.04.16 Matt Wang renamed from IR_9FRAMES_ON
    BYTE    done;
    BYTE    n, i;
    BYTE    first;
    UINT32  msf_saved[9];
    UINT32  msf = 0;


#ifdef  MONE_PREVIEW_NAVIGATION
    epp_write_slow("9 FRAMES navigation\n");
#endif

    base_track = cd_trk_lo_now;     //jhuang 2002/4/2 move to global.h
    SelectReady = C_FALSE;              //global var.

    done = 0;
    first = 1;

    osd_init_preview();
    
    ///#if CONFIG == CONFIG_COMBO_SVCD
    ///if(cd_type_loaded == CDSVCD)
    ///    reset_servo_cdpt = 1;
    ///#endif    

    //t_disp = ON;//jhuang 2002/4/27 must turn off in preview/9frame

    do
    {
    frame_start:
        n = 0;
        preview_id = 0;                         //jhuang 2-6-16

        ClearCommand();


        while(!done && n < 9)               //for (n=0; n<9 && !done; n++)
        {
            /*wyf 2002/4/27 */
            //psprintf(RegionValStr[5], Ch2_ye4 ":%d/%d", cd_trk_now - 1,
            //               cd_total_trk());
            if(osd_font_mode)
                psprintf(RegionValStr[5], OS_PAGE":%d/%d", cd_trk_now - 1,
                             cd_total_trk());
            else                 
                psprintf(RegionValStr[5],"p:%d/%d", cd_trk_now - 1,
                             cd_total_trk());                                       
            
            PrintOsdMsg(STR_OS_NULL, REGION5, 0, 1, CH_P);  //wyf 2-4-24 12:21.

            if(first)
            {

                msf = gettrkmsf(cd_trk_now);

                if(!IsAVDPreview())
                    DisplayPreviewBackground();
                else
                    SetupDigestBackground();

#if CONFIG == CONFIG_COMBO_VCD
                WAIT_VSYNC;
                enable_video();
#endif

                for(i = 0; i < 9; i++)
                {
                    //if(v11_trk_now < cd_trk_hi)
                    if(cd_trk_now < cd_trk_hi)  //jhuang 2002/9/16
                        msf_saved[i] = addmsf_ss(msf, FRAME_TIME * i);
                    else                                    /*last track use special define */

⌨️ 快捷键说明

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