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

📄 osd_draw.c

📁 SAMSUNG 5009的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	memset(time_info, 0, 15);
	memset(elapsed_time, 0,15);
	memset(remain_time, 0, 15);

	switch(GetDiscState())	// cydrain 20060117
	{
		case DVDV_DISC:	
		case DVDA_DISC: /*Jiangshanbin for DVDA  060323*/
		{
			GetDvdvAllPbTimeInfo(&pCur_pb_time, &pTotal_pb_time,
									&pCh_start_pb_time, &pCh_end_pb_time);

			/* Title time */
			if(gOSD_state.etInfo_dsp == INFO_THIRD)	
			{
				cur_hr = pCur_pb_time.hour;
				cur_min = pCur_pb_time.min;
				cur_sec = pCur_pb_time.sec;

				cur_time = pCur_pb_time.hour*3600+pCur_pb_time.min*60+pCur_pb_time.sec;
				total_time = pTotal_pb_time.hour*3600+pTotal_pb_time.min*60+pTotal_pb_time.sec;

				strcpy(time_info, (NCHAR*)gpTitle[MENU_LANG]);
			 }
			/* Chapter time */
			else if(gOSD_state.etInfo_dsp == INFO_FOURTH)	
			{
				ch_start_time = pCh_start_pb_time.hour*3600+pCh_start_pb_time.min*60+pCh_start_pb_time.sec;
				ch_end_time = pCh_end_pb_time.hour*3600+pCh_end_pb_time.min*60+pCh_end_pb_time.sec;

				cur_time = (pCur_pb_time.hour*3600+pCur_pb_time.min*60+pCur_pb_time.sec) -ch_start_time;
				total_time = ch_end_time - ch_start_time;

				cur_hr = cur_time/3600;
				cur_min = (cur_time % 3600) / 60;
				cur_sec = cur_time% 60;
					
			
				strcpy(time_info, (NCHAR*)gpChapter[MENU_LANG]);// Qian liping 060110
			}
		}
			break;
			
		case VCD_DISC:
		case SVCD_DISC:
		case CD_I:
		case CD_DA:
		case HQVCD_DISC:
		{
			/* vcd: number key change info osd */
			/* Total Time */
			if(  gOSD_state.etInfo_dsp == INFO_SECOND )
			{
				GetSvcdAllPbTime( &cur_hr, &cur_min, &cur_sec);
				GetSvcdAllTotalPbTime( &tot_hr, &tot_min, &tot_sec);

				strcpy(time_info, (NCHAR*)gpDisc[MENU_LANG]);
			}
			/* Track Time */
			else if(gOSD_state.etInfo_dsp == INFO_THIRD)
			{
				GetSvcdPbTime( &cur_hr, &cur_min, &cur_sec);
				GetSvcdTotalPbTime( &tot_hr, &tot_min, &tot_sec);

				strcpy(time_info, (NCHAR*)gpTrack[MENU_LANG]);
			}

			total_time = tot_hr*3600+tot_min*60+tot_sec;
			cur_time = cur_hr*3600+cur_min*60+cur_sec;

			if (total_time < cur_time)
			{
				total_time = cur_time;
			}	
		}
			break;

#if _APP_CAP_NAV_MMP_PLAY_VIDEO_FILE	// cydrain 20060117
		case CD_DATA:
		case DVD_DATA:
		case USB_DATA:
		case FX_DATA:
		{
#if _USE_5010 || _USE_5009
			GetMmpTimeInfo(&cur_time, &total_time); //azureming@060403
#else//clina 20060404
			GenPtm_st		iCur_ptm;
			SH_PM_GetCurrentPtm(&iCur_ptm);
			
			cur_time = DIVIDE(iCur_ptm.ptm_value, 90);	/* ms */
			cur_time = DIVIDE(cur_time, 1000);			/* seconds */
#endif		
			if(gOSD_state.etInfo_dsp == INFO_THIRD)	
			{
				cur_hr = cur_time / 3600;
				cur_min = (cur_time % 3600) / 60;
				cur_sec = cur_time % 60;

				strcpy(time_info, (NCHAR*)gpFile[MENU_LANG]);
			 }

		}
			break;
#endif

		default:
			break;
	}
	
	rem_time = total_time - cur_time;

	rem_hr = rem_time/3600;
	rem_min = (rem_time % 3600) / 60;
	rem_sec = rem_time% 60;			

	sprintf(elapsed_time,"%d:%02d:%02d", cur_hr, cur_min, cur_sec);
	sprintf(remain_time,"%d:%02d:%02d", rem_hr, rem_min, rem_sec);			

	strcat(time_info, " ");
	strcat(time_info, (NCHAR*)gpTime[MENU_LANG]);

	if(partial_draw)
	{
		//clina 20060124  update the dvd info3,4 time;vcd info 2,3 time update
		OwUpdateStr((char *)gPre_elap_str,elapsed_time, 53+INFO_TIME_TXT_W+INFO_ICON_W,	 INFO_STR_START_Y, 	INFO_TIME_ITEM1_W-33,	INFO_OSD_H-3*2);
		OwUpdateStr((char *)gPre_rem_str,remain_time, 53+INFO_TIME_TXT_W+INFO_TIME_ITEM1_W+INFO_ICON_W,		INFO_STR_START_Y, 	INFO_TIME_ITEM1_W-33,	INFO_OSD_H-3*2);
	}
	else
	{
#if _APP_CAP_KEY_TIME_KEY  
		OwCreateInfoBgDisplay();// Qian liping 060531
#endif
		/*Clear the rec*/
         SH_GfxDrawRec(SH_CANV1,	50,		INFO_BKG_GAP,	INFO_OSD_W-INFO_BKG_GAP-50,	INFO_OSD_H-INFO_BKG_GAP*2,		COLOR_TRANS_BLUE); 	
    	/*Draw time info txt*/
	 	 SH_GfxDrawStr(SH_CANV1, 	time_info, 	53, 			INFO_STR_START_Y, NULL);
      	/*Draw elapsed time info*/
	  	SH_GfxDrawImage(SH_CANV1,	IMG_INFO_TIME,				53+INFO_TIME_TXT_W,		INFO_ICON_START_Y);  				
		SH_GfxDrawStr(SH_CANV1, 	elapsed_time, 	53+INFO_TIME_TXT_W+33, 	INFO_STR_START_Y, NULL);
		/*Draw remain time info*/
		SH_GfxDrawImage(SH_CANV1,	IMG_INFO_TIME,				53+INFO_TIME_TXT_W+INFO_TIME_ITEM1_W,		INFO_ICON_START_Y);  	
 		SH_GfxDrawStr(SH_CANV1, 	remain_time, 	53+INFO_TIME_TXT_W+INFO_TIME_ITEM1_W+33, 	INFO_STR_START_Y, NULL);

	}
