mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-03 01:02:19 +00:00
funnel: Release object lock before pushing EOS event
When releasing a pad, if all other pads are EOS, then release the object lock before sending an EOS.
This commit is contained in:
parent
f3b2dd6fa1
commit
5431af5415
1 changed files with 8 additions and 17 deletions
|
@ -256,6 +256,7 @@ gst_funnel_release_pad (GstElement * element, GstPad * pad)
|
|||
{
|
||||
GstFunnel *funnel = GST_FUNNEL (element);
|
||||
GstFunnelPad *fpad = GST_FUNNEL_PAD_CAST (pad);
|
||||
gboolean send_eos = FALSE;
|
||||
|
||||
GST_DEBUG_OBJECT (funnel, "releasing pad");
|
||||
|
||||
|
@ -264,25 +265,15 @@ gst_funnel_release_pad (GstElement * element, GstPad * pad)
|
|||
gst_element_remove_pad (GST_ELEMENT_CAST (funnel), pad);
|
||||
|
||||
GST_OBJECT_LOCK (funnel);
|
||||
if (fpad->got_eos) {
|
||||
GST_DEBUG_OBJECT (funnel,
|
||||
"Pad removed, but was EOS. Skip checking other pads for EOS");
|
||||
goto out;
|
||||
if (!fpad->got_eos && gst_funnel_all_sinkpads_eos_unlocked (funnel)) {
|
||||
GST_DEBUG_OBJECT (funnel, "Pad removed. All others are EOS. Sending EOS");
|
||||
send_eos = TRUE;
|
||||
}
|
||||
|
||||
if (!gst_funnel_all_sinkpads_eos_unlocked (funnel)) {
|
||||
GST_DEBUG_OBJECT (funnel,
|
||||
"Pad removed, but not all others are EOS. Not sending EOS");
|
||||
goto out;
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (funnel, "Pad removed. All others are EOS. Sending EOS");
|
||||
|
||||
if (!gst_pad_push_event (funnel->srcpad, gst_event_new_eos ()))
|
||||
GST_WARNING_OBJECT (funnel, "Failure pushing EOS");
|
||||
|
||||
out:
|
||||
GST_OBJECT_UNLOCK (funnel);
|
||||
|
||||
if (send_eos)
|
||||
if (!gst_pad_push_event (funnel->srcpad, gst_event_new_eos ()))
|
||||
GST_WARNING_OBJECT (funnel, "Failure pushing EOS");
|
||||
}
|
||||
|
||||
static GstCaps *
|
||||
|
|
Loading…
Reference in a new issue