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;
}
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);