[MPlayer-dev-eng] [PATCH] Allow aspect change in TS and DVB

Carl Eugen Hoyos cehoyos at ag.or.at
Tue Apr 25 03:56:09 CEST 2006


Hi!

I posted a bug report last week on users that aspect changes in dvb are not
supported by mplayer.

Following fix allows MPEG2 transport streams to change aspect when using -vc
libmpeg2. Tested with the file I uploaded to incoming/aspect.ts and DVB.

Hope the patch is correct, Carl Eugen Hoyos



Index: libmpdemux/demuxer.h
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demuxer.h,v
retrieving revision 1.93
diff -u -r1.93 demuxer.h
--- libmpdemux/demuxer.h        24 Apr 2006 10:58:40 -0000      1.93
+++ libmpdemux/demuxer.h        25 Apr 2006 01:45:25 -0000
@@ -319,6 +319,7 @@
 char* demux_info_get(demuxer_t *demuxer, char *opt);
 int demux_info_print(demuxer_t *demuxer);
 int demux_control(demuxer_t *demuxer, int cmd, void *arg);
+void fill_aspect_info (float * aspect);

 #ifdef HAVE_OGGVORBIS
 /* Found in demux_ogg.c */
Index: libmpdemux/video.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/video.c,v
retrieving revision 1.62
diff -u -r1.62 video.c
--- libmpdemux/video.c  23 Apr 2006 12:29:10 -0000      1.62
+++ libmpdemux/video.c  25 Apr 2006 01:45:26 -0000
@@ -328,32 +328,7 @@
 //   printf("picture.fps=%d\n",picture.fps);

    // fill aspect info:
-   switch(picture.aspect_ratio_information){
-     case 2:  // PAL/NTSC SVCD/DVD 4:3
-     case 8:  // PAL VCD 4:3
-     case 12: // NTSC VCD 4:3
-       sh_video->aspect=4.0/3.0;
-     break;
-     case 3:  // PAL/NTSC Widescreen SVCD/DVD 16:9
-     case 6:  // (PAL?)/NTSC Widescreen SVCD 16:9
-       sh_video->aspect=16.0/9.0;
-     break;
-     case 4:  // according to ISO-138182-2 Table 6.3
-       sh_video->aspect=2.21;
-       break;
-     case 9: // Movie Type ??? / 640x480
-       sh_video->aspect=0.0;
-     break;
-     default:
-       mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Detected unknown aspect_ratio_information
in mpeg sequence header.\n"
-               "Please report the aspect value (%i) along with the movie type
(VGA,PAL,NTSC,"
-               "SECAM) and the movie resolution (720x576,352x240,480x480,...)
to the MPlayer"
-               " developers, so that we can add support for it!\nAssuming 1:1
aspect for now.\n",
-               picture.aspect_ratio_information);
-     case 1:  // VGA 1:1 - do not prescale
-       sh_video->aspect=0.0;
-     break;
-   }
+    fill_aspect_info (&sh_video->aspect);
    // display info:
    sh_video->format=picture.mpeg1?0x10000001:0x10000002; // mpeg video
    sh_video->fps=picture.fps;
@@ -387,6 +362,35 @@
 return 1;
 }

+void fill_aspect_info (float * aspect){
+    switch(picture.aspect_ratio_information){
+        case 2:  // PAL/NTSC SVCD/DVD 4:3
+        case 8:  // PAL VCD 4:3
+        case 12: // NTSC VCD 4:3
+            *aspect=4.0/3.0;
+        break;
+        case 3:  // PAL/NTSC Widescreen SVCD/DVD 16:9
+        case 6:  // (PAL?)/NTSC Widescreen SVCD 16:9
+            *aspect=16.0/9.0;
+        break;
+        case 4:  // according to ISO-138182-2 Table 6.3
+            *aspect=2.21;
+        break;
+        case 9: // Movie Type ??? / 640x480
+            *aspect=0.0;
+        break;
+        default:
+            mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Detected unknown
aspect_ratio_information in mpeg sequence header.\n"
+               "Please report the aspect value (%i) along with the movie type
(VGA,PAL,NTSC,"
+               "SECAM) and the movie resolution (720x576,352x240,480x480,...)
to the MPlayer"
+               " developers, so that we can add support for it!\nAssuming 1:1
aspect for now.\n",
+               picture.aspect_ratio_information);
+        case 1:  // VGA 1:1 - do not prescale
+       *aspect=0.0;
+        break;
+    }
+}
+
 void ty_processuserdata( unsigned char* buf, int len );

 static void process_userdata(unsigned char* buf,int len){
Index: libmpcodecs/vd.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpcodecs/vd.c,v
retrieving revision 1.84
diff -u -r1.84 vd.c
--- libmpcodecs/vd.c    24 Mar 2006 08:12:02 -0000      1.84
+++ libmpcodecs/vd.c    25 Apr 2006 01:45:26 -0000
@@ -289,6 +289,8 @@
     }
     if(sh->aspect>0.01){
       int w;
+      if (sh->ds->demuxer->file_format == DEMUXER_TYPE_MPEG_TS && sh->format ==
0x10000002)
+        fill_aspect_info(&sh->aspect);
       mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_MovieAspectIsSet,sh->aspect);
       w=(int)((float)screen_size_y*sh->aspect); w+=w%2; // round
       // we don't like horizontal downscale || user forced width:





More information about the MPlayer-dev-eng mailing list