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

📄 pcd_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
📖 第 1 页 / 共 5 页
字号:
	if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
	{
		PM_SetPlaybackMode((BYTE) PM_PLAYBACK_NORMAL);
		ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
	}
}

void restore_background()
{
// ZORAN CDE1003 : clear OSD before drawing menu
	OSD_TurnOff();

	if(gmp3m.Transition_mode)
		DEC_Clear_Ref_Buff(3);
// ZORAN CDE1005 : Don't draw the logo to test if memory mapping changes
	ie_send( IE_CORE_STOP );	//DM1012 fix some times the logo can not display well and OSD mem Allocation wrong.
	//DEC_FrameDisplay(&power_up_logo);	//DM1012

	// ZORAN CDE1010 : Experimental to restore the background
//	ie_send( IE_CORE_PLAY );	//DM1012
}

void close_image( void )
{
	if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
		close_slideshow();
	CLEAR_STATE( MP3M_STATE_IMAGE_OPEN | MP3M_STATE_SLIDESHOW_PAUSED | MP3M_STATE_STATUS_ACTIVE );
	
	restore_background();

#ifdef D_PICTURE_CD_ENABLED
	if( ( g_ui_active_menu_id != PICTURE_CD_MENU_ID )&& ( g_disc_type == DEC_DISC_TYPE_JPG ) )
		close_menu();//DM1024
	else
	if(  g_disc_type != DEC_DISC_TYPE_JPG )
#endif	
	
	{
		MS_dialog_display( (MS_DIALOG *) screen );
		mp3_refresh_track();
	}
}

void display_image( int iImageNumber )
{
	if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
	{
		ie_send( IE_CORE_STOP );//DM1106 Abort playback first...
		ie_send( IE_CORE_PLAY );
	}
	else
		ie_send_ex( IE_CORE_JPG_GOTO_ENTRY, (void *) iImageNumber );//Use core_jpg_goto_entry instead of core_goto_enry
}

#define SZ_PICTURE_NAME_LABEL			"Picture: "
#define SZ_PICTURE_NAME_LABEL_LENGTH	9
#define MAX_SZ_SIZE						( SZ_PICTURE_NAME_LABEL_LENGTH + 1 )

#define MSS_PICTURE_NAME_LABEL_X		0
#define MSS_PICTURE_NAME_LABEL_WIDTH	(SZ_PICTURE_NAME_LABEL_LENGTH * MP3M_FONT_WIDTH)
#define MSS_PICTURE_NAME_LABEL_POS		{ MSS_PICTURE_NAME_LABEL_X, MS_LINE_0, MSS_PICTURE_NAME_LABEL_WIDTH, MS_LINE_HEIGHT }

#define MSS_FILENAME_X			(MSS_PICTURE_NAME_LABEL_X + MSS_PICTURE_NAME_LABEL_WIDTH)
#define MSS_FILENAME_WIDTH		((MAX_SZ_BUFF_SIZE - 1) * MP3M_FONT_WIDTH)
#define MSS_FILENAME_POS		{MSS_FILENAME_X, MS_LINE_0, MSS_FILENAME_WIDTH, MS_LINE_HEIGHT}

#define MSS_FILECOUNT_X			(MSS_FILENAME_X + MSS_FILENAME_WIDTH)
#define MSS_FILECOUNT_WIDTH		( (1 + MAX_TRACK_DIGITS + 1 + MAX_TRACK_DIGITS + 1) * MP3M_FONT_WIDTH)
#define MSS_FILECOUNT_POS		{MSS_FILECOUNT_X, MS_LINE_0, MSS_FILECOUNT_WIDTH, MS_LINE_HEIGHT}

//
// Display "Picture:", picture name, (number/total) on OSD
//
void display_image_status( void )
{
	MS_POS mspos = MSS_PICTURE_NAME_LABEL_POS;
	MS_STATIC *pmss;
	char sz[MAX_SZ_SIZE];
	
	// Display "Picture:"
	strcpy( sz, SZ_PICTURE_NAME_LABEL );
	pmss = MS_create_static( &mspos, I_COLOR, sz, MS_ASCII );
	MS_SET_JUST( pmss, ALIGN_LEFT_PAD );
	MS_display((MS_WIDGET *) pmss );

	mspos.x = MSS_FILENAME_X;
	mspos.w = MSS_FILENAME_WIDTH;
	pmss->widget.pos = mspos;
	pmss->widget.attr |= MS_STRING_ON_SC;
	pmss->text = file_name_address( SI_CDDA_TRACK_NUM - 1 );
	MS_display((MS_WIDGET *) pmss );
	
	// Display (number/total)
	mspos.x = MSS_FILECOUNT_X;
	mspos.w = MSS_FILECOUNT_WIDTH;
	pmss->widget.pos = mspos;
	pmss->widget.attr &= ~MS_STRING_ON_SC;
	sz[0] = '(';
	track_cur_tot_to_str( SI_CDDA_TRACK_NUM, SI_MP3_MAX_TRACK_NUM, &sz[1], NULL );
	{
		unsigned char ucLength = strlen(sz);
		strcpy( &sz[ucLength], ")");
	}
	pmss->text = sz;
	MS_display((MS_WIDGET *) pmss );

	SAFELY_DELETE( pmss );
}

void open_image_status( void )
{
	display_image_status();

	SET_STATE( MP3M_STATE_STATUS_ACTIVE );
}

void prev_image( void )
{
	int iTrackPrev = BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) - 1;
	if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
	{
		gmp3m.iButtonNumber = TRACK_TO_BUTTON_NUMBER(PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem -2));
		iTrackPrev = PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem -2 );
	}
	if ( iTrackPrev > 0 )
	{
		display_image( iTrackPrev );
		if ( IS_STATE(MP3M_STATE_STATUS_ACTIVE) )
			display_image_status();

		// Synchronize the list with the new track number
		// This isn't a problem when the image is open because the list
		// functions don't refresh the screen in that state
		list_goto_track(iTrackPrev);
	}
}

#ifdef ICON_IN_THUMBNAIL_MENU
extern const DEC_FRAME THUMBNAIL_logo;
#endif
void next_image( void )
{
	int iTrackNext = BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) + 1;
	if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
	{
		gmp3m.iButtonNumber = TRACK_TO_BUTTON_NUMBER(PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem ));
		iTrackNext = PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem );
	}
	if ( iTrackNext <= SI_MP3_MAX_TRACK_NUM )
	{
		display_image( iTrackNext );
		if ( IS_STATE(MP3M_STATE_STATUS_ACTIVE) )
			// Refresh the image status
			display_image_status();
		// Synchronize the list with the new track number
		// This isn't a problem when the image is open because the list
		// functions don't refresh the screen in that state
		list_goto_track(iTrackNext);
	}
	else{
		if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
		{
			if(PM_IsRepeatAll())
			{
				gmp3m.iDirNum = 0;
				gmp3m.iButtonNumber = 1;
				gmp3m.dirBounds.iFirstFileIndex = -1;
				gmp3m.dirBounds.iLastFileIndex = -1;
				gmp3m.dirBounds.iLastItemNum = -1;
				
				gmp3m.firstDisplayed.iFileIndex = -1;
				gmp3m.firstDisplayed.iItemNum = -1;
				
				iTrackNext = 1;
				
				gns.cdda.m_CurrPosition.iPlaylistItem = 1;
				display_image( iTrackNext );
			}
		}
		{
			BYTE timeout = 100;
			close_image();
			while( (gcs.pstate != PST_STOP ) && timeout ){
				usleep(10000);
				timeout--;
			}
#ifdef ICON_IN_THUMBNAIL_MENU
#ifdef _DEBUG
			DEC_FrameDisplay(&power_up_logo);
#else
			DEC_FrameDisplay(&THUMBNAIL_logo);
#endif
			DEC_SetDiskType(DEC_DISC_TYPE_JPG);//DM1121
#endif			
			ui_start_menu( DIGEST_MENU_ID );
		}
	}
}

void close_image_status( void )
{
	CLEAR_STATE( MP3M_STATE_STATUS_ACTIVE );
	mp3m_erase_menu();
}
#define MP3M_SLIDESHOW_TICKS			CALC_TICKS( 5 * UNITS_SECONDS )
#define MP3M_SLIDESHOW_TRANSTICKS		CALC_TICKS( 1 * UNITS_SECONDS )	//DM1129 for slide show special case

void advance_slideshow( struct oTimer *pTimer )
{
	next_image();
	
	// Must test this state because next_image might return to the menu
	if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
		timer_start(pTimer);
}

