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