From: Thiago Santos Date: Mon, 4 Oct 2010 13:01:19 +0000 (-0300) Subject: streamsynchronizer: Do not advance segment starts beyond stop times X-Git-Tag: RELEASE-0.10.31~113 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6d8cb1f42d4ec6f7683d2e2cf265eeabc92db0df;p=platform%2Fupstream%2Fgst-plugins-base.git streamsynchronizer: Do not advance segment starts beyond stop times Advance stop times too when they are getting higher than the stop time of segments, avoiding assertions. The stop time has to be advanced too so that running time keep in sync for gapless mode. https://bugzilla.gnome.org/show_bug.cgi?id=631312 --- diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c index 5967abd..10cf281 100644 --- a/gst/playback/gststreamsynchronizer.c +++ b/gst/playback/gststreamsynchronizer.c @@ -634,9 +634,13 @@ gst_stream_synchronizer_sink_chain (GstPad * pad, GstBuffer * buffer) /* Is there a 1 second lag? */ if (last_stop != -1 && last_stop + GST_SECOND < timestamp_end) { - gint64 new_start; + gint64 new_start, new_stop; new_start = timestamp_end - GST_SECOND; + if (ostream->segment.stop == -1) + new_stop = -1; + else + new_stop = MAX (new_start, ostream->segment.stop); GST_DEBUG_OBJECT (ostream->sinkpad, "Advancing stream %u from %" GST_TIME_FORMAT " to %" @@ -646,11 +650,10 @@ gst_stream_synchronizer_sink_chain (GstPad * pad, GstBuffer * buffer) gst_pad_push_event (ostream->srcpad, gst_event_new_new_segment_full (TRUE, ostream->segment.rate, ostream->segment.applied_rate, ostream->segment.format, - new_start, ostream->segment.stop, new_start)); + new_start, new_stop, new_start)); gst_segment_set_newsegment_full (&ostream->segment, TRUE, ostream->segment.rate, ostream->segment.applied_rate, - ostream->segment.format, new_start, ostream->segment.stop, - new_start); + ostream->segment.format, new_start, new_stop, new_start); gst_segment_set_last_stop (&ostream->segment, GST_FORMAT_TIME, new_start); }