mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +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)
|
if (factories == NULL)
|
||||||
goto expose_pad;
|
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 (factories->n_values == 0) {
|
||||||
/* if not we have a unhandled type with no compatible factories */
|
|
||||||
g_value_array_free (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);
|
gst_object_unref (parsepad);
|
||||||
goto unknown_type;
|
goto unknown_type;
|
||||||
}
|
}
|
||||||
|
@ -3979,8 +4001,10 @@ gst_parse_pad_stream_start_event (GstParsePad * parsepad, GstEvent * event)
|
||||||
GST_PTR_FORMAT, caps);
|
GST_PTR_FORMAT, caps);
|
||||||
|
|
||||||
if (repeat_event) {
|
if (repeat_event) {
|
||||||
|
GST_LOG_OBJECT (parsepad, "Using previously created GstStream");
|
||||||
stream = gst_object_ref (parsepad->active_stream);
|
stream = gst_object_ref (parsepad->active_stream);
|
||||||
} else {
|
} else {
|
||||||
|
GST_LOG_OBJECT (parsepad, "Creating unknown GstStream");
|
||||||
stream =
|
stream =
|
||||||
gst_stream_new (stream_id, NULL, GST_STREAM_TYPE_UNKNOWN,
|
gst_stream_new (stream_id, NULL, GST_STREAM_TYPE_UNKNOWN,
|
||||||
streamflags);
|
streamflags);
|
||||||
|
|
|
@ -643,7 +643,7 @@ play_bus_msg (GstBus * bus, GstMessage * msg, gpointer user_data)
|
||||||
} else if (type & GST_STREAM_TYPE_TEXT) {
|
} else if (type & GST_STREAM_TYPE_TEXT) {
|
||||||
play->cur_text_sid = g_strdup (stream_id);
|
play->cur_text_sid = g_strdup (stream_id);
|
||||||
} else {
|
} 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);
|
gst_object_unref (stream);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue