mplayer - pozice titulku

Jindrich Makovicka makovick na kmlinux.fjfi.cvut.cz
Středa Květen 29 17:04:39 CEST 2002


Tomas Konir wrote:
> On Wed, 29 May 2002, marek cervenka wrote:
> 
> 
>>zdravim,
>>
>>chtel bych se zeptat zda nekdo resil problem s umistenim titulku v 
>>mplayeru
>>standartne mplayer zobrazuje titulky v OSD primo ve filmu
>>s pozici lze jeste hybat parametrem -subpos (nicmene to neni to prave 
>>orechove)
>>vetsina filmu ma nahore a dole cerny pruh, v kterem by titulky byly 
>>asi lepe citelnejsi (myslim ze na win to umi napr. mdvd)
>>
>>diky za pripadne info
>>
> 
> 
> Resil jsem to a napsal maly patch, ktery pridava dolu prostor na titulky.
> je napsany pro XV a X11, ale nemel jsem cas ho napsat tak, aby fungoval i 
> pri pouziti GUI. Pridava dva parametry -subbox "siclo v % z vysky filmu) a 
> -autosubbox (prida tak velky prostor, aby dosahl rozmery monitoru).
> K nalezeni je na http://molly.vabo.cz/~moje/mplayer-subbox.diff a je 
> oproti CVS (zatim ho udrzuju). Titulky se daji nahoru a dolu posouvat 
> klavesami 'r' a 't' (ale to umi mplayer sam o sobe).
> 
> 	MOJE
> 
> 

Ja to resim jeste trivialnejsim patchem (viz priloha) - kdyz zadate 
parametr -blackstripes, tak se obraz doplni o cerne pruhy (pokud je to 
potreba). krome toho jeste pridava jeden OSD level navic, ktery 
zobrazuje i procenta a delku videa. Je to sice prasarna, ale zase 
funguje i s GUI.

-- 
Jindrich Makovicka
------------- další část ---------------
diff -ur vanilla/MPlayer-0.90pre4/cfg-mplayer.h MPlayer-0.90pre4/cfg-mplayer.h
--- vanilla/MPlayer-0.90pre4/cfg-mplayer.h	Mon May 13 00:17:28 2002
+++ MPlayer-0.90pre4/cfg-mplayer.h	Wed May 29 14:02:23 2002
@@ -98,6 +98,7 @@
 
 /* from libvo/aspect.c */
 extern float monitor_aspect;
+extern int black_stripes;
 
 /* from dec_audio, currently used for ac3surround decoder only */
 extern int audio_output_channels;
@@ -219,6 +220,7 @@
 	{"screenh", &vo_screenheight, CONF_TYPE_INT, CONF_RANGE, 0, 4096, NULL},
 	// set aspect ratio of monitor - usefull for 16:9 TVout
 	{"monitoraspect", &monitor_aspect, CONF_TYPE_FLOAT, CONF_RANGE, 0.2, 3.0, NULL},
+        {"blackstripes", &black_stripes, CONF_TYPE_FLAG, 0, 0, 1, NULL},
 	// video mode switching: (x11,xv,dga)
         {"vm", &vidmode, CONF_TYPE_FLAG, 0, 0, 1, NULL},
         {"novm", &vidmode, CONF_TYPE_FLAG, 0, 1, 0, NULL},
Only in MPlayer-0.90pre4: config.h
Only in MPlayer-0.90pre4: config.mak
Only in MPlayer-0.90pre4: help_mp.h
Only in MPlayer-0.90pre4/libao2: config.mak
Only in MPlayer-0.90pre4/libvo: config.mak
diff -ur vanilla/MPlayer-0.90pre4/mplayer.c MPlayer-0.90pre4/mplayer.c
--- vanilla/MPlayer-0.90pre4/mplayer.c	Thu May  9 10:59:07 2002
+++ MPlayer-0.90pre4/mplayer.c	Wed May 29 14:05:34 2002
@@ -171,6 +171,7 @@
 
 int use_gui=0;
 
+#define MAX_OSD_LEVEL 3
 int osd_level=2;
 
 // seek:
@@ -259,6 +260,8 @@
 char *vobsub_name=NULL;
 /*DSP!!char *dsp=NULL;*/
 
+int black_stripes;
+
 extern char *vo_subdevice;
 extern char *ao_subdevice;
 
@@ -1256,6 +1259,15 @@
 current_module="init_video_filters";
 
 sh_video->vfilter=vf_open_filter(NULL,"vo",video_out);
+if (black_stripes) {
+    char exargs[100];
+    if (sh_video->aspect > 0.01) {
+        sprintf(exargs, "-1:%d:-1:-1:1", (int)((double)sh_video->disp_w/monitor_aspect/sh_video->aspect));
+    } else {
+        sprintf(exargs, "-1:%d:-1:-1:1", (int)((double)sh_video->disp_w/monitor_aspect));
+    }
+    sh_video->vfilter=vf_open_filter(sh_video->vfilter,"expand",exargs);
+}
 sh_video->vfilter=append_filters(sh_video->vfilter);
 
 current_module="init_video_codec";
@@ -2050,7 +2062,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 +2342,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 +2869,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);
Only in MPlayer-0.90pre4: mplayer.c.orig
Only in MPlayer-0.90pre4: mplayer.diff
Only in MPlayer-0.90pre4: version.h


Další informace o konferenci Linux