From 1e381dc1cc081efbfa620672f93dc9ae1028abb2 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Mon, 28 Aug 2023 20:58:22 +0900 Subject: [PATCH] d3d11convert: Passthrough allocation query on same caps Since d3d11convert and its variant elements does not enable basetransform's passthrough, passthrough allocation query needs to be handled manually in order to respect downstream element's min/max buffer requirement. Part-of: --- .../gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp index 548f8b9a87..be228e1761 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp @@ -1312,6 +1312,7 @@ static gboolean gst_d3d11_base_convert_propose_allocation (GstBaseTransform * trans, GstQuery * decide_query, GstQuery * query) { + GstD3D11BaseConvert *self = GST_D3D11_BASE_CONVERT (trans); GstD3D11BaseFilter *filter = GST_D3D11_BASE_FILTER (trans); GstVideoInfo info; GstBufferPool *pool = NULL; @@ -1328,8 +1329,18 @@ gst_d3d11_base_convert_propose_allocation (GstBaseTransform * trans, ID3D11Device *device_handle; if (!GST_BASE_TRANSFORM_CLASS (parent_class)->propose_allocation (trans, - decide_query, query)) + decide_query, query)) { return FALSE; + } + + if (self->same_caps) { + if (!gst_pad_peer_query (trans->srcpad, query)) + return FALSE; + + gst_query_add_allocation_meta (query, + GST_VIDEO_CROP_META_API_TYPE, nullptr); + return TRUE; + } gst_query_parse_allocation (query, &caps, NULL);