qtdemux: Fix order of bitrates in 'btrt' atom
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Tue, 6 Jul 2010 07:51:19 +0000 (13:21 +0530)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 6 Jul 2010 09:33:16 +0000 (10:33 +0100)
There seems to be a bug in libmp4v2 that generates a MPEG4BitRateBox as
(bufferSizeDB, avgBitrate, maxBitrate) instead of (bufferSizeDB,
maxBitrate, avgBitrate), according to the spec. I used the mp4file
output while writing this code, so the order is wrong. This patches
fixes that.

https://bugzilla.gnome.org/show_bug.cgi?id=623654

gst/qtdemux/qtdemux.c

index b9626ed..979497d 100644 (file)
@@ -5385,12 +5385,21 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
                 if (size < 12)
                   break;
 
-                max_bitrate = QT_UINT32 (avc_data + 0xc);
-                avg_bitrate = QT_UINT32 (avc_data + 0x10);
+                max_bitrate = QT_UINT32 (avc_data + 0x10);
+                avg_bitrate = QT_UINT32 (avc_data + 0xc);
 
                 if (!max_bitrate && !avg_bitrate)
                   break;
 
+                /* Some muxers seem to swap the average and maximum bitrates
+                 * (I'm looking at you, YouTube), so we swap for sanity. */
+                if (max_bitrate > 0 && max_bitrate < avg_bitrate) {
+                  guint temp = avg_bitrate;
+
+                  avg_bitrate = max_bitrate;
+                  max_bitrate = temp;
+                }
+
                 if (!list)
                   list = gst_tag_list_new ();