From c70ed4c914d7e1896c467873edeb7309541dff66 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 3 May 2016 21:17:01 -0300 Subject: [PATCH] qtdemux: update segment when new duration is found Otherwise the old segment will have a shorter stop time and would cause the stream to end too early. --- gst/isomp4/qtdemux.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index 7adda9897e..3c0d7d77da 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -525,6 +525,11 @@ static void gst_qtdemux_remove_stream (GstQTDemux * qtdemux, int index); static GstFlowReturn qtdemux_prepare_streams (GstQTDemux * qtdemux); static void qtdemux_do_allocation (GstQTDemux * qtdemux, QtDemuxStream * stream); +static gboolean gst_qtdemux_activate_segment (GstQTDemux * qtdemux, + QtDemuxStream * stream, guint32 seg_idx, GstClockTime offset); +static gboolean gst_qtdemux_stream_update_segment (GstQTDemux * qtdemux, + QtDemuxStream * stream, gint seg_idx, GstClockTime offset, + GstClockTime * _start, GstClockTime * _stop); static gboolean qtdemux_pull_mfro_mfra (GstQTDemux * qtdemux); static void check_update_duration (GstQTDemux * qtdemux, GstClockTime duration); @@ -2874,6 +2879,20 @@ check_update_duration (GstQTDemux * qtdemux, GstClockTime duration) stream->segments[0].stop_time = duration; stream->segments[0].duration = duration; stream->segments[0].media_stop = duration; + + /* let downstream know we possibly have a new stop time */ + if (stream->segment_index != -1) { + GstClockTime pos; + + if (qtdemux->segment.rate >= 0) { + pos = stream->segment.start; + } else { + pos = stream->segment.stop; + } + + gst_qtdemux_stream_update_segment (qtdemux, stream, + stream->segment_index, pos, NULL, NULL); + } } } }