changeset 10081:0181d5fc8474

Support for aspect ratio set via DisplayWidth/DisplayHeight.
author mosu
date Tue, 06 May 2003 20:40:24 +0000
parents 312eb2923169
children 1c95e3d5888a
files libmpdemux/demux_mkv.cpp
diffstat 1 files changed, 28 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/demux_mkv.cpp	Tue May 06 15:28:01 2003 +0000
+++ b/libmpdemux/demux_mkv.cpp	Tue May 06 20:40:24 2003 +0000
@@ -135,7 +135,7 @@
   char type; // 'v' = video, 'a' = audio, 's' = subs
   
   char v_fourcc[5];
-  uint32_t v_width, v_height;
+  uint32_t v_width, v_height, v_dwidth, v_dheight;
   float v_frate;
 
   uint16_t a_formattag;
@@ -393,6 +393,11 @@
           continue;
         }
 
+        if (t->v_dwidth == 0)
+          t->v_dwidth = t->v_width;
+        if (t->v_dheight == 0)
+          t->v_dheight = t->v_height;
+
         // This track seems to be ok.
         t->ok = 1;
 
@@ -1132,6 +1137,24 @@
                            "%u\n", track->v_height);
 
                   } else if (EbmlId(*l4) ==
+                             KaxVideoDisplayWidth::ClassInfos.GlobalId) {
+                    KaxVideoDisplayWidth &width =
+                      *static_cast<KaxVideoDisplayWidth *>(l4);
+                    width.ReadData(es->I_O());
+                    track->v_dwidth = uint16(width);
+                    mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] |   + Display width: "
+                           "%u\n", track->v_dwidth);
+
+                  } else if (EbmlId(*l4) ==
+                             KaxVideoDisplayHeight::ClassInfos.GlobalId) {
+                    KaxVideoDisplayHeight &height =
+                      *static_cast<KaxVideoDisplayHeight *>(l4);
+                    height.ReadData(es->I_O());
+                    track->v_dheight = uint16(height);
+                    mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] |   + Display height: "
+                           "%u\n", track->v_dheight);
+
+                  } else if (EbmlId(*l4) ==
                              KaxVideoFrameRate::ClassInfos.GlobalId) {
                     KaxVideoFrameRate &framerate =
                       *static_cast<KaxVideoFrameRate *>(l4);
@@ -1423,8 +1446,10 @@
       sh_v->format = sh_v->bih->biCompression;
       sh_v->fps = track->v_frate;
       sh_v->frametime = 1 / track->v_frate;
-      sh_v->disp_w = sh_v->bih->biWidth;
-      sh_v->disp_h = sh_v->bih->biHeight;
+      sh_v->disp_w = track->v_width;
+      sh_v->disp_h = track->v_height;
+      sh_v->aspect = (float)track->v_dwidth / (float)track->v_dheight;
+      mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] Aspect: %f\n", sh_v->aspect);
 
       demuxer->video->id = track->tnum;
       demuxer->video->sh = sh_v;