From 34ea7928810b1b6b92e9b7a9f4c85c8f86a9bd18 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Thu, 19 Jan 2023 16:27:57 +0100 Subject: [PATCH] decodebin3: Don't intercept queries if no parsebin present If we don't use a parsebin, we forward the queries as-is from upstream. There is no reconfiguration possible within identity. Part-of: --- .../gst/playback/gstdecodebin3-parse.c | 60 ++++++++++++---------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/subprojects/gst-plugins-base/gst/playback/gstdecodebin3-parse.c b/subprojects/gst-plugins-base/gst/playback/gstdecodebin3-parse.c index 95b8e86..abf68ee 100644 --- a/subprojects/gst-plugins-base/gst/playback/gstdecodebin3-parse.c +++ b/subprojects/gst-plugins-base/gst/playback/gstdecodebin3-parse.c @@ -320,35 +320,39 @@ parse_chain_output_probe (GstPad * pad, GstPadProbeInfo * info, break; } } else if (GST_IS_QUERY (GST_PAD_PROBE_INFO_DATA (info))) { - GstQuery *q = GST_PAD_PROBE_INFO_QUERY (info); - GST_DEBUG_OBJECT (pad, "Seeing query %s", GST_QUERY_TYPE_NAME (q)); - /* If we have a parser, we want to reply to the caps query */ - /* FIXME: Set a flag when the input stream is created for - * streams where we shouldn't reply to these queries */ - if (GST_QUERY_TYPE (q) == GST_QUERY_CAPS - && (info->type & GST_PAD_PROBE_TYPE_PULL)) { - GstCaps *filter = NULL; - GstCaps *allowed; - gst_query_parse_caps (q, &filter); - allowed = get_parser_caps_filter (input->dbin, filter); - GST_DEBUG_OBJECT (pad, - "Intercepting caps query, setting %" GST_PTR_FORMAT, allowed); - gst_query_set_caps_result (q, allowed); - gst_caps_unref (allowed); - ret = GST_PAD_PROBE_HANDLED; - } else if (GST_QUERY_TYPE (q) == GST_QUERY_ACCEPT_CAPS) { - GstCaps *prop = NULL; - gst_query_parse_accept_caps (q, &prop); - /* Fast check against target caps */ - if (gst_caps_can_intersect (prop, input->dbin->caps)) { - gst_query_set_accept_caps_result (q, TRUE); - } else { - gboolean accepted = check_parser_caps_filter (input->dbin, prop); - /* check against caps filter */ - gst_query_set_accept_caps_result (q, accepted); - GST_DEBUG_OBJECT (pad, "ACCEPT_CAPS query, returning %d", accepted); + if (input->input && input->input->identity) { + GST_DEBUG_OBJECT (pad, "Letting query through"); + } else { + GstQuery *q = GST_PAD_PROBE_INFO_QUERY (info); + GST_DEBUG_OBJECT (pad, "Seeing query %" GST_PTR_FORMAT, q); + /* If we have a parser, we want to reply to the caps query */ + /* FIXME: Set a flag when the input stream is created for + * streams where we shouldn't reply to these queries */ + if (GST_QUERY_TYPE (q) == GST_QUERY_CAPS + && (info->type & GST_PAD_PROBE_TYPE_PULL)) { + GstCaps *filter = NULL; + GstCaps *allowed; + gst_query_parse_caps (q, &filter); + allowed = get_parser_caps_filter (input->dbin, filter); + GST_DEBUG_OBJECT (pad, + "Intercepting caps query, setting %" GST_PTR_FORMAT, allowed); + gst_query_set_caps_result (q, allowed); + gst_caps_unref (allowed); + ret = GST_PAD_PROBE_HANDLED; + } else if (GST_QUERY_TYPE (q) == GST_QUERY_ACCEPT_CAPS) { + GstCaps *prop = NULL; + gst_query_parse_accept_caps (q, &prop); + /* Fast check against target caps */ + if (gst_caps_can_intersect (prop, input->dbin->caps)) { + gst_query_set_accept_caps_result (q, TRUE); + } else { + gboolean accepted = check_parser_caps_filter (input->dbin, prop); + /* check against caps filter */ + gst_query_set_accept_caps_result (q, accepted); + GST_DEBUG_OBJECT (pad, "ACCEPT_CAPS query, returning %d", accepted); + } + ret = GST_PAD_PROBE_HANDLED; } - ret = GST_PAD_PROBE_HANDLED; } } -- 2.7.4