From bde900dc6e75b30c771d0fa1ed1a1096e7b57f91 Mon Sep 17 00:00:00 2001 From: Jun Xie Date: Sun, 22 Oct 2017 18:26:12 +0800 Subject: qtdemux: reset reused QtDemuxStream while parsing a new 'trak' if QtDemuxStream is reused, then we need to reset it. https://bugzilla.gnome.org/show_bug.cgi?id=788759 --- gst/isomp4/qtdemux.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index 9dc3af56e..ded00c409 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -2532,7 +2532,7 @@ gst_qtdemux_stream_clear (GstQTDemux * qtdemux, QtDemuxStream * stream) } static void -gst_qtdemux_stream_free (GstQTDemux * qtdemux, QtDemuxStream * stream) +gst_qtdemux_stream_reset (GstQTDemux * qtdemux, QtDemuxStream * stream) { gint i; gst_qtdemux_stream_clear (qtdemux, stream); @@ -2543,12 +2543,21 @@ gst_qtdemux_stream_free (GstQTDemux * qtdemux, QtDemuxStream * stream) entry->caps = NULL; } } + g_free (stream->stsd_entries); + stream->stsd_entries = NULL; + stream->stsd_entries_length = 0; +} + + +static void +gst_qtdemux_stream_free (GstQTDemux * qtdemux, QtDemuxStream * stream) +{ + gst_qtdemux_stream_reset(qtdemux, stream); gst_tag_list_unref (stream->stream_tags); if (stream->pad) { gst_element_remove_pad (GST_ELEMENT_CAST (qtdemux), stream->pad); gst_flow_combiner_remove_pad (qtdemux->flowcombiner, stream->pad); } - g_free (stream->stsd_entries); g_free (stream); } @@ -9613,11 +9622,8 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) goto skip_track; } - stream->stream_tags = gst_tag_list_make_writable (stream->stream_tags); - - /* flush samples data from this track from previous moov */ - gst_qtdemux_stream_flush_segments_data (qtdemux, stream); - gst_qtdemux_stream_flush_samples_data (qtdemux, stream); + /* reset reused stream */ + gst_qtdemux_stream_reset(qtdemux, stream); } /* need defaults for fragments */ qtdemux_parse_trex (qtdemux, stream, &dummy, &dummy, &dummy); -- cgit v1.2.1