summaryrefslogtreecommitdiff
path: root/gst/playback/gststreamsynchronizer.c
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2015-06-22 20:54:18 +0200
committerSebastian Dröge <sebastian@centricular.com>2015-06-22 20:54:18 +0200
commitbd508a343f1ee729a71fecce9df18b4321aea2ee (patch)
treedf3e0893394c77bc19a70b9d4569561853583529 /gst/playback/gststreamsynchronizer.c
parent152534611d1820238e90339d67b7aafc20cff667 (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.c9
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;
}