decodebin3: When reconfiguring a slot make sure that the ghostpad is unlinked
authorSebastian Dröge <sebastian@centricular.com>
Thu, 24 Dec 2020 09:44:27 +0000 (11:44 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 24 Dec 2020 09:44:27 +0000 (11:44 +0200)
This was only taken care of previously if there was a decoder before.
However if previously a decoder was not needed then the ghostpad
would've been linked directly to the slot's srcpad.

Reconfiguring the slot requires this to be undone so that linking can
happen normally.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/985>

gst/playback/gstdecodebin3.c

index b932903..dc7e217 100644 (file)
@@ -2284,6 +2284,15 @@ reconfigure_output_stream (DecodebinOutputStream * output,
     gst_bin_remove ((GstBin *) dbin, output->decoder);
     output->decoder = NULL;
     output->decoder_latency = GST_CLOCK_TIME_NONE;
+  } else if (output->linked) {
+    /* Otherwise if we have no decoder yet but the output is linked make
+     * sure that the ghost pad is really unlinked in case no decoder was
+     * needed previously */
+    if (!gst_ghost_pad_set_target ((GstGhostPad *) output->src_pad, NULL)) {
+      GST_ERROR_OBJECT (dbin, "Could not release ghost pad");
+      gst_caps_unref (new_caps);
+      goto cleanup;
+    }
   }
 
   gst_caps_unref (new_caps);