diff options
author | Thiago Santos <thiago.sousa.santos@collabora.co.uk> | 2010-10-04 10:01:19 -0300 |
---|---|---|
committer | Thiago Santos <thiago.sousa.santos@collabora.co.uk> | 2010-10-07 11:20:48 -0300 |
commit | 6d8cb1f42d4ec6f7683d2e2cf265eeabc92db0df (patch) | |
tree | c7d08c015cecce122142b40431ac7d4dfe4595f4 /gst | |
parent | 8818ea08bd75b4d5ef13a6055228c2c167d38413 (diff) |
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
Diffstat (limited to 'gst')
-rw-r--r-- | gst/playback/gststreamsynchronizer.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c index 5967abdf6..10cf2815d 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); } |