qtdemux: fix subsequent moof parsing after moov with valid samples
authorMatthew Waters <matthew@centricular.com>
Thu, 25 Jun 2020 06:33:04 +0000 (16:33 +1000)
committerMatthew Waters <matthew@centricular.com>
Mon, 21 Sep 2020 02:08:14 +0000 (12:08 +1000)
reset the moof_offset back to its original value like is done in the
error case just before.

Fixes subsequent parsing of a moof following a moov that contains valid
samples in a non-streaming fragmented mp4.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/643>

gst/isomp4/qtdemux.c

index f719617..d4e127b 100644 (file)
@@ -12774,7 +12774,7 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
       qtdemux->moof_offset = offset;
       goto samples_failed;
     }
-    qtdemux->moof_offset = 0;
+    qtdemux->moof_offset = offset;
     /* movie duration more reliable in this case (e.g. mehd) */
     if (qtdemux->segment.duration &&
         GST_CLOCK_TIME_IS_VALID (qtdemux->segment.duration))
@@ -12971,7 +12971,7 @@ qtdemux_prepare_streams (GstQTDemux * qtdemux)
     GST_DEBUG_OBJECT (qtdemux, "track-id %u, fourcc %" GST_FOURCC_FORMAT,
         stream->track_id, GST_FOURCC_ARGS (CUR_STREAM (stream)->fourcc));
 
-    if (qtdemux->fragmented) {
+    if (qtdemux->fragmented && qtdemux->pullbased) {
       /* need all moov samples first */
       GST_OBJECT_LOCK (qtdemux);
       while (stream->n_samples == 0)