#endif/*_APP_CAP_FUNC_REMAIN_TIME */
}


 

 /******************************************************************************
 * Function name	: GetDvdvInfoInAppLayer 
 * Arguments		:  
 *     IN        
 *					 DvdVideoInfo_t* dvdv
 *     OUT       
 *     I/O       
 * Return			: VOID
 *			
 * By			: KIM DO YEON
 * Description		: Since DVD 1st and 2nd info OSD share a common windows array.  
 				1) TT		normal
 				2) Menu 		title:   0/total title	chapter: 	0/total chapter in title 1
 				3) Full stop	title:   1/total title	chapter: 	0/total chapter in title 1
 * Revision		: 1.0
 ******************************************************************************
 */    
VOID GetDvdvInfoInAppLayer(DvdVideoInfo_t* dvdv)
{
	UINT 				total_title, cur_title;
       Pttn_t 				total_chapter, cur_chapter;
       DvdVideoInfo_t 		dvd_info;
	Domain_t				domain;
	
	domain = GetDvdDomain();
	GetDvdVideoInfo(&dvd_info);
	
	if( domain == DVD_DOM_VMGM || domain == DVD_DOM_VTSM || IsDvdFullStopMode() )
	{
		total_title = dvd_info.total_title;
		GetDvdTtInfo(1, &total_chapter);

		cur_title = 0;
		if(IsDvdFullStopMode())
			cur_title = 1;
		
		cur_chapter = 0;
	}
	else
	{
		total_title = dvd_info.total_title;
		total_chapter = dvd_info.total_chapter;
		cur_title = dvd_info.cur_title;
		cur_chapter = dvd_info.cur_chapter;
	}

	dvdv->cur_chapter = cur_chapter;
	dvdv->total_chapter = total_chapter;
	dvdv->cur_title = cur_title;
	dvdv->total_title = total_title;
	
}
 /******************************************************************************
 * Function name	: OwCreateInfoBgDisplay 
 * Arguments		:  
 *     IN        
 *					 VOID
 *     OUT       
 *     I/O       
 * Return			: VOID
 *			
 * By				:	Qian liping 060531
 *
 * Description		: 	Set the INFO OSD BG.
 * Revision			: 	1.0
 ******************************************************************************
 */   
 VOID OwCreateInfoBgDisplay(VOID)
{
	/* Set the osd canvas */
	SH_GfxSetCanvas(SH_CANV1,	INFO_OSD_X,	GFX_BAR_Y,	INFO_OSD_W,	INFO_OSD_H); 
	
	/* Draw Out Line Box */
	SH_GfxDrawRec(SH_CANV1,	0,	0,	INFO_OSD_W,		INFO_OSD_H,		COLOR_DARK_BLUE);  
	SH_GfxDrawRec(SH_CANV1,	INFO_BKG_GAP,	INFO_BKG_GAP,	INFO_OSD_W-INFO_BKG_GAP*2, INFO_OSD_H-INFO_BKG_GAP*2,	COLOR_TRANS_BLUE);  	

	/* Draw Icons */
	SH_GfxDrawImage(SH_CANV1,	GetDiscImgID(),	  	INFO_BKG_GAP,			INFO_BKG_GAP);	
	SH_GfxDrawImage(SH_CANV1,	IMG_EXT_DISC,		INFO_BKG_GAP,			INFO_BKG_GAP+16);
	
	/* Show the osd */
	SH_GfxShowCanvas(SH_CANV1, TRUE); 

}
 
 /******************************************************************************
 * Function name	: OwCreateFirstDVDInfoDisplay 
 * Arguments		:  
 *     IN        
 *					 VOID
 *     OUT       
 *     I/O       
 * Return			: VOID
 *			
 * By				:Chang lina
 * Description		: 
 * Revision			: 1.1 Qian liping  modify 060531 
 ******************************************************************************
 */    
VOID OwCreateFirstDVDInfoDisplay(VOID)
{
	DvdVideoInfo_t	dvdv;
	BYTE1			hour = 0, min = 0, sec = 0;
	RepeatSub_et		repeat;
	BYTE2           chapter_w;
	CHAR			string[MAX_SUPPORT_DYNAMIC_LENGTH];

	OwCreateInfoBgDisplay();

	if( S5H_GetAppType() == APP_MMN )
		chapter_w = INFO_DIVX_CHP_W ;
	else
		chapter_w = INFO_DVD_CHP_W ;
	
		
	SH_GfxDrawImage(SH_CANV1,	IMG_INFO_TITLE,		50,	 			INFO_ICON_START_Y);
	SH_GfxDrawImage(SH_CANV1,	IMG_INFO_CHAP,		50+INFO_DVD_TITLE_W,	INFO_ICON_START_Y);	
	SH_GfxDrawImage(SH_CANV1,	IMG_INFO_TIME,		50+INFO_DVD_TITLE_W+chapter_w,	       INFO_ICON_START_Y);
	SH_GfxDrawImage(SH_CANV1,	IMG_RPT,		       50+INFO_DVD_TITLE_W+chapter_w+INFO_DVD_TIME_W,	 INFO_ICON_START_Y);

	/* Draw the string */
	if (S5H_GetAppType() == APP_DVD)	
	{
		GetDvdvInfoInAppLayer(&dvdv);

		/* Title Info */
		sprintf((CHAR *)string, "%02d/%02d ", dvdv.cur_title, dvdv.total_title);
		SH_GfxDrawStr(SH_CANV1,	(CHAR *)string,  50+INFO_ICON_W, 	INFO_STR_START_Y, NULL);        		/*title*/

		/* Chapter Info */
		sprintf((CHAR *)string, "%03d/%03d ", dvdv.cur_chapter, dvdv.total_chapter);
		SH_GfxDrawStr(SH_CANV1,	(CHAR *)string, 	50+INFO_DVD_TITLE_W+INFO_ICON_W, 	INFO_STR_START_Y, NULL);  		/*chapter*/

   	 	/* Time Info */
		if(IsDvdFullStopMode())
		{/*  in full stop, show 0:00:00. */	
			sprintf((CHAR *)string, "%d:%02d:%02d", 0, 0, 0);					
		}
		else
		{
			GetDvdvPbTime( &hour, &min, &sec);
			sprintf((CHAR *)string,"%d:%02d:%02d", hour, min, sec);
		}
		// Keep the time string to gPreTimeString.// Qian liping 060719
		strcpy((char*)gPreTimeString, (char*)string);
		SH_GfxDrawStr(SH_CANV1,	(CHAR *)string, 	50+INFO_DVD_TITLE_W+INFO_DVD_CHP_W+INFO_ICON_W,   INFO_STR_START_Y, NULL); 		/*time*/
		/* Repeat Info */
		repeat = GetDvdvRepeatABState();	
		if( repeat!=REPEAT_SUB_NONE )
		{
			SetDvdvInfoRepeatStringNew( (CHAR *)string, repeat );
		}	
		else
		{
			SetDvdvInfoRepeatStringNew( (CHAR *)string, GetDvdvRepeatState() );
		}
		 SH_GfxDrawStr(SH_CANV1,	(CHAR *)string, 	50+ INFO_DVD_TITLE_W+INFO_DVD_CHP_W+INFO_DVD_TIME_W+INFO_ICON_W, 	INFO_STR_START_Y, NULL);             	/*repeat*/
   	}
#if _APP_CAP_NAV_MMP_PLAY_VIDEO_FILE	
	else
	{
		/* Title Info */
		sprintf((CHAR *)string, "%02d/%02d ", GetMmpFolderPlay()+1, GetMmpTotalFolders());
		SH_GfxDrawStr(SH_CANV1,	(CHAR *)string,	50+INFO_ICON_W,  INFO_STR_START_Y, NULL);        	/*title*/
		/* Chapter Info */
		if (MmpGetCurFileName(NULL,MMP_NO_SELECTION))
		{
			sprintf((CHAR *)string, "%04d/%04d ", GetMmpBgPlay()+1, GetMmpTotalFiles());
		}
		else 	//(weilf)20060629:during changing folder,display chapter as : 000/000
		{
			sprintf((CHAR *)string, "%04d/%04d ", 0, 0);	
		}	
		
		SH_GfxDrawStr(SH_CANV1,	(CHAR *)string, 	50+INFO_DVD_TITLE_W+INFO_ICON_W,  INFO_STR_START_Y, NULL);  		/*chapter*/

	   	 /* Time Info */
		/*  in full stop, show 0:00:00. */	
		if(GetMmpStopMode() == MMP_FULL_STOP)
		{
			sprintf((CHAR *)string, "%d:%02d:%02d", 0, 0, 0);					
		}
		else
		{
			CHAR time_info_str[20], time_remain_str[20];
			MmpGetCurTimeStr(time_info_str, time_remain_str);
			strcpy((CHAR *)string, time_info_str);
		}
		
	    SH_GfxDrawStr(SH_CANV1,	(CHAR *)string, 50+INFO_DVD_TITLE_W+chapter_w+INFO_ICON_W, 	   INFO_STR_START_Y, NULL); 		/*time*/

		/* Repeat Info */
		repeat = GetMmpRepeatMode(TRUE);	// cydrain 20060410
		if( repeat != REPEAT_SUB_NONE )
		{
			SetDivxInfoRepeatStringNew( (CHAR *)string, repeat );
		}	
		else
		{
			SetDivxInfoRepeatStringNew( (CHAR *)string, GetMmpRepeatMode(FALSE) );
		}
		
		SH_GfxDrawStr(SH_CANV1,	(CHAR *)string, 	50+ INFO_DVD_TITLE_W+chapter_w+INFO_DVD_TIME_W+INFO_ICON_W, 	INFO_STR_START_Y, NULL);             	/*repeat*/
  }
#endif

}

 /******************************************************************************
 * Function name	: OwCreateSecondDVDInfoDisplay 
 * Arguments		:  
 *     IN        
 *					 VOID
 *     OUT       
 *     I/O       
 * Return			: VOID
 *			
 * By			:Chang lina
 * Description		: 
 * Revision		: 1.0
 ******************************************************************************
 */    
