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

📄 v11.c

📁 代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考
💻 C
字号:
/*
** FILE
** v11.c
**
** DESCRIPTION
** .... pseudo hook for 1.1 playback.
*/
#include "config.h"
#include "global.h"
#include "macro.h"
#include "util.h"
#include "func.h"
#include "epp.h"
#include "user_init.h"
#include "vidbits.h"
#include "avd.h"
//#include "cfont.h"//no used
#include "ircmd.h"
#include "regmap.h"
#include "auctrl.h"
#include "osd.h"
#include "cdxa.h"
#include "cd.h"
#include "hwsetup.h"
//#define MONE_V11_NAVIGATION
//#define MONE_CMD_FUNC
//#define MONE_IR_SELECT
//#define   MONE_CTRL_FLOW

//in ircmd.c
extern void ircmd_repeat_ab(void);

//in sysmain.c
extern void ShowTitle(void);

//in svcd.c
extern int chk_played(int);

//in mpegsys.c
extern void resync_video_engine(void);

//in cdfunc.h
extern int cd_func_stop(void);

/*
** Disable repeat ab
*/
void ClearRepAB(void)
{

    if(rep_ab_mode == REPEAT_FIND_B)
    {
        if(sys_cmd != (CMD_FUNC | CMD_FUNC_REPAB))
        {
            ircmd_repeat_ab();
        }
    }
    else if(rep_ab_mode == REPEAT_FIND_A)   //rep A and go across next trk will cancel rep ab
    {                                                           //set rep b and call rep ab to to cancel rep ab 
        repEnd=s_msf;                       //rbhung 2002.12.05 for clear repeat A-B when track end. 
        rep_ab_mode = REPEAT_FIND_B;
        ircmd_repeat_ab();
    }
#ifdef IR_FDFC_THREE_OPMODE
    else if(!IsFDFC_STOP())
    {
        UISetFDFC_STOP();
        PrintOsdMsg(STR_OS_NULL, REGION1, 1, 0, CH_N);
        PrintOsdMsg(STR_OS_NULL, REGION2, 1, 0, CH_N);
        AVAPI_control(C_WRITE, AVAPI_FDFC_STOP, 0); //jhuang add 2002/10/14
       
}
#endif
}

/*  
** Parsing GOTO msf is valid
*/
void GotoParser(void)
{
#ifdef NAV_BITS_DIFF
    sys_cmd = 0;
    goto_active = GOTO_PROCEED;
    return;
#endif
    ClearCommand();
    if(cd_type_loaded != CDDA)
    {
        if(!chk_played(cd_trk_now))
        {
            //epp_write("enter chk_played ..\n");
            UISetRepABMode(REPEAT_FIND_B);
            repStart = gettrkmsf(cd_trk_now) & 0x00ffffff;;
            repEnd = addmsf_ss(repStart, 5);

            FirstPlay = 0xf0;
            PlayTrack(cd_trk_now);
            MediaMainLoop();

            UISetRepABMode(REPEAT_AB_IDLE);
            repEnd = 0;
            repStart = 0;
            //goto_active=GOTO_PROCEED;   //move to parent 
        }
    }
}

/*
**Revise presentation error after GotoPlay
**GetTrkInfoByMSF
**Terry, 890915
*/
void RevTrkInfoByMSF(UINT32 msf)
{
    UINT32  min, max;
    int     i;

    max = gettrkmsf(cd_trk_lo) & 0x00FFFFFF;
    for(i = cd_trk_lo; i < cd_trk_hi; i++)
    {
        min = max;
        max = gettrkmsf(i + 1) & 0x00FFFFFF;
        if((min <= msf) && (msf < max))
        {
            cd_trk_now = i;
            //if(CheckUIRep(REPEAT_TRACK))//disable jhuang pbc off table
            // rep_track=cd_trk_now; 
            return;
        }
        //psprintf(linebuf,"i:%d x:%08x,n:%08x,m:%08x\n",i,max,min,msf);
        //epp_write_slow(linebuf);
    }
    if((max < msf) && (msf <= (gettrkmsf_leadout())))
    {
        cd_trk_now = cd_trk_hi;
        return;
    }
}

