summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorSeungha Yang <seungha@centricular.com>2021-03-02 21:35:00 +0900
committerSeungha Yang <seungha@centricular.com>2021-03-02 23:10:47 +0900
commit82a4e7e773602c1f6d631007db57ca785a7009d0 (patch)
tree80cf77f312c535bdfc1756c3a4ba202e321c4810 /sys
parent6ba1ee8d0ff539a79e4191901445802eda3dfbf4 (diff)
downloadgstreamer-plugins-bad-82a4e7e773602c1f6d631007db57ca785a7009d0.tar.gz
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2051>
Diffstat (limited to 'sys')
-rw-r--r--sys/d3d11/gstd3d11colorconvert.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/d3d11/gstd3d11colorconvert.c b/sys/d3d11/gstd3d11colorconvert.c
index 58635c19c..ac5aa3a4c 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);