void slideshow_handle_timeout( struct oTimer *pTimer )
{
	gmp3m.pSlideshowTimer->m_wTimeoutCount = MP3M_SLIDESHOW_TICKS;	//DM1129 reset timer counter
	if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) && !IS_STATE(MP3M_STATE_SLIDESHOW_PAUSED) &&!PM_IsRepeatSingle())//Add one more condition for repeat single
	{
		if((gmp3m.Transition_mode)&&(!IS_STATE(MP3M_STATE_PREPARE_R1DATE)))	//DM1129 Tran is ON
		{
			if(gcs.pstate == PST_STILL)
			{
				ie_send( IE_CORE_JPG_START_COPY );//DM1129  start copying
				DEC_WaitCopyingFinish();//DM1130 wait till copying finished
			}
			else
			{
				gmp3m.pSlideshowTimer->m_wTimeoutCount = MP3M_SLIDESHOW_TRANSTICKS;
				if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
					timer_start(pTimer);
				return;
			}

		}
		CLEAR_STATE( MP3M_STATE_PREPARE_R1DATE );
		advance_slideshow(pTimer);
	}
	else	//DM1025 restart timer
	{
	// Must test this state because next_image might return to the menu
		if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
			timer_start(pTimer);
		if(gmp3m.Transition_mode)	//DM1129 Tran is ON
			if(gcs.pstate == PST_STILL)
				ie_send( IE_CORE_JPG_START_COPY );//DM1129  start copying
	}
}

void open_image( void )
{
	SET_STATE( MP3M_STATE_IMAGE_OPEN );
#ifdef D_PICTURE_CD_ENABLED
	if( ( g_ui_active_menu_id != PICTURE_CD_MENU_ID )&& ( g_disc_type == DEC_DISC_TYPE_JPG ) )
		close_menu();//DM1024
	else
#endif	
	mp3m_erase_menu();
}

//ZORAN DM1018 implement PICTRUE CD Browser
#define JPG_MAX_ANGLE	3
#define JPG_MAX_TRANS	6//12
//#define UICC_ANGLE		0x088
//#define UICC_LR			0x084
//#define UICC_SKIPF      0x00F
//#define UICC_SKIPB		0x00E
void rotate_image( void )
{
	int iTrackNext = BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) ;
	if(key_press_again(UICC_ANGLE))
	{
		if(gmp3m.Angle++ >= JPG_MAX_ANGLE)
			gmp3m.Angle = 0;
		if(PM_IsPlaybackShuffle(PM_GetPlaybackMode())||PM_IsPlaybackProgram(PM_GetPlaybackMode()))
			{
				if(gcs.pstate == PST_STILL)
					(gns.cdda.m_CurrPosition).iPlaylistItem--;
				gmp3m.iButtonNumber = TRACK_TO_BUTTON_NUMBER(PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem ));
				iTrackNext = PM_GetProgramListEntry( (WORD)(gns.cdda.m_CurrPosition).iPlaylistItem );
			}
		else
		if(gcs.pstate == PST_STILL)
			(gns.cdda.m_CurrPosition).iPlaylistItem--;
		ie_send_ex( IE_CORE_ANGLE_SELECTION , (void *) gmp3m.Angle);
		display_image( iTrackNext );
	// Must test this state because next_image might return to the menu
		if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
			timer_start( gmp3m.pSlideshowTimer );
	}
	disp_ui_tmp_string(gmp3m.Angle,UICC_ANGLE);
}

void trans_image( void )
{
	if(key_press_again(UICC_LR))
	{
		DWORD dCmd;
		DWORD d_Setting = TRUE;
		if(gmp3m.Transition_mode++ >= JPG_MAX_TRANS)
		{
			gmp3m.Transition_mode = 1;//adam1221: change from mode 0 to 1
			if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )	//DM1130  
				CLEAR_STATE( MP3M_STATE_PREPARE_R1DATE );
		}
		else
		{
			d_Setting = FALSE;
			if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )	//DM1130
				if(gmp3m.Transition_mode == 1)
					SET_STATE( MP3M_STATE_PREPARE_R1DATE );
		}
		dCmd = (((DWORD)PS_UPDATE_JPG_VIDBUF_SETTING)<<16) 
				+ (DWORD)(d_Setting);
		k_ie_send_ex(IE_CORE_UPDATE_PS, (void *)dCmd);
		ie_send_ex( IE_CORE_TRANS_SELECTION , (void *) gmp3m.Transition_mode);
	}
	disp_ui_tmp_string(gmp3m.Transition_mode,UICC_LR);
}

//ZORAN DM1018