/*
**
**
*/
void v11_navigation(void)
{
    int     done;

    //int first;
    UINT32  msf;

#ifdef  MONE_V11_NAVIGATION
    epp_write_slow("V11 navigation\n");
#endif

ircmd_callback_check = NULL;//jhuang 2002/11/30 for 702 gamedisc eject->vcd ir select

//#ifdef START_UP_PBC_ON  //0108
    if(bPbcOff == C_TRUE)                   //jhuang set power on default
    {
        //printf("pbc off v11 enter\n");
        //v11_trk_now=cd_trk_now;
        msf = gettrkmsf(cd_trk_now);    // just for initialization
        //first =0;
    }
    else
//#endif

    {
        //v11_trk_now = cd_trk_lo_now;
        //msf = gettrkmsf(v11_trk_now);     // just for initialization
        cd_trk_now = cd_trk_lo_now;
        msf = gettrkmsf(cd_trk_now);

        //first =1;
    }


    done = 0;

    do
    {
        //if(first)
        // {
        //    first = 0;
        // }   

//#ifdef START_UP_PBC_ON     //0108
        if(bPbcOff == C_FALSE)          //if(!bPbcOff)//jhuang 2002/2/5 11:35AM
//#endif
            ClearCommand();
        v11_trk_now = cd_trk_now;
#ifdef MONE_IR_SELECT
        psprintf(linebuf,
                         "V11 TRK-->cd_trk_now:%x cd_trk_lo_now:%x cd_trk_hi:%x\n",
                         cd_trk_now, cd_trk_lo_now, cd_trk_hi);
        epp_write_slow(linebuf);
        //?reset_audio(DRAM_VCD_MODE);
#endif

        #ifdef DIRECT_PLAY_9FRM  //huziqin 2003-4-7 9:23
        if(cd_type_loaded != CDDA) {
            if((cd_trk_now < cd_trk_lo_now)&&(cd_trk_now==1))
            cd_trk_now=2;
        }    
        #endif

        if((cd_trk_now < cd_trk_lo_now) || (cd_trk_now > cd_trk_hi))
        {
            if(CheckUIRep(REPEAT_DISC))
            {
                if(cd_trk_now < cd_trk_lo_now)
                {
                    cd_trk_now = cd_trk_hi;
                    v11_trk_now = cd_trk_now;   //charles 2002/7/5 solve to repeat first track when repeat_disc 
                }
                else
                {
                    cd_trk_now = cd_trk_lo_now;
                    v11_trk_now = cd_trk_now;   //charles 2002/7/5 solve to repeat first track when repeat_disc
                }
                msf = gettrkmsf(cd_trk_now);
                PrintOsdMsg(STR_OS_REP_ALL, REGION1, 1, 0, CH_N);//panchn 2002/12/2
            }
            else
            {
                //ClearSystem();
                //UISetState(VCD_STATE_STOP);
                //epp_write("stop ...\n");
                if(!CheckUIState(VCD_STATE_STOP))
                    ircmd_stop();
                //something about Stop initialization
                //?done =1;
                //break;
            }
        }

#ifdef  MONE_V11_NAVIGATION
        psprintf(linebuf, "V11: playback track %d %d\n", v11_trk_now, cd_trk_now);
        epp_write_slow(linebuf);
#endif

#ifdef SUPPORT_MIXED_MODE_DISC  //JJDing
        // protected data-trk in CD-DA (w/CD-Xtra) 
        if(cd_type_loaded == CDDA)
        {
            //We assume that the data track is only in TRACK 1
            if((gettrkcna(cd_trk_now) & CNA_MASK_TYPE) == CNA_DATA)
                msf = gettrkmsf(++cd_trk_now);  //skip to next track
        }
#endif

//#ifdef START_UP_PBC_ON
        if(bPbcOff == C_FALSE)          //if(!bPbcOff)//jhuang 2002/2/5 11:36AM
//#endif
        {
            if(CheckUIState(VCD_STATE_STOP))
            {
                ShowTitle();                        //charles 2002/4/22 for stop -> no logo problem
                while(!(GetIntrFlag() & INTR_IRKEY))
                {
                    if((cd_type_loaded!=CDSVCD)&&(cd_type_loaded!=CDDA))//some DISC "PLAY--(some time)-->>STOP --->>(RESUME)(GOTO)(PROG)(SELECT) --->>REC MIC"
                        change_disc = 1;                                    //so must reset VCD config LORES.wangbin2003-07-07
                    polling_ir();                   //charles 2002/7/9 for solving CDDA resume problem when CDDA plays after JPEG
                    polling();
                     
                   #ifdef  SUPPORT_SCREEN_SAFE
                    enter_screensafe();
                   #endif 
                }
            }
            else
            {
                //?reset_audio(DRAM_VCD_MODE);
                PlayMSF(msf);

                //psprintf(linebuf,"sys=%x\n",GetCmdSrc(sys_cmd));
                //epp_write_wait(linebuf);

#ifdef IR_FDFC_ON

                if((!IsFDFC_STOP()) && (!IsFDFC_FUCHANG()))
                    Revise_FD();

                if((!IsFDFC_STOP()) && (IsFDFC_FUCHANG()))
                    Revise_FC();

#endif //#ifdef IR_FDFC_ON

                get_cdkit_time(MSF_TRK_CHANGED);
                MediaMainLoop();

                /*normal place to clear goto_time */
                if((GetCmdSrc(sys_cmd)) != CMD_FUNC_GOTO)
                    goto_time = 0;

#ifdef IR_FDFC_THREE_OPMODE
                if(!IsFDFC_STOP() || ((rep_ab_mode == REPEAT_FIND_B) && (GetCmdSrc(sys_cmd) == CMD_FUNC_PREVIEW))
                            || ((cd_type_loaded==CDDA)&&(rep_ab_mode!=REPEAT_AB_IDLE)) )   //jhuang 2002/10/8 modify ClearRepAB
#endif
                    ClearRepAB();
            }
        }
        //#ifdef START_UP_PBC_ON
        bPbcOff = C_FALSE;
        //#endif


    cmd_parser:
        //epp_write("cmd_paser ...\n");
        if((GetCmdType(sys_cmd)) == CMD_IR_SELECT)
        {
            int     x = GetCmdSrc(sys_cmd);

#ifdef MONE_IR_SELECT
            psprintf(linebuf, "X:%d cd_trk_hi:%d\n", x, cd_trk_hi);
            epp_write_slow(linebuf);
#endif
            //JJDing remarked. 2002/07/02
            //if(cd_type_loaded!=CDDA)
            x += cd_trk_lo_now - 1;


            if((x <= cd_trk_hi) && (x >= cd_trk_lo_now))
            {
                cd_trk_now = x;
                //?if(CheckUIRep(REPEAT_TRACK))
                //?  rep_track = cd_trk_now;//v11_trk_now;
                msf = gettrkmsf(cd_trk_now);
            }
            //do it in ircmd.c
            //?if(rep_ab_mode != REPEAT_AB_IDLE)
            //?  rep_ab_mode = REPEAT_AB_IDLE;

            //?if(adv_search_time)
            //?play_state = VCD_STATE_NORMAL; //do it in ircmd.c    
            #ifdef SUPPORT_ESP
            if(shock_state == (SHOCK_ENABLE|SHOCK_FOUND|SHOCK_PROCESS))
              shock_state &= ~(SHOCK_FOUND | SHOCK_PROCESS);
            #endif
        }
        else if((GetCmdType(sys_cmd)) == CMD_FUNC)
        {
#ifdef MONE_CMD_FUNC
            psprintf(linebuf, "[SYSCMD]:%04x [PLAY_STATE]:%04x\n", sys_cmd,
                             play_state);
            epp_write_wait(linebuf);
#endif

            switch (GetCmdSrc(sys_cmd))
            {
                case CMD_FUNC_PLAY:

                    msf = gettrkmsf(cd_trk_now);
                    break;
                case CMD_FUNC_GOTO:

                    #if CONFIG == CONFIG_COMBO_SVCD
                    if(cd_type_loaded == CDSVCD)
                        msf = goto_time << 1;
                    else
                    #endif
                        msf = goto_time;
                    //?Chg2PlayMd();//play_state = VCD_STATE_NORMAL;//Terry, 890914
                    UISetState(VCD_STATE_NORMAL);   //jhuang 2002/3/5 for stop->goto

                    RevTrkInfoByMSF(msf);   //Terry, 890915                            
                    goto_active = GOTO_PROCEED; //1;    //retrive from GotoParser
                    GotoParser();
                    //psprintf(linebuf,"goto sys_cmd:%06x \n",sys_cmd);  
                    //epp_write_slow(linebuf);
                    if(sys_cmd != 0 && sys_cmd != (CMD_FUNC | CMD_FUNC_REPAB))
                        goto cmd_parser;
                    //psprintf(linebuf,"goto_msf:%06x %06x\n",msf,goto_time);  
                    //epp_write_slow(linebuf);
                    break;
                case CMD_FUNC_PRG:
                    /*resume_video_reset = C_TRUE; *///2002/11/5  
                    break;
                case CMD_FUNC_RESUME:   // Must check above timeout

                    goto_active = GOTO_PROCEED;
                    //v11_trk_now = resumeTRK;
                    cd_trk_now = resumeTRK;
                    msf = resumeMSF;
                    RevTrkInfoByMSF(msf);/*磷

⌨️ 快捷键说明

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