mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
parsebin: Expose streams of unknown type
This actually respects the existing `expose-all-streams` property by exposing them and having them present in the stream collection (as streams of type unknown). Fixes #1179 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2323>
This commit is contained in:
parent
087ebb9f4d
commit
c950ba14a3
2 changed files with 27 additions and 3 deletions
|
@ -1371,10 +1371,32 @@ analyze_new_pad (GstParseBin * parsebin, GstElement * src, GstPad * pad,
|
|||
if (factories == NULL)
|
||||
goto expose_pad;
|
||||
|
||||
/* if the array is empty, we have a type for which we have no parser */
|
||||
/* if the array is empty, we have a type for which we have no handler */
|
||||
if (factories->n_values == 0) {
|
||||
/* if not we have a unhandled type with no compatible factories */
|
||||
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);
|
||||
|
||||
gst_element_post_message (GST_ELEMENT_CAST (parsebin),
|
||||
gst_missing_decoder_message_new (GST_ELEMENT_CAST (parsebin), caps));
|
||||
goto expose_pad;
|
||||
}
|
||||
/* Else we will bail out */
|
||||
gst_object_unref (parsepad);
|
||||
goto unknown_type;
|
||||
}
|
||||
|
@ -3979,8 +4001,10 @@ gst_parse_pad_stream_start_event (GstParsePad * parsepad, GstEvent * event)
|
|||
GST_PTR_FORMAT, caps);
|
||||
|
||||
if (repeat_event) {
|
||||
GST_LOG_OBJECT (parsepad, "Using previously created GstStream");
|
||||
stream = gst_object_ref (parsepad->active_stream);
|
||||
} else {
|
||||
GST_LOG_OBJECT (parsepad, "Creating unknown GstStream");
|
||||
stream =
|
||||
gst_stream_new (stream_id, NULL, GST_STREAM_TYPE_UNKNOWN,
|
||||
streamflags);
|
||||
|
|
|
@ -643,7 +643,7 @@ play_bus_msg (GstBus * bus, GstMessage * msg, gpointer user_data)
|
|||
} else if (type & GST_STREAM_TYPE_TEXT) {
|
||||
play->cur_text_sid = g_strdup (stream_id);
|
||||
} else {
|
||||
gst_print ("Unknown stream type with stream-id %s", stream_id);
|
||||
gst_print ("Unknown stream type with stream-id %s\n", stream_id);
|
||||
}
|
||||
gst_object_unref (stream);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue