From 1254dd49bea07d77e687e85b599c958f46f0b24a 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 27997bbecb..d4887e73f9 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp @@ -1189,6 +1189,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; @@ -1205,8 +1206,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);