--- old/mplayer.c Thu May 9 10:59:07 2002 +++ mplayer.c Fri May 24 15:37:53 2002 @@ -171,6 +175,7 @@ int use_gui=0; +#define MAX_OSD_LEVEL 3 int osd_level=2; // seek: @@ -2050,7 +2055,7 @@ break; case 'o': // toggle OSD if(sh_video) - osd_level=(osd_level+1)%3; + osd_level=(osd_level+1)%(MAX_OSD_LEVEL+1); break; case 'z': sub_delay -= 0.1; @@ -2330,9 +2335,9 @@ if(sh_video) { int v = cmd->args[0].v.i; if(v < 0) - osd_level=(osd_level+1)%3; + osd_level=(osd_level+1)%(MAX_OSD_LEVEL+1); else - osd_level= v > 2 ? 2 : v; + osd_level= v > MAX_OSD_LEVEL ? MAX_OSD_LEVEL : v; } break; case MP_CMD_VOLUME : { int v = cmd->args[0].v.i; @@ -2857,9 +2862,23 @@ if (osd_show_av_delay) { sprintf(osd_text_tmp, "A-V delay: %d ms",(int)(audio_delay*1000)); osd_show_av_delay--; - } else if(osd_level>=2) - sprintf(osd_text_tmp,"%c %02d:%02d:%02d",osd_function,pts/3600,(pts/60)%60,pts%60); - else osd_text_tmp[0]=0; + } else if(osd_level>=2) { + int len=(demuxer->movi_end-demuxer->movi_start)>>8; + int pos=((demuxer->file_format==DEMUXER_TYPE_AVI)?demuxer->filepos:d_video->pos)>>8; + char perc_text_tmp[50]; + if (len && osd_level >= 3) { + sprintf(perc_text_tmp, " - %d%%", pos*100/len); + } else { + sprintf(perc_text_tmp, ""); + } + if (demuxer->file_format == DEMUXER_TYPE_AVI && osd_level >= 3) { + int len=sh_video->video.dwLength/sh_video->fps; + sprintf(osd_text_tmp,"%c %02d:%02d:%02d|%02d:%02d:%02d%s",osd_function,pts/3600,(pts/60)%60,pts%60, + len/3600,(len/60)%60,len%60,perc_text_tmp); + } else { + sprintf(osd_text_tmp,"%c %02d:%02d:%02d%s",osd_function,pts/3600,(pts/60)%60,pts%60,perc_text_tmp); + } + } else osd_text_tmp[0]=0; if(strcmp(vo_osd_text, osd_text_tmp)) { strcpy(vo_osd_text, osd_text_tmp);