qtdemux: fix subsequent moof parsing after moov with valid samples

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>
This commit is contained in:
Matthew Waters 2020-06-25 16:33:04 +10:00
parent 2b9c465643
commit 868149ca5a

View file

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