📄 osd_draw.c
字号:
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 + -