collectpads: When seek flushed, immediately set eospads to 0
authorMathieu Duponchelle <mduponchelle1@gmail.com>
Wed, 19 Feb 2014 01:27:36 +0000 (02:27 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Sun, 16 Mar 2014 17:15:17 +0000 (18:15 +0100)
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

index 669ac4c..72c539f 100644 (file)
@@ -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);