d3d11decoder: Always use render-target bind flag for downstream pool

To convert decoded texture into other format, downstream would use
video processor instead of shader. In order for downstream to
be able to use video processor even if we copied decoded texture
into downstream pool, we should set this bind flag. Otherwise,
downstream would keep switching video processor and shader
to convert format which would result in inconsistent image quality.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2051>
This commit is contained in:
Seungha Yang 2021-03-02 20:45:22 +09:00
parent a4c6130477
commit 98929c8157

View file

@ -1641,11 +1641,11 @@ gst_d3d11_decoder_decide_allocation (GstVideoDecoder * decoder,
return FALSE; return FALSE;
} }
if (codec == GST_D3D11_CODEC_VP9) {
/* Needs render target bind flag so that it can be used for /* Needs render target bind flag so that it can be used for
* output of shader pipeline if internal resizing is required */ * output of shader pipeline if internal resizing is required.
* Also, downstream can keep using video processor even if we copy
* some decoded textures into downstream buffer */
d3d11_params->desc[0].BindFlags |= D3D11_BIND_RENDER_TARGET; d3d11_params->desc[0].BindFlags |= D3D11_BIND_RENDER_TARGET;
}
gst_buffer_pool_config_set_d3d11_allocation_params (config, d3d11_params); gst_buffer_pool_config_set_d3d11_allocation_params (config, d3d11_params);
gst_d3d11_allocation_params_free (d3d11_params); gst_d3d11_allocation_params_free (d3d11_params);