📄 vcd_common.c
字号:
#include "Vcd_def.h"
#include "S5h_capability.h"
#if DIGEST_PREVIEW
extern UINT uiDigestPosition;
extern MSF_STRUCT gVcdDigestPos[PREVIEW_NUM];
extern UCHAR8 gVcdDigestIndex;
extern BOOL gDigest_sel_flag;//BOOL gDigest_sel_flag = FALSE;
extern BOOL bVcd_normal_end;//BOOL bVcd_normal_end = FALSE; //maymeng 051028
//UCHAR uDigest_EOP = 0;
#endif
#if Time_Disp_Process
extern ulong ABS_SUB(ulong a, ulong b);
extern BOOL First_Time_Backup;//BOOL First_Time_Backup=TRUE;
#endif
extern BOOL NumKeyPressd;
extern BOOL gbCDDA_QErr ;//just for test
#if _SUPPORT_GAMECD
extern BOOL gIsGameCD;
extern void GCD_RunGame(unsigned int GameNo);
extern unsigned char GCD_CHECK_MAX_NUMERICKEY(unsigned char PageNo);
#endif
extern BOOL bPbcon_playlistNext;//BOOL bPbcon_playlistNext = FALSE;
void Vcd_PbcOff_HandleMsg(VCD_Msg *msg)
{
BOOL PlayFlag= FALSE;
switch(msg->param)
{
case RC_KEY_RECEIVED:
switch( msg->ext1)
{
case UOP_VCD_MENU:
if(gVcdInfo->psd_size != 0)
{
Vcd_ClearStatus();
Vcd_SetState( PBC_PBCON,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
SUB3_NORMAL);
//OsdMsgDsp(DSP_NOTHING);
Vcd_ReadPsd(0);
PlayFlag = TRUE;
#if VCD_NAV_DEBUG
SysPrintf("\n enter PBC ON!");
#endif
}
else
{
Vcd_OsdNotAvail();
return;
}
break;
case UOP_VCD_NEXT:
PlayFlag=Vcd_PbcOff_Next();
if(PlayFlag)
OsdMsgDsp(DSP_NEXT);
break;
case UOP_VCD_PREV:
PlayFlag=Vcd_PbcOff_Prev();
if(PlayFlag)
OsdMsgDsp(DSP_PREV);
break;
case NUMBER_KEY:
if(0 == msg->ext2 )
PlayFlag = FALSE;
else
PlayFlag = Vcd_PbcdOff_NumInput(msg->ext2);
break;
case UOP_VCD_TIME_SEARCH:
PlayFlag = Vcd_PbcOff_Timesearch(/*msg->ext2*/);
break;
case UOP_VCD_REPEAT:
Vcd_HandleRepeat();
break;
#if 0
case UOP_VCD_BOOKMARK:
Vcd_SetState(VCD_STATE_CHGNULL,VCD_STATE_CHGNULL,VCD_TRACK_BOOKMARK);
if(value == A)
gVcdMark[0] = Vcd_GetCurMSF();
else if (value == B)
gVcdMark[1] = Vcd_GetCurMSF();
else if (value == C)
gVcdMark[2] = Vcd_GetCurMSF();
return;
#endif
#if _SUPPORT_PGM_RANDOM
#if 0
case UOP_VCD_ENTER:
if((PBC_PROGRAM == Vcd_GetPBCState()) && (SUB1_PGM_WAITING == Vcd_GetSub1State()))
{
if(gProgram.Pgm_num == 0)
return;
gProgram.Pgm_index = 0;
Vcd_UpdateTrackInfo(gProgram.Pgm_list[0]);
gVcdPlayStart = gVcdTrackInfo.CurrTrack_startMSF;
gVcdPlayEnd = gVcdTrackInfo.CurrTrack_endMSF;
Vcd_play(gVcdPlayStart, gVcdPlayEnd);
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
SUB1_TRACK_NORMAL,
VCD_CHGNULL,
VCD_CHGNULL );
OsdMsgDsp(DSP_ON);
}
else
{
Vcd_OsdNotAvail();
}
break;
#endif
#endif /* _SUPPORT_PGM_RANDOM */
/* 9294 spec */
case UOP_VCD_RETURN:
Vcd_HandleStop();
S5H_FEStop();
break;
default:
break;
}
break;
#if 0
case VCD_PLAY_I_FRAME:
if(gVcdCurrentState.main == VCD_TRICK)
{
//should stop VD, FE
if( gVcdCurrentState.sub >= VCD_TRICK_FF2 && gVcdCurrentState.sub <= VCD_TRICK_FF16)
{
if( MsfToLba(gVcdFfFr.start) + gVcdFfFr.step > MsfToLba(gVcdTrackInfo.LeadOut_MSF))
{
//SendMsg to VCD_navi (END_OF_PLAY);
return;
}
else
gVcdFfFr.start = MsfToLba(gVcdFfFr.start) + gVcdFfFr.step;
}
else if(gVcdCurrentState.sub >= VCD_TRICK_FR2 && gVcdCurrentState.sub <= VCD_TRICK_FR16)
{
if( MsfToLba(gVcdFfFr.start) > MsfToLba(gVcdTrackInfo.Track1_startMSF) + gVcdFfFr.step)
gVcdFfFr.start = MsfToLba(gVcdFfFr.start) - gVcdFfFr.step;
else
{
gVcdFfFr.start = gVcdTrackInfo.Track1_startMSF;
//need set to normal play state
}
}
Vcd_FindTrack(gVcdFfFr.start);
gVcdPlayStart = gVcdFfFr.start;
}
break;
#endif
case END_OF_PLAY:
PlayFlag = Vcd_PbcOff_EndOfPlay_Handle();
break;
default:
break;
}
if(PlayFlag)
Vcd_play(gVcdPlayStart, gVcdPlayEnd);
}
void Vcd_PbcOn_HandleMsg(VCD_Msg* msg)
{
// UCHAR8 number;
BOOL PlayFlag;
// number = 0;
PlayFlag = FALSE;
// gVcd_KeyInput = msg.value;
//***********************************
//This insert for the same action of PlayList and SelectionList
switch(msg->param)
{
case RC_KEY_RECEIVED:
switch( msg->ext1)
{
case UOP_VCD_MENU:
#if VCD_NAV_DEBUG
SysPrintf("\n enter PBC OFF!");
#endif
if(MAIN_SPI == Vcd_GetMainState())
{
//need Update the gVcdTrackInfo
gVcdPlayStart = gVcdTrackInfo.Track1_startMSF;
gVcdPlayEnd = EndMsfCal(1);
Vcd_play(gVcdPlayStart,gVcdPlayEnd);
//PlayFlag = TRUE;
}
Vcd_ClearStatus();
if(MAIN_PAUSE == Vcd_GetMainState())
Vcd_SetState( PBC_NORMAL,
VCD_CHGNULL,
SUB1_TRACK_NORMAL,
SUB2_NORMAL,
SUB3_NORMAL);
else
Vcd_SetState( PBC_NORMAL,
MAIN_PLAY,
SUB1_TRACK_NORMAL,
SUB2_NORMAL,
SUB3_NORMAL);
return;
//wh while pressing numeric key under pbc on& normal play mode, play corresponding trk and change mode to pbc off
//while pressing numeric key under pbc on& SPI mode, play according to psd list
case NUMBER_KEY:
#if 1
if( MAIN_PLAY == Vcd_GetMainState())
{
Vcd_OsdNotAvail();
return;
}
#else
if( MAIN_PLAY == Vcd_GetMainState())
{
if(0 == msg->ext2 )
PlayFlag = FALSE;
else
PlayFlag = Vcd_PbcdOff_NumInput(msg->ext2);
Vcd_SetState( PBC_NORMAL,
VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL);
}
#endif
break;
default:
break;
}
break;
case END_OF_PLAY:
PlayFlag = Vcd_PbcOn_EndOfPlay_Handle();
break;
#if 0
case VCD_PLAY_I_FRAME:
break;
#endif
default:
break;
}
//***********************************
if( *((UCHAR8*)gVcdCurrentList) == PLAY_LIST_HEADER)
{
switch(msg->param)
{
case RC_KEY_RECEIVED:
switch( msg->ext1)
{
case UOP_VCD_NEXT:
if( PBC_DIGEST != Vcd_GetPBCState())
Vcd_ClearStatus();
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
//VCD_CHGNULL);
SUB3_NORMAL);
gVcd_PlaylistCurItemNo++;
if(gVcd_PlaylistCurItemNo < gVcdCurrentList->PlayList.noi)
{
Vcd_PlayItemCheck(gVcd_NOI_NOS[gVcd_PlaylistCurItemNo]);
}
else
{
if( FALSE == Vcd_ReadPsd(gVcdCurrentList->PlayList.next_list_offset))
{
Vcd_OsdNotAvail();
gVcd_PlaylistCurItemNo--;
return;
}
}
/* cancel trick status */
/*
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
//VCD_CHGNULL);
SUB3_NORMAL);
*/
OsdMsgDsp(DSP_NEXT);
bPbcon_playlistNext = TRUE;
break;
case UOP_VCD_PREV:
if( PBC_DIGEST != Vcd_GetPBCState())
Vcd_ClearStatus();
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
//VCD_CHGNULL);
SUB3_NORMAL);
if(gVcd_PlaylistCurItemNo > 0/*1*/)
{
gVcd_PlaylistCurItemNo--;
Vcd_PlayItemCheck(gVcd_NOI_NOS[gVcd_PlaylistCurItemNo]);
}
else
{
if( FALSE == Vcd_ReadPsd(gVcdCurrentList->PlayList.previous_list_offset))
{
Vcd_OsdNotAvail();
return;
}
}
/* cancel trick status */
/*
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
//VCD_CHGNULL);
SUB3_NORMAL);
*/
OsdMsgDsp(DSP_PREV);
break;
case UOP_VCD_RETURN:
if( FALSE ==Vcd_ReadPsd(gVcdCurrentList->PlayList.return_list_offset))
{
Vcd_OsdNotAvail();
return;
}
else
{
if( SUB3_FREEZE == Vcd_GetSub3State())
gVcdCurrentState.sub3 = SUB3_NORMAL;
OsdMsgDsp(DSP_RETURN);
//OsdMsgDsp(DSP_NOTHING);
}
break;
case NUMBER_KEY:
#if 1//wh
Vcd_OsdNotAvail();
return;
#else
if( MAIN_SPI == Vcd_GetMainState())
{
if(((msg->ext2) > (gVcdCurrentList->PlayList.noi)) ||(msg->ext2 == 0))
{
Vcd_OsdNotAvail();
return;
}
else
Vcd_PlayItemCheck(gVcd_NOI_NOS[(msg->ext2)-1]);
}
#endif
break;
default:
break;
}
PlayFlag = TRUE;
break;
/*
case END_OF_PLAY:
PlayFlag = Vcd_PbcOn_EndOfPlay_Handle();
break;
*/
#if 0
case AUTO_PAUSE: //this msg should be sent by PSD: check the Subheader ->submode-> Trigger( bit[4] == 1)
if(gVcdCurrentList->PlayList.auto_pause_wait_time != 0)
{
//pause();
SetTimer( CalPlayItemWaitTime(gVcdCurrentList->PlayList.auto_pause_wait_time), Vcd_SendMsg(TIME_OUT));
}
break;
#endif
case TIME_OUT:
if( SUB1_STOP_PAUSE == Vcd_GetSub1State() ) //for spec: Auto_Pause_Wait_Time
{
//Wake up from pause here;
//resume_from_pause();
}
else //for spec: Play_Item_Wait_Time....
{
if(gVcd_PlaylistCurItemNo+1 < gVcdCurrentList->PlayList.noi) //if not finish paly all item, go to next item
{
gVcd_PlaylistCurItemNo++;
Vcd_PlayItemCheck(gVcd_NOI_NOS[gVcd_PlaylistCurItemNo]);
}
else // if finish playing all item, go to STOP state
{
if( FALSE ==Vcd_ReadPsd(gVcdCurrentList->PlayList.next_list_offset))
{
#if 1
Vcd_ReadPsd(0);
PlayFlag = TRUE;
#else
Vcd_HandleStop();
S5H_FEStop();
Vcd_SetState( PBC_PBCON,
MAIN_STOP,
SUB1_STOP_STOP,
SUB2_NORMAL,
SUB3_NORMAL);
PlayFlag = FALSE;
return;
#endif
}
}
}
PlayFlag = TRUE;
break;
default:
break;
}
}
else if(*((UCHAR8*)gVcdCurrentList) == SELECTION_LIST_HEADER)
{
switch(msg->param)
{
case RC_KEY_RECEIVED:
switch( msg->ext1)
{
case UOP_VCD_NEXT:
#if 1
if( PBC_DIGEST != Vcd_GetPBCState())
Vcd_ClearStatus();
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
//VCD_CHGNULL);
SUB3_NORMAL);
/* next list is not existed */
if( 0xFFFF == gVcdCurrentList->SelectionList.next_list_offset)
{
Vcd_OsdNotAvail();
PlayFlag = FALSE;
return;
}
else
#endif
OsdMsgDsp(DSP_NEXT);
/*
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
//VCD_CHGNULL);
SUB3_NORMAL);
*/
#if _SUPPORT_GAMECD
if(gIsGameCD)
jump_timing =0;
#endif
if(( SUB1_SPI_WAITING == Vcd_GetSub1State()) ||(jump_timing== 0))
Vcd_ReadPsd(gVcdCurrentList->SelectionList.next_list_offset);
break;
case UOP_VCD_PREV:
#if 1
if( PBC_DIGEST != Vcd_GetPBCState())
Vcd_ClearStatus();
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
//VCD_CHGNULL);
SUB3_NORMAL);
/* next list is not existed */
if( 0xFFFF == gVcdCurrentList->SelectionList.previous_list_offset)
{
Vcd_OsdNotAvail();
PlayFlag = FALSE;
return;
}
else
#endif
OsdMsgDsp(DSP_PREV);
/*
Vcd_SetState( VCD_CHGNULL,
VCD_CHGNULL,
VCD_CHGNULL,
SUB2_NORMAL,
//VCD_CHGNULL);
SUB3_NORMAL);
*/
if(( SUB1_SPI_WAITING == Vcd_GetSub1State()) ||(jump_timing== 0))
Vcd_ReadPsd(gVcdCurrentList->SelectionList.previous_list_offset);
break;
case UOP_VCD_RETURN:
if(( SUB1_SPI_WAITING == Vcd_GetSub1State()) ||(jump_timing== 0)){
Vcd_ReadPsd(gVcdCurrentList->SelectionList.return_list_offset);
if( SUB3_FREEZE == Vcd_GetSub3State())
gVcdCurrentState.sub3 = SUB3_NORMAL;
OsdMsgDsp(DSP_RETURN);
//OsdMsgDsp(DSP_NOTHING);
}
break;
#if 1 //wh
case NUMBER_KEY:
if(bPbcon_playlistNext)
{
gVcdCurrentState.sub1 = SUB1_SPI_WAITING;
bPbcon_playlistNext = FALSE;
}
if( MAIN_SPI == Vcd_GetMainState())
{
if(((msg->ext2) > (gVcdCurrentList->SelectionList.nos)) ||(msg->ext2 == 0))
{
Vcd_OsdNotAvail();
return;
}
else
{
// if((gVcdCurrentState.sub1 == SUB1_SPI_WAITING) ||(jump_timing== 0))
{
#if _SUPPORT_GAMECD
if(gIsGameCD)
{
if(msg->ext2 <= GCD_CHECK_MAX_NUMERICKEY( gVcdCurrentList->SelectionList.list_id -1 ))
GCD_RunGame(msg->ext2 +((gVcdCurrentList->SelectionList.list_id -1 )*(GCD_CHECK_MAX_NUMERICKEY(0))));
/* given Page Zero allwas to find the number of games per page*/
else
OsdMsgDsp(DSP_PROHIBITION);
PlayFlag = FALSE;
return;
}
#endif /*_SUPPORT_GAMECD */
if(( SUB1_SPI_WAITING == Vcd_GetSub1State()) ||(jump_timing== 0))
Vcd_ReadPsd(gVcd_NOI_NOS[(msg->ext2)-1]);//for caculate the number value
PlayFlag = TRUE;
}
}
}
break;
#endif
}
PlayFlag = TRUE;
break;
#if 0
case UOP_VCD_DEFAULT:
if(gVcdCurrentList->SelectionList.default_list_offset == 0xFFFF)
break;
else if(gVcdCurrentList->SelectionList.default_list_offset == 0xFFFD || \
gVcdCurrentList->SelectionList.default_list_offset == 0xFFFE)
Vcd_MultiDefaultSeletion(); // for spec: Multi_default_Selection
break;
#endif
case TIME_OUT:
//If timeout_list_offset == 0xFFFF, then need add the RANDOM function
Vcd_ReadPsd(gVcdCurrentList->SelectionList.timeout_list_offset);
PlayFlag = TRUE;
break;
/*
case END_OF_PLAY:
PlayFlag = Vcd_PbcOn_EndOfPlay_Handle();
break;
*/
default:
break;
}
}
if(PlayFlag)
Vcd_play(gVcdPlayStart, gVcdPlayEnd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -