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

📄 vcd_common.c

📁 三星ic 9980的源代码. 718版.
💻 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 + -