extern BOOL is_icon_action;
void open_slideshow( void )
{
	if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
		open_image();
	
	if ( gmp3m.pSlideshowTimer == NULL )
	{
		gmp3m.pSlideshowTimer = timer_create( MP3M_SLIDESHOW_TICKS, slideshow_handle_timeout );
	}

	timer_install( gmp3m.pSlideshowTimer );

	SET_STATE( MP3M_STATE_SLIDESHOW_ACTIVE );

	timer_start( gmp3m.pSlideshowTimer );

	{// ZORAN CDE1018 : Moved from mp3m screen_user_op 
		int iButtonNumber;
		MS_WIDGET *pmsw	;

		pmsw = FOCUSED_WIDGET(screen);
		iButtonNumber = button_number(pmsw);
		if ( iButtonNumber >= 0 )
		{
			gmp3m.iButtonNumber = iButtonNumber;
#ifdef NO_C_STDLIB
			rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
		}
	}	
	if (is_icon_action){
		gmp3m.iButtonNumber = 0; // DZ1121 Need add more condition
		is_icon_action = FALSE;
		track_action( 1 );
	}else
		track_any_action();
}

void pause_slideshow( void )
{
	ui_tmp_msg( S_PAUSE );
	SET_STATE( MP3M_STATE_SLIDESHOW_PAUSED );
	gcs.pstate == PST_PAUSE;	//DM1116 for VFD update
}


static MS_UOP mp3m_screen_user_op( MS_WIDGET *pmsw, MS_UOP uop, char param )
{
	switch ( uop )
	{
	case MS_UOP_SKIPF:
		if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
			open_image();
		next_image();
		if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
			timer_start( gmp3m.pSlideshowTimer );
		uop = MS_UOP_NOP;
#ifdef D_PICTURE_CD_ENABLED	
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
		{
			close_image_status();
		}
		if (g_disc_type == DEC_DISC_TYPE_JPG)
			disp_ui_tmp_string(0,UICC_SKIPF);
#endif
		break;

	case MS_UOP_SKIPB:
		if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
			open_image();
		prev_image();
		if ( IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
			timer_start( gmp3m.pSlideshowTimer );
		uop = MS_UOP_NOP;
#ifdef D_PICTURE_CD_ENABLED
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
		{
			close_image_status();
		}
		if (g_disc_type == DEC_DISC_TYPE_JPG){
			if ((BUTTON_NUMBER_TO_TRACK(gmp3m.iButtonNumber) - 1) >0 )
				disp_ui_tmp_string(1,UICC_SKIPB);
			else
				disp_ui_tmp_string(0,UICC_SKIPB);
		}
#endif
		break;

	case MS_UOP_STATUS:
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN) )
		{
			if ( IS_STATE( MP3M_STATE_STATUS_ACTIVE ) )
			{
				close_image_status();
			}
			else
			{
				open_image_status();
			}
		} // IS_STATE(MP3M_STATE_IMAGE_OPEN)
		uop = MS_UOP_NOP;
		break;

	case MS_UOP_PAUSE:
		if ( IS_STATE(MP3M_STATE_IMAGE_OPEN)&&IS_STATE( MP3M_STATE_STATUS_ACTIVE ))
		{
			close_image_status();
		}
		if ( !IS_STATE( MP3M_STATE_SLIDESHOW_PAUSED ) &&IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE))
		{
			pause_slideshow();
			uop = MS_UOP_NOP;
		}
		break;

	case MS_UOP_PLAY:
		{
			if ( IS_STATE(MP3M_STATE_SLIDESHOW_PAUSED) )
			{
				CLEAR_STATE( MP3M_STATE_SLIDESHOW_PAUSED );
				advance_slideshow( gmp3m.pSlideshowTimer );
				uop = MS_UOP_NOP;
			}
			else
			if ( !IS_STATE(MP3M_STATE_SLIDESHOW_ACTIVE) )
			{
				if(IS_STATE(MP3M_STATE_IMAGE_OPEN))	//DM1116 if is open display next one.
					Menu_update_buttonnumber((gns.cdda.m_CurrPosition).iPlaylistItem++);
				open_slideshow();
#ifdef DISABLE
				uop = MS_UOP_ENTER;
#else
/*	ZORAN CDE1018 : Moved to open_slideshow 

				{
					int iButtonNumber;
					
					pmsw = FOCUSED_WIDGET(screen);
					iButtonNumber = button_number(pmsw);
					if ( iButtonNumber >= 0 )
					{
						gmp3m.iButtonNumber = iButtonNumber;
#ifdef NO_C_STDLIB
	  rtouts("\niButtonNumber set to "); rtouti(gmp3m.iButtonNumber);
#endif // NO_C_STDLIB
					}
				}
				track_any_action();
*/
				uop = MS_UOP_NOP;
#endif // DISABLE
			}
			else
				uop = MS_UOP_NOP;

⌨️ 快捷键说明

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