From bd508a343f1ee729a71fecce9df18b4321aea2ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 22 Jun 2015 20:54:18 +0200 Subject: [PATCH] streamsynchronizer: Don't wait for sparse streams when doing stream switches Their stream-start event might come a bit later, like just before the first buffer... and queues might run full before that happens. --- gst/playback/gststreamsynchronizer.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c index 5d72d5652a..d417670376 100644 --- a/gst/playback/gststreamsynchronizer.c +++ b/gst/playback/gststreamsynchronizer.c @@ -71,6 +71,8 @@ typedef struct gboolean seen_data; GstClockTime gap_duration; + GstStreamFlags flags; + GCond stream_finish_cond; /* seqnum of the previously received STREAM_START @@ -298,6 +300,8 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, break; } + gst_event_parse_stream_flags (event, &stream->flags); + if ((have_group_id && stream->group_id != group_id) || (!have_group_id && stream->stream_start_seqnum != seqnum)) { stream->is_eos = FALSE; @@ -342,8 +346,9 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, for (l = self->streams; l; l = l->next) { GstStream *ostream = l->data; - all_wait = all_wait && ostream->wait && (!have_group_id - || ostream->group_id == group_id); + all_wait = all_wait && ((ostream->flags & GST_STREAM_FLAG_SPARSE) + || (ostream->wait && (!have_group_id + || ostream->group_id == group_id))); if (!all_wait) break; }