mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 18:05:37 +00:00
collectpads: Don't forward FLUSH_STOP if some input streams are still flushing.
This guarantees that only one FLUSH_STOP event (the last one) will be sent downstream when a flushing seek is being done through collectpads.
This commit is contained in:
parent
ed18ceffe6
commit
e6d949328f
1 changed files with 26 additions and 2 deletions
|
@ -506,6 +506,27 @@ gst_collect_pads_collect_range (GstCollectPads * pads, guint64 offset,
|
|||
return GST_FLOW_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_collect_pads_is_flushing (GstCollectPads * pads)
|
||||
{
|
||||
GSList *walk = pads->data;
|
||||
gboolean res = TRUE;
|
||||
|
||||
GST_COLLECT_PADS_PAD_LOCK (pads);
|
||||
while (walk) {
|
||||
GstCollectData *cdata = walk->data;
|
||||
|
||||
if (cdata->abidata.ABI.flushing)
|
||||
goto done;
|
||||
walk = g_slist_next (walk);
|
||||
}
|
||||
|
||||
res = FALSE;
|
||||
done:
|
||||
GST_COLLECT_PADS_PAD_UNLOCK (pads);
|
||||
return res;
|
||||
}
|
||||
|
||||
/* FIXME, I think this function is used to work around bad behaviour
|
||||
* of elements that add pads to themselves without activating them.
|
||||
*
|
||||
|
@ -1123,8 +1144,11 @@ gst_collect_pads_event (GstPad * pad, GstEvent * event)
|
|||
}
|
||||
GST_OBJECT_UNLOCK (pads);
|
||||
|
||||
/* forward event */
|
||||
goto forward;
|
||||
if (!gst_collect_pads_is_flushing (pads))
|
||||
/* forward event if all pads are no longer flushing */
|
||||
goto forward;
|
||||
gst_event_unref (event);
|
||||
goto done;
|
||||
}
|
||||
case GST_EVENT_EOS:
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue