[MPlayer-cvslog] r32880 - in trunk: DOCS/man/de/mplayer.1 DOCS/man/en/mplayer.1 cfg-mplayer.h mplayer.c
cigaes
subversion at mplayerhq.hu
Thu Feb 10 20:20:37 CET 2011
Author: cigaes
Date: Thu Feb 10 20:20:36 2011
New Revision: 32880
Log:
Fractional part of time stamp in OSD.
Add the -osd-fractions option to optionally show the fractional part of the
time stamp in the OSD.
Patch by Christian, herr.mitterlehner gsmpaaiml com
Modified:
trunk/cfg-mplayer.h
trunk/mplayer.c
Changes in other areas also in this revision:
Modified:
trunk/DOCS/man/de/mplayer.1
trunk/DOCS/man/en/mplayer.1
Modified: trunk/cfg-mplayer.h
==============================================================================
--- trunk/cfg-mplayer.h Thu Feb 10 14:50:28 2011 (r32879)
+++ trunk/cfg-mplayer.h Thu Feb 10 20:20:36 2011 (r32880)
@@ -235,6 +235,7 @@ const m_option_t mplayer_opts[]={
#endif
{"osdlevel", &osd_level, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL},
{"osd-duration", &osd_duration, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
+ {"osd-fractions", &osd_fractions, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL},
#ifdef CONFIG_MENU
{"menu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nomenu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
Modified: trunk/mplayer.c
==============================================================================
--- trunk/mplayer.c Thu Feb 10 14:50:28 2011 (r32879)
+++ trunk/mplayer.c Thu Feb 10 20:20:36 2011 (r32880)
@@ -212,6 +212,8 @@ int osd_level=1;
// if nonzero, hide current OSD contents when GetTimerMS() reaches this
unsigned int osd_visible;
int osd_duration = 1000;
+int osd_fractions = 0; // determines how fractions of seconds are displayed
+ // on OSD
int term_osd = 1;
static char* term_osd_esc = "\x1b[A\r\x1b[K";
@@ -1570,6 +1572,7 @@ static void update_osd_msg(void) {
int len = demuxer_get_time_length(mpctx->demuxer);
int percentage = -1;
char percentage_text[10];
+ char fractions_text[4];
int pts = demuxer_get_current_time(mpctx->demuxer);
if (mpctx->osd_show_percentage)
@@ -1580,15 +1583,38 @@ static void update_osd_msg(void) {
else
percentage_text[0] = 0;
+ if (osd_fractions==1) {
+ //print fractions as sub-second timestamp
+ snprintf(fractions_text, sizeof(fractions_text), ".%02d",
+ (int)( (mpctx->sh_video->pts - pts)* 100 + 0.5)
+ % 100);
+ } else if (osd_fractions==2) {
+ //print fractions by estimating the frame count within the
+ //second
+
+ //rounding or cutting off numbers after the decimal point
+ //causes problems because of float's precision and movies,
+ //whose first frame is not exactly at timestamp 0. Therefore,
+ //we add 0.2 and cut off at the decimal point, which proved
+ //as good heuristic
+ snprintf(fractions_text, sizeof(fractions_text), ".%02d",
+ (int) ( ( mpctx->sh_video->pts - pts ) *
+ mpctx->sh_video->fps + 0.2 ) );
+ } else {
+ //do not print fractions
+ fractions_text[0] = 0;
+ }
+
if (osd_level == 3)
snprintf(osd_text_timer, 63,
- "%c %02d:%02d:%02d / %02d:%02d:%02d%s",
+ "%c %02d:%02d:%02d%s / %02d:%02d:%02d%s",
mpctx->osd_function,pts/3600,(pts/60)%60,pts%60,
- len/3600,(len/60)%60,len%60,percentage_text);
+ fractions_text,len/3600,(len/60)%60,len%60,
+ percentage_text);
else
- snprintf(osd_text_timer, 63, "%c %02d:%02d:%02d%s",
+ snprintf(osd_text_timer, 63, "%c %02d:%02d:%02d%s%s",
mpctx->osd_function,pts/3600,(pts/60)%60,
- pts%60,percentage_text);
+ pts%60,fractions_text,percentage_text);
} else
osd_text_timer[0]=0;
More information about the MPlayer-cvslog
mailing list