mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
d3d11videoprocessor: Add a method for device's conversion caps check
Add a wrapper method for ID3D11VideoProcessorEnumerator1::CheckVideoProcessorFormatConversion. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1723>
This commit is contained in:
parent
1e038ce322
commit
6b992f291b
2 changed files with 48 additions and 1 deletions
|
@ -54,7 +54,9 @@ struct _GstD3D11VideoProcessor
|
||||||
#endif
|
#endif
|
||||||
ID3D11VideoProcessor *processor;
|
ID3D11VideoProcessor *processor;
|
||||||
ID3D11VideoProcessorEnumerator *enumerator;
|
ID3D11VideoProcessorEnumerator *enumerator;
|
||||||
|
#ifdef HAVE_VIDEO_CONTEXT_ONE
|
||||||
|
ID3D11VideoProcessorEnumerator1 *enumerator1;
|
||||||
|
#endif
|
||||||
D3D11_VIDEO_PROCESSOR_CAPS processor_caps;
|
D3D11_VIDEO_PROCESSOR_CAPS processor_caps;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -99,6 +101,13 @@ gst_d3d11_video_processor_new (GstD3D11Device * device, guint in_width,
|
||||||
&desc, &self->enumerator);
|
&desc, &self->enumerator);
|
||||||
if (!gst_d3d11_result (hr, device))
|
if (!gst_d3d11_result (hr, device))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
#ifdef HAVE_VIDEO_CONTEXT_ONE
|
||||||
|
hr = ID3D11VideoContext_QueryInterface (self->enumerator,
|
||||||
|
&IID_ID3D11VideoProcessorEnumerator1, (void **) &self->enumerator1);
|
||||||
|
if (gst_d3d11_result (hr, device)) {
|
||||||
|
GST_DEBUG ("ID3D11VideoProcessorEnumerator1 interface available");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
hr = ID3D11VideoProcessorEnumerator_GetVideoProcessorCaps (self->enumerator,
|
hr = ID3D11VideoProcessorEnumerator_GetVideoProcessorCaps (self->enumerator,
|
||||||
&self->processor_caps);
|
&self->processor_caps);
|
||||||
|
@ -154,6 +163,10 @@ gst_d3d11_video_processor_free (GstD3D11VideoProcessor * processor)
|
||||||
ID3D11VideoProcessor_Release (processor->processor);
|
ID3D11VideoProcessor_Release (processor->processor);
|
||||||
if (processor->enumerator)
|
if (processor->enumerator)
|
||||||
ID3D11VideoProcessorEnumerator_Release (processor->enumerator);
|
ID3D11VideoProcessorEnumerator_Release (processor->enumerator);
|
||||||
|
#ifdef HAVE_VIDEO_CONTEXT_ONE
|
||||||
|
if (processor->enumerator1)
|
||||||
|
ID3D11VideoProcessorEnumerator1_Release (processor->enumerator1);
|
||||||
|
#endif
|
||||||
|
|
||||||
gst_clear_object (&processor->device);
|
gst_clear_object (&processor->device);
|
||||||
g_free (processor);
|
g_free (processor);
|
||||||
|
@ -284,6 +297,34 @@ gst_d3d11_video_processor_set_output_color_space (GstD3D11VideoProcessor *
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (DXGI_HEADER_VERSION >= 4)
|
#if (DXGI_HEADER_VERSION >= 4)
|
||||||
|
gboolean
|
||||||
|
gst_d3d11_video_processor_check_format_conversion (GstD3D11VideoProcessor *
|
||||||
|
processor, DXGI_FORMAT in_format, DXGI_COLOR_SPACE_TYPE in_color_space,
|
||||||
|
DXGI_FORMAT out_format, DXGI_COLOR_SPACE_TYPE out_color_space)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_VIDEO_CONTEXT_ONE
|
||||||
|
HRESULT hr;
|
||||||
|
BOOL supported = TRUE;
|
||||||
|
|
||||||
|
g_return_val_if_fail (processor != NULL, FALSE);
|
||||||
|
|
||||||
|
if (!processor->enumerator1)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
hr = ID3D11VideoProcessorEnumerator1_CheckVideoProcessorFormatConversion
|
||||||
|
(processor->enumerator1, in_format, in_color_space, out_format,
|
||||||
|
out_color_space, &supported);
|
||||||
|
if (!gst_d3d11_result (hr, processor->device)) {
|
||||||
|
GST_WARNING ("Failed to check conversion support");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return supported;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gst_d3d11_video_processor_set_input_dxgi_color_space (GstD3D11VideoProcessor *
|
gst_d3d11_video_processor_set_input_dxgi_color_space (GstD3D11VideoProcessor *
|
||||||
processor, DXGI_COLOR_SPACE_TYPE color_space)
|
processor, DXGI_COLOR_SPACE_TYPE color_space)
|
||||||
|
|
|
@ -52,6 +52,12 @@ gboolean gst_d3d11_video_processor_set_output_color_space (GstD3D11VideoProcess
|
||||||
GstVideoColorimetry * color);
|
GstVideoColorimetry * color);
|
||||||
|
|
||||||
#if (DXGI_HEADER_VERSION >= 4)
|
#if (DXGI_HEADER_VERSION >= 4)
|
||||||
|
gboolean gst_d3d11_video_processor_check_format_conversion (GstD3D11VideoProcessor * processor,
|
||||||
|
DXGI_FORMAT in_format,
|
||||||
|
DXGI_COLOR_SPACE_TYPE in_color_space,
|
||||||
|
DXGI_FORMAT out_format,
|
||||||
|
DXGI_COLOR_SPACE_TYPE out_color_space);
|
||||||
|
|
||||||
gboolean gst_d3d11_video_processor_set_input_dxgi_color_space (GstD3D11VideoProcessor * processor,
|
gboolean gst_d3d11_video_processor_set_input_dxgi_color_space (GstD3D11VideoProcessor * processor,
|
||||||
DXGI_COLOR_SPACE_TYPE color_space);
|
DXGI_COLOR_SPACE_TYPE color_space);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue