qtdemux: fix offset calculation when parsing CENC aux info
authorAlex Ashley <bugzilla@ashley-family.net>
Tue, 18 Aug 2015 09:52:11 +0000 (10:52 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 18 Aug 2015 10:48:03 +0000 (11:48 +0100)
Commit 7d7e54ce6863ff53e188d0276d2651b65082ffdb added support for
DASH common encryption, however commit
bb336840c0b0b02fa18dc4437ce0ded3d9142801 that went onto master
shortly before the CENC commit caused the calculation of the CENC
aux info offset to be incorrect.

The base_offset was being added if present, but if the base_offset
is relative to the start of the moof, the offset was being added twice.
The correct approach is to calculate the offset from the start of the
moof and use that offset when parsing the CENC aux info.

gst/isomp4/qtdemux.c

index 11d98ad..8393959 100644 (file)
@@ -3389,8 +3389,8 @@ qtdemux_parse_moof (GstQTDemux * qtdemux, const guint8 * buffer, guint length,
         g_free (info_sizes);
         goto fail;
       }
-      offset += (base_offset > 0) ? (guint64) base_offset : 0;
-
+      if (base_offset > qtdemux->moof_offset)
+        offset += (guint64) (base_offset - qtdemux->moof_offset);
       if (info_type == FOURCC_cenc && info_type_parameter == 0U) {
         GstByteReader br;
         if (offset > length) {