parsebin: Don't modify inexistant GstStream

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/2368>
This commit is contained in:
Edward Hervey 2022-05-03 16:25:19 +02:00 committed by Tim-Philipp Müller
parent fb9a116fc5
commit 5f474c3743

View file

@ -1376,22 +1376,23 @@ analyze_new_pad (GstParseBin * parsebin, GstElement * src, GstPad * pad,
g_value_array_free (factories); g_value_array_free (factories);
if (parsebin->expose_allstreams) { 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 /* 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 * a missing handler but still expose it. We also make sure the stream
* type is unknown. */ * type is unknown. */
g_assert (parsepad->active_stream); if (parsepad->in_a_fallback_collection) {
newstream = GstStream *newstream;
gst_stream_new (gst_stream_get_stream_id (parsepad->active_stream), GST_LOG_OBJECT (parsepad, "Existing GstStream %" GST_PTR_FORMAT,
caps, GST_STREAM_TYPE_UNKNOWN, parsepad->active_stream);
gst_stream_get_stream_flags (parsepad->active_stream)); g_assert (parsepad->active_stream);
gst_object_replace ((GstObject **) & parsepad->active_stream, newstream =
(GstObject *) newstream); gst_stream_new (gst_stream_get_stream_id (parsepad->active_stream),
GST_LOG_OBJECT (parsepad, "New GstStream %" GST_PTR_FORMAT, caps, GST_STREAM_TYPE_UNKNOWN,
parsepad->active_stream); 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_element_post_message (GST_ELEMENT_CAST (parsebin),
gst_missing_decoder_message_new (GST_ELEMENT_CAST (parsebin), caps)); gst_missing_decoder_message_new (GST_ELEMENT_CAST (parsebin), caps));
goto expose_pad; goto expose_pad;