parsebin: Don't modify inexistant GstStream
authorEdward Hervey <edward@centricular.com>
Tue, 3 May 2022 14:25:19 +0000 (16:25 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 4 May 2022 07:26:39 +0000 (07:26 +0000)
When handling exposing un-handled streams, we can only replace the GstStream for
those we are creating ourselves (i.e. the fallback collection).

Fixes assertions when the demuxer creates those streams

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

subprojects/gst-plugins-base/gst/playback/gstparsebin.c

index a8dca67..d848094 100644 (file)
@@ -1398,22 +1398,23 @@ analyze_new_pad (GstParseBin * parsebin, GstElement * src, GstPad * pad,
     g_value_array_free (factories);
 
     if (parsebin->expose_allstreams) {
-      GstStream *newstream;
-      GST_LOG_OBJECT (parsepad, "Existing GstStream %" GST_PTR_FORMAT,
-          parsepad->active_stream);
       /* If we expose all streams, we only need to inform the application about
        * a missing handler but still expose it. We also make sure the stream
        * type is unknown. */
-      g_assert (parsepad->active_stream);
-      newstream =
-          gst_stream_new (gst_stream_get_stream_id (parsepad->active_stream),
-          caps, GST_STREAM_TYPE_UNKNOWN,
-          gst_stream_get_stream_flags (parsepad->active_stream));
-      gst_object_replace ((GstObject **) & parsepad->active_stream,
-          (GstObject *) newstream);
-      GST_LOG_OBJECT (parsepad, "New GstStream %" GST_PTR_FORMAT,
-          parsepad->active_stream);
-
+      if (parsepad->in_a_fallback_collection) {
+        GstStream *newstream;
+        GST_LOG_OBJECT (parsepad, "Existing GstStream %" GST_PTR_FORMAT,
+            parsepad->active_stream);
+        g_assert (parsepad->active_stream);
+        newstream =
+            gst_stream_new (gst_stream_get_stream_id (parsepad->active_stream),
+            caps, GST_STREAM_TYPE_UNKNOWN,
+            gst_stream_get_stream_flags (parsepad->active_stream));
+        gst_object_replace ((GstObject **) & parsepad->active_stream,
+            (GstObject *) newstream);
+        GST_LOG_OBJECT (parsepad, "New GstStream %" GST_PTR_FORMAT,
+            parsepad->active_stream);
+      }
       gst_element_post_message (GST_ELEMENT_CAST (parsebin),
           gst_missing_decoder_message_new (GST_ELEMENT_CAST (parsebin), caps));
       goto expose_pad;