From d784d59262ebe93d0f7109a5bc2bc59d0f185067 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Wed, 19 Feb 2014 02:27:36 +0100 Subject: [PATCH] collectpads: When seek flushed, immediately set eospads to 0 This prevents situations where a first branch would get seeked and receive a buffer before all branches got seeked, and thus collected would get called based on EOS from the previous segment. As a consequence, during the process of seeking, don't decrease the eospads number when a FLUSH_STOP is received. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=724571 --- libs/gst/base/gstcollectpads.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/gst/base/gstcollectpads.c b/libs/gst/base/gstcollectpads.c index 669ac4c4db..72c539fdbc 100644 --- a/libs/gst/base/gstcollectpads.c +++ b/libs/gst/base/gstcollectpads.c @@ -1734,7 +1734,9 @@ gst_collect_pads_event_default (GstCollectPads * pads, GstCollectData * data, if (!GST_COLLECT_PADS_STATE_IS_SET (data, GST_COLLECT_PADS_STATE_WAITING)) pads->priv->queuedpads++; - pads->priv->eospads--; + if (!g_atomic_int_get (&pads->priv->seeking)) { + pads->priv->eospads--; + } GST_COLLECT_PADS_STATE_UNSET (data, GST_COLLECT_PADS_STATE_EOS); } GST_COLLECT_PADS_STREAM_UNLOCK (pads); @@ -1912,6 +1914,8 @@ gst_collect_pads_src_event_default (GstCollectPads * pads, GstPad * pad, case GST_EVENT_SEEK:{ GstSeekFlags flags; + pads->priv->eospads = 0; + GST_INFO_OBJECT (pads, "starting seek"); gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL);