summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorThiago Santos <thiago.sousa.santos@collabora.co.uk>2010-10-04 10:01:19 -0300
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>2010-10-07 11:20:48 -0300
commit6d8cb1f42d4ec6f7683d2e2cf265eeabc92db0df (patch)
treec7d08c015cecce122142b40431ac7d4dfe4595f4 /gst
parent8818ea08bd75b4d5ef13a6055228c2c167d38413 (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.c11
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);
}