diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-06-22 20:54:18 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-06-22 20:54:18 +0200 |
commit | bd508a343f1ee729a71fecce9df18b4321aea2ee (patch) | |
tree | df3e0893394c77bc19a70b9d4569561853583529 /gst/playback/gststreamsynchronizer.c | |
parent | 152534611d1820238e90339d67b7aafc20cff667 (diff) |
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.
Diffstat (limited to 'gst/playback/gststreamsynchronizer.c')
-rw-r--r-- | gst/playback/gststreamsynchronizer.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c index 5d72d5652..d41767037 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; } |