From d22813ef97a4fefba5106f468ea5a389b7cbe3b6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 2 Jul 2020 11:21:27 +0300 Subject: [PATCH] element: When removing a ghost pad also unset its target Otherwise the proxy pad of the ghost pad still stays linked to some element inside the bin, which is not allowed anymore according to the topology. In 2.0 this should be fixed more generically from inside GstGhostPad but currently there is no way to get notified that the ghost pad is unparented. Part-of: --- gst/gstelement.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gst/gstelement.c b/gst/gstelement.c index 9012a7d..0f48ea8 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -95,6 +95,7 @@ #include "gstbus.h" #include "gsterror.h" #include "gstevent.h" +#include "gstghostpad.h" #include "gstutils.h" #include "gstinfo.h" #include "gstquark.h" @@ -884,6 +885,16 @@ gst_element_remove_pad (GstElement * element, GstPad * pad) gst_object_unref (peer); } + /* if this is a ghost pad we also need to unset the target or it + * will stay linked although not allowed according to the topology. + * + * FIXME 2.0: Do this generically somehow from inside GstGhostPad + * when it gets unparented. + */ + if (GST_IS_GHOST_PAD (pad)) { + gst_ghost_pad_set_target (GST_GHOST_PAD (pad), NULL); + } + GST_OBJECT_LOCK (element); /* remove it from the list */ switch (gst_pad_get_direction (pad)) { -- 2.7.4