encodebin: Fix pad removal for encodebin vs encodebin2
authorEdward Hervey <edward@centricular.com>
Wed, 17 Apr 2024 07:46:35 +0000 (09:46 +0200)
committerBackport Bot <gitlab-backport-bot@gstreamer-foundation.org>
Sun, 15 Sep 2024 18:55:23 +0000 (19:55 +0100)
Clarify the fact that `encodebasebin->src_pad` is set when using a static source
pad (`encodebin`) and when not set it's dynamically added source
pads (`encodebin2`).

Fixes usage of encodebin2 when profiles are updated

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7523>

subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.c

index 23f0f83e843ef5806382311ac9647f19e05c8e60..52f0a20e051d1653a055c8b6a04a32ba8ac4f79d 100644 (file)
@@ -1562,6 +1562,7 @@ _create_stream_group (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
     gst_object_unref (muxerpad);
   } else {
     if (ebin->srcpad) {
+      /* encodebin static source pad */
       gst_ghost_pad_set_target (GST_GHOST_PAD (ebin->srcpad), srcpad);
     } else {
       if (!gst_encode_base_bin_create_src_pad (ebin, srcpad)) {
@@ -2272,6 +2273,7 @@ create_elements_and_pads (GstEncodeBaseBin * ebin)
      * but for the time being let's assume it's a static pad :) */
     muxerpad = gst_element_get_static_pad (muxer, "src");
     if (ebin->srcpad) {
+      /* encodebin static source pad */
       if (G_UNLIKELY (muxerpad == NULL))
         goto no_muxer_pad;
       if (!gst_ghost_pad_set_target (GST_GHOST_PAD (ebin->srcpad), muxerpad))
@@ -2551,7 +2553,7 @@ gst_encode_base_bin_tear_down_profile (GstEncodeBaseBin * ebin)
     stream_group_remove (ebin, (StreamGroup *) ebin->streams->data);
 
   if (ebin->srcpad) {
-    /* Set ghostpad target to NULL */
+    /* encodebin static source pad, set ghostpad target to NULL */
     gst_ghost_pad_set_target (GST_GHOST_PAD (ebin->srcpad), NULL);
   }
 
@@ -2564,7 +2566,8 @@ gst_encode_base_bin_tear_down_profile (GstEncodeBaseBin * ebin)
     ebin->muxer = NULL;
   }
 
-  if (!element->srcpads) {
+  if (!ebin->srcpad) {
+    /* encodebin2 dynamic source pads */
     while (element->srcpads)
       gst_element_remove_pad (element, element->srcpads->data);
   }