From 82a4e7e773602c1f6d631007db57ca785a7009d0 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Tue, 2 Mar 2021 21:35:00 +0900 Subject: [PATCH] d3d11convert: Prefer video processor over shader ... if video processor was used previously. Otherwise, switching between video processor and shader would result in inconsistent output image quality. Part-of: --- sys/d3d11/gstd3d11colorconvert.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/d3d11/gstd3d11colorconvert.c b/sys/d3d11/gstd3d11colorconvert.c index 58635c19cc..ac5aa3a4ce 100644 --- a/sys/d3d11/gstd3d11colorconvert.c +++ b/sys/d3d11/gstd3d11colorconvert.c @@ -66,6 +66,7 @@ struct _GstD3D11BaseConvert GstD3D11ColorConverter *converter; GstD3D11VideoProcessor *processor; + gboolean processor_in_use; /* used for fallback texture copy */ D3D11_BOX in_src_box; @@ -309,6 +310,8 @@ gst_d3d11_base_convert_clear_shader_resource (GstD3D11BaseConvert * self) g_clear_pointer (&self->converter, gst_d3d11_color_converter_free); g_clear_pointer (&self->processor, gst_d3d11_video_processor_free); + + self->processor_in_use = FALSE; } static void @@ -1598,7 +1601,8 @@ gst_d3d11_base_convert_prefer_video_processor (GstD3D11BaseConvert * self, /* If we can use shader, we prefer to use shader instead of video processor * because video processor implementation is vendor dependent * and not flexible */ - if (gst_d3d11_memory_get_shader_resource_view_size (dmem)) + if (!self->processor_in_use && + gst_d3d11_memory_get_shader_resource_view_size (dmem)) return FALSE; if (!gst_d3d11_video_processor_get_input_view (self->processor, dmem)) @@ -1695,6 +1699,8 @@ gst_d3d11_base_convert_transform (GstBaseTransform * trans, goto conversion_failed; } + self->processor_in_use = TRUE; + gst_d3d11_buffer_unmap (inbuf, in_map); gst_d3d11_buffer_unmap (outbuf, out_map);