VOID OwCreateSecondDVDInfoDisplay( VOID ) 
{
	BYTE1 icon_ext;
	CHAR *string[MAX_SUPPORT_DYNAMIC_LENGTH];

	 /* Draw Out Line Box */
	SH_GfxDrawRec(SH_CANV1,	50,	3,	610-3-50, 40-3*2,	COLOR_TRANS_BLUE); 	

	if(S5H_GetAppType() == APP_DVD)		
	{
		 /*draw the bar*/
		// Audio Info
		SH_GfxDrawImage(SH_CANV1,	SetXvcdInfoAudioIcon(),	  	50,						5);
		SetDvdvInfoAudioString( (CHAR *)string, &icon_ext );
		SH_GfxDrawStr(SH_CANV1,  (CHAR *)string, 55+33, 	5, NULL);     
		
		// Dolby Info
		SH_GfxDrawImage(SH_CANV1,		icon_ext,		       50+(255+18)-55,  		      	11);
		
		// Subtitle Info 
		SH_GfxDrawImage(SH_CANV1,		IMG_INFO_LANG,	50+(255+18),			 	5);
		SetDvdvInfoSubtitleString( (CHAR *)string );
		SH_GfxDrawStr(SH_CANV1,   (CHAR *)string, 50+(255+18)+33, 5, NULL);  
		
		// Angle Info 
		SH_GfxDrawImage(SH_CANV1,		IMG_INFO_MV,	50+(255+18)+(145-5),		 5);
		SetDvdvInfoAngleString( (CHAR *)string );
	       SH_GfxDrawStr(SH_CANV1,   (CHAR *)string, 50+(255+18)+(145-5)+33, 5, NULL);  //MOVE ANGLE

		//Play mode Info
		SH_GfxDrawImage(SH_CANV1,	SetDvdvInfoPlayModeIcon( ),		50+(255+18)+(145-5)+33+70,		5);           
	}
#if _APP_CAP_NAV_MMP_PLAY_VIDEO_FILE	
	else
	{
		/* Audio Info */
		SH_GfxDrawImage(SH_CANV1,	SetXvcdInfoAudioIcon(),	  	50,						5);

		if (Getdecodestate())		//(weilf)20060728:fix 63,simple
		SetDivxInfoAudioString((CHAR *)string);
		else 
			sprintf((CHAR *)string, "%s %2d/%2d","MP3",0,0);
		
		SH_GfxDrawStr(SH_CANV1,  (CHAR *)string, 50+33, 	5, NULL); 
		
		
		/* Subtitle Info */
		SH_GfxDrawImage(SH_CANV1,		IMG_INFO_LANG,	50+185,			 	5);

		if (Getdecodestate())		//(weilf)20060728:fix 63,simple
		SetDivxInfoSubtitleString((CHAR *)string);
		else 
			sprintf((CHAR *)string, "%02d/%02d", 0, 0);

		SH_GfxDrawStr(SH_CANV1,   (CHAR *)string, 50+185+33, 5, NULL);  

		/* Screen Size Info */
		SH_GfxDrawImage(SH_CANV1,		IMG_INFO_MV,	50+185+170,		 5); 
		if(iPAR_GetMode() == PAR_MODE_MPG_PS ||iPAR_GetMode() == PAR_MODE_MPG_ES) //mpg file 
		{
			SH_SeqInfo_t seq_info;
			SH_PM_GetSeqInfo( &seq_info);
			sprintf( (CHAR *)string, "%03d X %03d", seq_info.hor_size, seq_info.vert_size);
		} 
		else //avi file
		{
			MediaInfo_t		media;
			GetMediaInfoState(&media);
			sprintf( (CHAR *)string, "%03d X %03d", media.divx.width, media.divx.height);
		}
		SH_GfxDrawStr(SH_CANV1,   (CHAR *)string, 50+185+170+33, 5, NULL); 
		
		//Play mode Info

⌨️ 快捷键说明

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