From e96687d88dc02a65bf80b0a9924b91f2317ca5f5 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Thu, 10 Feb 2022 22:31:06 +0900 Subject: [PATCH] d3d11: Update build-time dependency Remove all the d3d11 and dxgi header version dependent ifdef and bump the minimum requirement to d3d11_4.h and dxgi1_6.h. We are already failing support old Visual Studio (Windows SDK actually) such as Visual Studio 2015. Note that our MinGW toolchain satisfies the requirement. From runtime point of view, this change should be fine since we are checking OS version with IUnknown::QueryInterface() everywhere in order to check API availability Part-of: --- .../gst-libs/gst/d3d11/gstd3d11_fwd.h | 23 ------- .../gst-libs/gst/d3d11/gstd3d11_private.h | 2 + .../gst-libs/gst/d3d11/gstd3d11bufferpool.cpp | 1 + .../gst-libs/gst/d3d11/gstd3d11config.h.meson | 2 - .../gst-libs/gst/d3d11/gstd3d11device.cpp | 8 +-- .../gst-libs/gst/d3d11/gstd3d11format.cpp | 1 + .../gst/d3d11/gstd3d11stagingbufferpool.cpp | 1 + .../gst-libs/gst/d3d11/meson.build | 51 ++------------- .../sys/d3d11/gstd3d11convert.cpp | 3 +- .../sys/d3d11/gstd3d11pluginutils.cpp | 4 -- .../sys/d3d11/gstd3d11pluginutils.h | 6 +- .../sys/d3d11/gstd3d11screencapturedevice.h | 1 + .../sys/d3d11/gstd3d11videoprocessor.cpp | 45 +------------ .../sys/d3d11/gstd3d11videoprocessor.h | 5 +- .../sys/d3d11/gstd3d11window.cpp | 18 +----- .../sys/d3d11/gstd3d11window_dummy.cpp | 3 +- .../sys/d3d11/gstd3d11window_win32.cpp | 10 +-- .../gst-plugins-bad/sys/d3d11/meson.build | 64 +++++-------------- .../gst-plugins-bad/sys/d3d11/plugin.cpp | 44 +++---------- .../sys/mediafoundation/plugin.cpp | 2 + 20 files changed, 54 insertions(+), 240 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11_fwd.h b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11_fwd.h index 4606688dd6..cec4829b3c 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11_fwd.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11_fwd.h @@ -29,31 +29,8 @@ #include #endif -#if (GST_D3D11_HEADER_VERSION >= 4) -#include -#elif (GST_D3D11_HEADER_VERSION >= 3) -#include -#elif (GST_D3D11_HEADER_VERSION >= 2) -#include -#elif (GST_D3D11_HEADER_VERSION >= 1) -#include -#else #include -#endif - -#if (GST_D3D11_DXGI_HEADER_VERSION >= 6) -#include -#elif (GST_D3D11_DXGI_HEADER_VERSION >= 5) -#include -#elif (GST_D3D11_DXGI_HEADER_VERSION >= 4) -#include -#elif (GST_D3D11_DXGI_HEADER_VERSION >= 3) -#include -#elif (GST_D3D11_DXGI_HEADER_VERSION >= 2) -#include -#else #include -#endif G_BEGIN_DECLS diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11_private.h b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11_private.h index cb0392b3c8..0634f19ffe 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11_private.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11_private.h @@ -23,6 +23,8 @@ #include #include #include +#include +#include G_BEGIN_DECLS diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11bufferpool.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11bufferpool.cpp index eb72f2ff7c..7428f8bbe4 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11bufferpool.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11bufferpool.cpp @@ -26,6 +26,7 @@ #include "gstd3d11memory.h" #include "gstd3d11device.h" #include "gstd3d11utils.h" +#include "gstd3d11_private.h" #include diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11config.h.meson b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11config.h.meson index ababe80b6d..dff91664df 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11config.h.meson +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11config.h.meson @@ -7,8 +7,6 @@ G_BEGIN_DECLS -#mesondefine GST_D3D11_DXGI_HEADER_VERSION -#mesondefine GST_D3D11_HEADER_VERSION #mesondefine GST_D3D11_WINAPI_ONLY_APP #mesondefine GST_D3D11_WINAPI_APP diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp index d3b65bd29b..24e26a07f0 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp @@ -277,7 +277,7 @@ gst_d3d11_device_enable_dxgi_debug (void) "DXGIGetDebugInterface", (gpointer *) & GstDXGIGetDebugInterface); if (GstDXGIGetDebugInterface) ret = TRUE; -#elif (GST_D3D11_DXGI_HEADER_VERSION >= 3) +#else ret = TRUE; #endif g_once_init_leave (&_init, 1); @@ -292,12 +292,12 @@ gst_d3d11_device_dxgi_get_device_interface (REFIID riid, void **debug) #if (!GST_D3D11_WINAPI_ONLY_APP) if (GstDXGIGetDebugInterface) { return GstDXGIGetDebugInterface (riid, debug); + } else { + return E_NOINTERFACE; } -#elif (GST_D3D11_DXGI_HEADER_VERSION >= 3) +#else return DXGIGetDebugInterface1 (0, riid, debug); #endif - - return E_NOINTERFACE; } static inline GstDebugLevel diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11format.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11format.cpp index ab70c1adef..ae2a19d4c1 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11format.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11format.cpp @@ -25,6 +25,7 @@ #include "gstd3d11utils.h" #include "gstd3d11device.h" #include "gstd3d11memory.h" +#include "gstd3d11_private.h" #include diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11stagingbufferpool.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11stagingbufferpool.cpp index fc875217a2..92d3a9c98b 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11stagingbufferpool.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11stagingbufferpool.cpp @@ -25,6 +25,7 @@ #include "gstd3d11memory.h" #include "gstd3d11device.h" #include "gstd3d11utils.h" +#include "gstd3d11_private.h" #include diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/meson.build b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/meson.build index 1e75af1871..19ae103a5b 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/meson.build +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/meson.build @@ -7,23 +7,6 @@ d3d11_sources = [ 'gstd3d11utils.cpp', ] -dxgi_headers = [ - ['dxgi1_6.h', 6], - ['dxgi1_5.h', 5], - ['dxgi1_4.h', 4], - ['dxgi1_3.h', 3], - ['dxgi1_2.h', 2], - ['dxgi.h', 1] -] - -d3d11_headers = [ - ['d3d11_4.h', 4], - ['d3d11_3.h', 3], - ['d3d11_2.h', 2], - ['d3d11_1.h', 1], - ['d3d11.h', 0] -] - gstd3d11_dep = dependency('', required : false) d3d11_option = get_option('d3d11') @@ -41,43 +24,17 @@ extra_comm_args = [ '-DG_LOG_DOMAIN="GStreamer-D3D11"', ] -have_dxgi_header = false -have_d3d11_header = false have_d3d11sdk_h = false have_dxgidebug_h = false -winapi_desktop = false -winapi_app = false +d3d11_winapi_app = false d3d11_conf = configuration_data() -d3d11_conf_options = [ - 'GST_D3D11_DXGI_HEADER_VERSION', - 'GST_D3D11_HEADER_VERSION', - 'GST_D3D11_WINAPI_ONLY_APP', -] - -foreach option : d3d11_conf_options - d3d11_conf.set10(option, false) -endforeach d3d11_lib = cc.find_library('d3d11', required : d3d11_option) dxgi_lib = cc.find_library('dxgi', required : d3d11_option) d3dcompiler_lib = cc.find_library('d3dcompiler', required: d3d11_option) runtimeobject_lib = cc.find_library('runtimeobject', required : false) -foreach dxgi_h: dxgi_headers - if not have_dxgi_header and cc.has_header(dxgi_h[0]) - d3d11_conf.set('GST_D3D11_DXGI_HEADER_VERSION', dxgi_h[1]) - have_dxgi_header = true - endif -endforeach - -foreach d3d11_h: d3d11_headers - if not have_d3d11_header and cc.has_header(d3d11_h[0]) - d3d11_conf.set('GST_D3D11_HEADER_VERSION', d3d11_h[1]) - have_d3d11_header = true - endif -endforeach - -have_d3d11 = d3d11_lib.found() and dxgi_lib.found() and have_d3d11_header and have_dxgi_header +have_d3d11 = d3d11_lib.found() and dxgi_lib.found() and cc.has_header('d3d11_4.h') and cc.has_header('dxgi1_6.h') if not have_d3d11 if d3d11_option.enabled() error('The d3d11 was enabled explicitly, but required dependencies were not found.') @@ -97,8 +54,8 @@ if runtimeobject_lib.found() and d3dcompiler_lib.found() #include #include #include - #include - #include + #include + #include #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #error "not winrt" #endif diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp index 3ae4cd3264..8dfe7dab3c 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp @@ -1810,7 +1810,7 @@ gst_d3d11_base_convert_set_info (GstD3D11BaseFilter * filter, GST_ERROR_OBJECT (self, "couldn't set converter"); return FALSE; } -#if (GST_D3D11_DXGI_HEADER_VERSION >= 4) + /* If both input and output formats are native DXGI format */ if (self->in_d3d11_format->dxgi_format != DXGI_FORMAT_UNKNOWN && self->out_d3d11_format->dxgi_format != DXGI_FORMAT_UNKNOWN) { @@ -1863,7 +1863,6 @@ gst_d3d11_base_convert_set_info (GstD3D11BaseFilter * filter, self->processor = processor; gst_d3d11_device_unlock (filter->device); } -#endif GST_DEBUG_OBJECT (self, "from=%dx%d (par=%d/%d dar=%d/%d), size %" G_GSIZE_FORMAT " -> to=%dx%d (par=%d/%d dar=%d/%d borders=%d:%d), " diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp index 7a253d4484..08c04e5409 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.cpp @@ -133,7 +133,6 @@ gst_d3d11_get_device_vendor (GstD3D11Device * device) return vendor; } -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) gboolean gst_d3d11_hdr_meta_data_to_dxgi (GstVideoMasteringDisplayInfo * minfo, GstVideoContentLightLevel * cll, DXGI_HDR_METADATA_HDR10 * dxgi_hdr10) @@ -163,9 +162,7 @@ gst_d3d11_hdr_meta_data_to_dxgi (GstVideoMasteringDisplayInfo * minfo, return TRUE; } -#endif -#if (GST_D3D11_DXGI_HEADER_VERSION >= 4) typedef enum { GST_DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 = 0, @@ -573,7 +570,6 @@ gst_d3d11_find_swap_chain_color_space (GstVideoInfo * info, return colorspace; } -#endif static void fill_staging_desc (const D3D11_TEXTURE2D_DESC * ref, diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.h b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.h index b92eaca212..0e3c4d3990 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.h +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11pluginutils.h @@ -24,6 +24,8 @@ #include #include #include +#include +#include G_BEGIN_DECLS @@ -63,18 +65,14 @@ gboolean gst_d3d11_is_windows_8_or_greater (void); GstD3D11DeviceVendor gst_d3d11_get_device_vendor (GstD3D11Device * device); -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) gboolean gst_d3d11_hdr_meta_data_to_dxgi (GstVideoMasteringDisplayInfo * minfo, GstVideoContentLightLevel * cll, DXGI_HDR_METADATA_HDR10 * dxgi_hdr10); -#endif -#if (GST_D3D11_DXGI_HEADER_VERSION >= 4) const GstDxgiColorSpace * gst_d3d11_video_info_to_dxgi_color_space (GstVideoInfo * info); const GstDxgiColorSpace * gst_d3d11_find_swap_chain_color_space (GstVideoInfo * info, IDXGISwapChain3 * swapchain); -#endif GstBuffer * gst_d3d11_allocate_staging_buffer_for (GstBuffer * buffer, const GstVideoInfo * info, diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturedevice.h b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturedevice.h index 29495775d0..9ed4f9740a 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturedevice.h +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturedevice.h @@ -20,6 +20,7 @@ #pragma once #include +#include "gstd3d11pluginutils.h" G_BEGIN_DECLS diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videoprocessor.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videoprocessor.cpp index a907fab46f..2b6df26c2e 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videoprocessor.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videoprocessor.cpp @@ -22,38 +22,23 @@ #endif #include "gstd3d11videoprocessor.h" -#include "gstd3d11pluginutils.h" #include GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_video_processor_debug); #define GST_CAT_DEFAULT gst_d3d11_video_processor_debug -#if (GST_D3D11_HEADER_VERSION >= 1 && GST_D3D11_DXGI_HEADER_VERSION >= 4) -#define HAVE_VIDEO_CONTEXT_ONE -#endif - -#if (GST_D3D11_HEADER_VERSION >= 4) && (GST_D3D11_DXGI_HEADER_VERSION >= 5) -#define HAVE_VIDEO_CONTEXT_TWO -#endif - struct _GstD3D11VideoProcessor { GstD3D11Device *device; ID3D11VideoDevice *video_device; ID3D11VideoContext *video_context; -#ifdef HAVE_VIDEO_CONTEXT_ONE ID3D11VideoContext1 *video_context1; -#endif -#ifdef HAVE_VIDEO_CONTEXT_TWO ID3D11VideoContext2 *video_context2; -#endif ID3D11VideoProcessor *processor; ID3D11VideoProcessorEnumerator *enumerator; -#ifdef HAVE_VIDEO_CONTEXT_ONE ID3D11VideoProcessorEnumerator1 *enumerator1; -#endif D3D11_VIDEO_PROCESSOR_CAPS processor_caps; }; @@ -105,12 +90,11 @@ gst_d3d11_video_processor_new (GstD3D11Device * device, guint in_width, &self->enumerator); if (!gst_d3d11_result (hr, device)) goto fail; -#ifdef HAVE_VIDEO_CONTEXT_ONE + hr = self->enumerator->QueryInterface (IID_PPV_ARGS (&self->enumerator1)); if (gst_d3d11_result (hr, device)) { GST_DEBUG ("ID3D11VideoProcessorEnumerator1 interface available"); } -#endif hr = self->enumerator->GetVideoProcessorCaps (&self->processor_caps); if (!gst_d3d11_result (hr, device)) @@ -121,20 +105,17 @@ gst_d3d11_video_processor_new (GstD3D11Device * device, guint in_width, if (!gst_d3d11_result (hr, device)) goto fail; -#ifdef HAVE_VIDEO_CONTEXT_ONE hr = self->video_context-> QueryInterface (IID_PPV_ARGS (&self->video_context1)); if (gst_d3d11_result (hr, device)) { GST_DEBUG ("ID3D11VideoContext1 interface available"); } -#endif -#ifdef HAVE_VIDEO_CONTEXT_TWO + hr = self->video_context-> QueryInterface (IID_PPV_ARGS (&self->video_context2)); if (gst_d3d11_result (hr, device)) { GST_DEBUG ("ID3D11VideoContext2 interface available"); } -#endif /* Setting up default options */ gst_d3d11_device_lock (self->device); @@ -158,17 +139,11 @@ gst_d3d11_video_processor_free (GstD3D11VideoProcessor * processor) GST_D3D11_CLEAR_COM (processor->video_device); GST_D3D11_CLEAR_COM (processor->video_context); -#ifdef HAVE_VIDEO_CONTEXT_ONE GST_D3D11_CLEAR_COM (processor->video_context1); -#endif -#ifdef HAVE_VIDEO_CONTEXT_TWO GST_D3D11_CLEAR_COM (processor->video_context2); -#endif GST_D3D11_CLEAR_COM (processor->processor); GST_D3D11_CLEAR_COM (processor->enumerator); -#ifdef HAVE_VIDEO_CONTEXT_ONE GST_D3D11_CLEAR_COM (processor->enumerator1); -#endif gst_clear_object (&processor->device); g_free (processor); @@ -302,13 +277,11 @@ gst_d3d11_video_processor_set_output_color_space (GstD3D11VideoProcessor * return TRUE; } -#if (GST_D3D11_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; @@ -325,9 +298,6 @@ gst_d3d11_video_processor_check_format_conversion (GstD3D11VideoProcessor * } return supported; -#endif - - return FALSE; } gboolean @@ -336,13 +306,11 @@ gst_d3d11_video_processor_set_input_dxgi_color_space (GstD3D11VideoProcessor * { g_return_val_if_fail (processor != NULL, FALSE); -#ifdef HAVE_VIDEO_CONTEXT_ONE if (processor->video_context1) { processor->video_context1->VideoProcessorSetStreamColorSpace1 (processor->processor, 0, color_space); return TRUE; } -#endif return FALSE; } @@ -353,19 +321,15 @@ gst_d3d11_video_processor_set_output_dxgi_color_space (GstD3D11VideoProcessor * { g_return_val_if_fail (processor != NULL, FALSE); -#ifdef HAVE_VIDEO_CONTEXT_ONE if (processor->video_context1) { processor->video_context1->VideoProcessorSetOutputColorSpace1 (processor->processor, color_space); return TRUE; } -#endif return FALSE; } -#endif -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) /* D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_METADATA_HDR10 * missing in mingw header */ #define FEATURE_CAPS_METADATA_HDR10 (0x800) @@ -376,7 +340,6 @@ gst_d3d11_video_processor_set_input_hdr10_metadata (GstD3D11VideoProcessor * { g_return_val_if_fail (processor != NULL, FALSE); -#ifdef HAVE_VIDEO_CONTEXT_TWO if (processor->video_context2 && (processor->processor_caps.FeatureCaps & FEATURE_CAPS_METADATA_HDR10)) { if (hdr10_meta) { @@ -391,7 +354,6 @@ gst_d3d11_video_processor_set_input_hdr10_metadata (GstD3D11VideoProcessor * return TRUE; } -#endif return FALSE; } @@ -402,7 +364,6 @@ gst_d3d11_video_processor_set_output_hdr10_metadata (GstD3D11VideoProcessor * { g_return_val_if_fail (processor != NULL, FALSE); -#ifdef HAVE_VIDEO_CONTEXT_TWO if (processor->video_context2 && (processor->processor_caps.FeatureCaps & FEATURE_CAPS_METADATA_HDR10)) { if (hdr10_meta) { @@ -416,11 +377,9 @@ gst_d3d11_video_processor_set_output_hdr10_metadata (GstD3D11VideoProcessor * return TRUE; } -#endif return FALSE; } -#endif gboolean gst_d3d11_video_processor_create_input_view (GstD3D11VideoProcessor * processor, diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videoprocessor.h b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videoprocessor.h index 794952121b..9094ed9fe4 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videoprocessor.h +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videoprocessor.h @@ -23,6 +23,7 @@ #include #include #include +#include "gstd3d11pluginutils.h" G_BEGIN_DECLS @@ -51,7 +52,6 @@ gboolean gst_d3d11_video_processor_set_input_color_space (GstD3D11VideoProcess gboolean gst_d3d11_video_processor_set_output_color_space (GstD3D11VideoProcessor * processor, GstVideoColorimetry * color); -#if (GST_D3D11_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, @@ -63,15 +63,12 @@ gboolean gst_d3d11_video_processor_set_input_dxgi_color_space (GstD3D11VideoPro gboolean gst_d3d11_video_processor_set_output_dxgi_color_space (GstD3D11VideoProcessor * processor, DXGI_COLOR_SPACE_TYPE color_space); -#endif -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) gboolean gst_d3d11_video_processor_set_input_hdr10_metadata (GstD3D11VideoProcessor * processor, DXGI_HDR_METADATA_HDR10 * hdr10_meta); gboolean gst_d3d11_video_processor_set_output_hdr10_metadata (GstD3D11VideoProcessor * processor, DXGI_HDR_METADATA_HDR10 * hdr10_meta); -#endif gboolean gst_d3d11_video_processor_create_input_view (GstD3D11VideoProcessor * processor, D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC * desc, diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window.cpp index 37928df0f4..3f90dd7987 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window.cpp @@ -452,14 +452,10 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, }; const GstD3D11WindowDisplayFormat *chosen_format = NULL; const GstDxgiColorSpace *chosen_colorspace = NULL; -#if (GST_D3D11_DXGI_HEADER_VERSION >= 4) gboolean have_hdr10 = FALSE; DXGI_COLOR_SPACE_TYPE native_colorspace_type = DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709; -#endif -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) DXGI_HDR_METADATA_HDR10 hdr10_metadata = { 0, }; -#endif /* Step 1: Clear old resources and objects */ gst_clear_buffer (&window->cached_buffer); @@ -534,7 +530,6 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, * (or reuse old swapchain if the format is not changed) */ window->allow_tearing = FALSE; -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) { ComPtr < IDXGIFactory5 > factory5; IDXGIFactory1 *factory_handle; @@ -550,7 +545,6 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, if (SUCCEEDED (hr) && allow_tearing) window->allow_tearing = allow_tearing; } -#endif if (window->allow_tearing) { GST_DEBUG_OBJECT (window, "device support tearning"); @@ -583,7 +577,6 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, window->input_rect.bottom = GST_VIDEO_INFO_HEIGHT (&window->info); /* Step 4: Decide render color space and set it on converter/processor */ -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) { GstVideoMasteringDisplayInfo minfo; GstVideoContentLightLevel cll; @@ -610,7 +603,6 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, } } } -#endif /* Step 5: Choose display color space */ gst_video_info_set_format (&window->render_info, @@ -625,7 +617,6 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, * target display color space type */ window->render_info.colorimetry.range = GST_VIDEO_COLOR_RANGE_0_255; -#if (GST_D3D11_DXGI_HEADER_VERSION >= 4) { ComPtr < IDXGISwapChain3 > swapchain3; HRESULT hr; @@ -660,7 +651,6 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, } } } -#endif /* otherwise, use most common DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 * color space */ @@ -670,7 +660,7 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, window->render_info.colorimetry.transfer = GST_VIDEO_TRANSFER_BT709; window->render_info.colorimetry.range = GST_VIDEO_COLOR_RANGE_0_255; } -#if (GST_D3D11_DXGI_HEADER_VERSION >= 4) + if (chosen_colorspace) { const GstDxgiColorSpace *in_color_space = gst_d3d11_video_info_to_dxgi_color_space (&window->info); @@ -712,7 +702,6 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, gst_d3d11_video_processor_set_output_dxgi_color_space (processor, out_dxgi_color_space); -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) if (have_hdr10) { GST_DEBUG_OBJECT (window, "Set HDR metadata on video processor"); gst_d3d11_video_processor_set_input_hdr10_metadata (processor, @@ -720,13 +709,12 @@ gst_d3d11_window_prepare_default (GstD3D11Window * window, guint display_width, gst_d3d11_video_processor_set_output_hdr10_metadata (processor, &hdr10_metadata); } -#endif } window->processor = processor; } } -#endif + *video_processor_available = !!window->processor; /* configure shader even if video processor is available for fallback */ @@ -976,11 +964,9 @@ gst_d3d111_window_present (GstD3D11Window * self, GstBuffer * buffer, gst_d3d11_overlay_compositor_upload (self->compositor, buffer); gst_d3d11_overlay_compositor_draw_unlocked (self->compositor, &rtv); -#if (GST_D3D11_DXGI_HEADER_VERSION >= 5) if (self->allow_tearing && self->fullscreen) { present_flags |= DXGI_PRESENT_ALLOW_TEARING; } -#endif if (klass->present) ret = klass->present (self, present_flags); diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window_dummy.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window_dummy.cpp index f45ffbd611..a4e1715019 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window_dummy.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window_dummy.cpp @@ -114,7 +114,6 @@ gst_d3d11_window_dummy_prepare (GstD3D11Window * window, gst_d3d11_device_lock (window->device); -#if (GST_D3D11_DXGI_HEADER_VERSION >= 4) { const GstDxgiColorSpace *in_color_space = gst_d3d11_video_info_to_dxgi_color_space (&window->info); @@ -167,7 +166,7 @@ gst_d3d11_window_dummy_prepare (GstD3D11Window * window, window->processor = processor; } -#endif + *video_processor_available = !!window->processor; window->converter = diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window_win32.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window_win32.cpp index cba1031825..34a4052ec7 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window_win32.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11window_win32.cpp @@ -896,7 +896,6 @@ create_swap_chain (GstD3D11WindowWin32 * self, GstD3D11Device * device, return swap_chain; } -#if (GST_D3D11_DXGI_HEADER_VERSION >= 2) static IDXGISwapChain1 * create_swap_chain_for_hwnd (GstD3D11WindowWin32 * self, GstD3D11Device * device, HWND hwnd, DXGI_SWAP_CHAIN_DESC1 * desc, @@ -927,7 +926,6 @@ create_swap_chain_for_hwnd (GstD3D11WindowWin32 * self, GstD3D11Device * device, return swap_chain; } -#endif static gboolean gst_d3d11_window_win32_create_swap_chain (GstD3D11Window * window, @@ -941,7 +939,6 @@ gst_d3d11_window_win32_create_swap_chain (GstD3D11Window * window, self->have_swapchain1 = FALSE; -#if (GST_D3D11_DXGI_HEADER_VERSION >= 2) { DXGI_SWAP_CHAIN_DESC1 desc1 = { 0, }; desc1.Width = 0; @@ -972,7 +969,6 @@ gst_d3d11_window_win32_create_swap_chain (GstD3D11Window * window, self->have_swapchain1 = TRUE; } } -#endif if (!new_swapchain) { DXGI_SWAP_EFFECT swap_effect = DXGI_SWAP_EFFECT_DISCARD; @@ -1070,7 +1066,7 @@ gst_d3d11_window_win32_present (GstD3D11Window * window, guint present_flags) return GST_D3D11_WINDOW_FLOW_CLOSED; } -#if (GST_D3D11_DXGI_HEADER_VERSION >= 2) + if (self->have_swapchain1) { IDXGISwapChain1 *swap_chain1 = (IDXGISwapChain1 *) window->swap_chain; DXGI_PRESENT_PARAMETERS present_params = { 0, }; @@ -1082,9 +1078,7 @@ gst_d3d11_window_win32_present (GstD3D11Window * window, guint present_flags) } hr = swap_chain1->Present1 (0, present_flags, &present_params); - } else -#endif - { + } else { hr = window->swap_chain->Present (0, present_flags); } diff --git a/subprojects/gst-plugins-bad/sys/d3d11/meson.build b/subprojects/gst-plugins-bad/sys/d3d11/meson.build index b5dd2aef48..11306f1fb2 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/meson.build +++ b/subprojects/gst-plugins-bad/sys/d3d11/meson.build @@ -1,31 +1,29 @@ d3d11_sources = [ + 'gstd3d11av1dec.cpp', 'gstd3d11basefilter.cpp', - 'gstd3d11convert.cpp', - 'gstd3d11converter.cpp', 'gstd3d11compositor.cpp', 'gstd3d11compositorbin.cpp', + 'gstd3d11convert.cpp', + 'gstd3d11converter.cpp', + 'gstd3d11decoder.cpp', + 'gstd3d11deinterlace.cpp', 'gstd3d11download.cpp', + 'gstd3d11h264dec.cpp', + 'gstd3d11h265dec.cpp', + 'gstd3d11mpeg2dec.cpp', 'gstd3d11overlaycompositor.cpp', 'gstd3d11pluginutils.cpp', 'gstd3d11shader.cpp', 'gstd3d11upload.cpp', 'gstd3d11videoprocessor.cpp', 'gstd3d11videosink.cpp', + 'gstd3d11vp8dec.cpp', + 'gstd3d11vp9dec.cpp', 'gstd3d11window.cpp', 'gstd3d11window_dummy.cpp', 'plugin.cpp', ] -d3d11_dec_sources = [ - 'gstd3d11av1dec.cpp', - 'gstd3d11decoder.cpp', - 'gstd3d11h264dec.cpp', - 'gstd3d11vp9dec.cpp', - 'gstd3d11h265dec.cpp', - 'gstd3d11mpeg2dec.cpp', - 'gstd3d11vp8dec.cpp', -] - extra_c_args = ['-DCOBJMACROS'] extra_args = ['-DGST_USE_UNSTABLE_API'] extra_dep = [] @@ -35,7 +33,7 @@ if host_system != 'windows' or d3d11_option.disabled() subdir_done() endif -if not gstd3d11_dep.found() +if not gstd3d11_dep.found() or not cc.has_header('dxva.h') or not cc.has_header('d3d9.h') or not cc.has_header('d3dcompiler.h') if d3d11_option.enabled() error('The d3d11 was enabled explicitly, but required dependencies were not found.') endif @@ -45,23 +43,6 @@ endif d3dcompiler_lib = cc.find_library('d3dcompiler', required: d3d11_option) runtimeobject_lib = cc.find_library('runtimeobject', required : false) winmm_lib = cc.find_library('winmm', required: false) -has_decoder = false - -have_d3d11 = cc.has_header('d3dcompiler.h') -if not have_d3d11 - if d3d11_option.enabled() - error('The d3d11 plugin was enabled explicitly, but required dependencies were not found.') - endif - subdir_done() -endif - -# d3d11 video api uses dxva structure for decoding, and dxva.h needs d3d9 types -if cc.has_header('dxva.h') and cc.has_header('d3d9.h') - d3d11_sources += d3d11_dec_sources - extra_args += ['-DHAVE_DXVA_H'] - extra_dep += [gstcodecs_dep] - has_decoder = true -endif if d3d11_winapi_only_app and (not d3dcompiler_lib.found() or not runtimeobject_lib.found()) if d3d11_option.enabled() @@ -80,28 +61,17 @@ endif if d3d11_winapi_desktop d3d11_sources += ['gstd3d11window_win32.cpp'] - if d3d11_conf.get('GST_D3D11_DXGI_HEADER_VERSION') >= 6 - # Desktop Duplication API is unavailable for UWP - # and MinGW is not supported due to some missing headers - extra_args += ['-DHAVE_DXGI_DESKTOP_DUP'] - d3d11_sources += ['gstd3d11screencapture.cpp', - 'gstd3d11screencapturedevice.cpp', - 'gstd3d11screencapturesrc.cpp'] - message('Enable D3D11 Desktop Duplication API') - endif + d3d11_sources += ['gstd3d11screencapture.cpp', + 'gstd3d11screencapturedevice.cpp', + 'gstd3d11screencapturesrc.cpp'] + # multimedia clock is desktop only API - if has_decoder and winmm_lib.found() and cc.has_header('timeapi.h') + if winmm_lib.found() and cc.has_header('timeapi.h') extra_args += ['-DHAVE_WINMM'] extra_dep += [winmm_lib] endif endif -# need dxgi1_5.h for HDR10 processing and d3d11_4.h for ID3D11VideoContext2 interface -if d3d11_conf.get('GST_D3D11_DXGI_HEADER_VERSION') >= 5 and d3d11_conf.get('GST_D3D11_HEADER_VERSION') >= 4 - d3d11_sources += ['gstd3d11deinterlace.cpp'] - extra_args += ['-DHAVE_D3D11_VIDEO_PROC'] -endif - # MinGW 32bits compiler seems to be complaining about redundant-decls # when ComPtr is in use. Let's just disable the warning if cc.get_id() != 'msvc' @@ -117,7 +87,7 @@ gstd3d11 = library('gstd3d11', c_args : gst_plugins_bad_args + extra_c_args + extra_args, cpp_args: gst_plugins_bad_args + extra_args, include_directories : [configinc], - dependencies : [gstbase_dep, gstvideo_dep, gmodule_dep, gstcontroller_dep, gstd3d11_dep] + extra_dep, + dependencies : [gstbase_dep, gstvideo_dep, gmodule_dep, gstcontroller_dep, gstd3d11_dep, gstcodecs_dep] + extra_dep, install : true, install_dir : plugins_install_dir, ) diff --git a/subprojects/gst-plugins-bad/sys/d3d11/plugin.cpp b/subprojects/gst-plugins-bad/sys/d3d11/plugin.cpp index aaff1fe884..eb58f3e4b8 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/plugin.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/plugin.cpp @@ -69,21 +69,18 @@ #include "gstd3d11shader.h" #include "gstd3d11compositor.h" #include "gstd3d11compositorbin.h" -#ifdef HAVE_DXVA_H #include "gstd3d11h264dec.h" #include "gstd3d11h265dec.h" #include "gstd3d11vp9dec.h" #include "gstd3d11vp8dec.h" #include "gstd3d11mpeg2dec.h" #include "gstd3d11av1dec.h" -#endif -#ifdef HAVE_DXGI_DESKTOP_DUP +#include "gstd3d11deinterlace.h" + +#if !GST_D3D11_WINAPI_ONLY_APP #include "gstd3d11screencapturesrc.h" #include "gstd3d11screencapturedevice.h" #endif -#ifdef HAVE_D3D11_VIDEO_PROC -#include "gstd3d11deinterlace.h" -#endif GST_DEBUG_CATEGORY (gst_d3d11_debug); GST_DEBUG_CATEGORY (gst_d3d11_shader_debug); @@ -95,8 +92,6 @@ GST_DEBUG_CATEGORY (gst_d3d11_overlay_compositor_debug); GST_DEBUG_CATEGORY (gst_d3d11_window_debug); GST_DEBUG_CATEGORY (gst_d3d11_video_processor_debug); GST_DEBUG_CATEGORY (gst_d3d11_compositor_debug); - -#ifdef HAVE_DXVA_H GST_DEBUG_CATEGORY (gst_d3d11_decoder_debug); GST_DEBUG_CATEGORY (gst_d3d11_h264_dec_debug); GST_DEBUG_CATEGORY (gst_d3d11_h265_dec_debug); @@ -104,17 +99,13 @@ GST_DEBUG_CATEGORY (gst_d3d11_vp9_dec_debug); GST_DEBUG_CATEGORY (gst_d3d11_vp8_dec_debug); GST_DEBUG_CATEGORY (gst_d3d11_mpeg2_dec_debug); GST_DEBUG_CATEGORY (gst_d3d11_av1_dec_debug); -#endif +GST_DEBUG_CATEGORY (gst_d3d11_deinterlace_debug); -#ifdef HAVE_DXGI_DESKTOP_DUP +#if !GST_D3D11_WINAPI_ONLY_APP GST_DEBUG_CATEGORY (gst_d3d11_screen_capture_debug); GST_DEBUG_CATEGORY (gst_d3d11_screen_capture_device_debug); #endif -#ifdef HAVE_D3D11_VIDEO_PROC -GST_DEBUG_CATEGORY (gst_d3d11_deinterlace_debug); -#endif - #define GST_CAT_DEFAULT gst_d3d11_debug static gboolean @@ -144,7 +135,7 @@ plugin_init (GstPlugin * plugin) GST_WARNING ("Cannot initialize d3d11 shader"); return TRUE; } -#ifdef HAVE_DXVA_H + /* DXVA2 API is availble since Windows 8 */ if (gst_d3d11_is_windows_8_or_greater ()) { GST_DEBUG_CATEGORY_INIT (gst_d3d11_decoder_debug, @@ -161,13 +152,9 @@ plugin_init (GstPlugin * plugin) "d3d11mpeg2dec", 0, "Direct3D11 MPEG2 Decoder"); GST_DEBUG_CATEGORY_INIT (gst_d3d11_av1_dec_debug, "d3d11av1dec", 0, "Direct3D11 AV1 Decoder"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_deinterlace_debug, + "d3d11deinterlace", 0, "Direct3D11 Deinterlacer"); } -#endif - -#ifdef HAVE_D3D11_VIDEO_PROC - GST_DEBUG_CATEGORY_INIT (gst_d3d11_deinterlace_debug, - "d3d11deinterlace", 0, "Direct3D11 Deinterlacer"); -#endif /* Enumerate devices to register decoders per device and to get the highest * feature level */ @@ -187,7 +174,6 @@ plugin_init (GstPlugin * plugin) if (feature_level > max_feature_level) max_feature_level = feature_level; -#ifdef HAVE_DXVA_H /* DXVA2 API is availble since Windows 8 */ if (gst_d3d11_is_windows_8_or_greater () && gst_d3d11_device_get_video_device_handle (device)) { @@ -203,19 +189,9 @@ plugin_init (GstPlugin * plugin) gst_d3d11_av1_dec_register (plugin, device, GST_RANK_PRIMARY); gst_d3d11_mpeg2_dec_register (plugin, device, GST_RANK_SECONDARY); } - } -#endif -#ifdef HAVE_D3D11_VIDEO_PROC - /* D3D11 video processor API is availble since Windows 8 */ - if (gst_d3d11_is_windows_8_or_greater ()) { - gboolean hardware; - - g_object_get (device, "hardware", &hardware, NULL); - if (hardware) - gst_d3d11_deinterlace_register (plugin, device, GST_RANK_MARGINAL); + gst_d3d11_deinterlace_register (plugin, device, GST_RANK_MARGINAL); } -#endif gst_object_unref (device); } @@ -252,7 +228,7 @@ plugin_init (GstPlugin * plugin) gst_element_register (plugin, "d3d11compositor", GST_RANK_SECONDARY, GST_TYPE_D3D11_COMPOSITOR_BIN); -#ifdef HAVE_DXGI_DESKTOP_DUP +#if !GST_D3D11_WINAPI_ONLY_APP if (gst_d3d11_is_windows_8_or_greater ()) { GST_DEBUG_CATEGORY_INIT (gst_d3d11_screen_capture_debug, "d3d11screencapturesrc", 0, "d3d11screencapturesrc"); diff --git a/subprojects/gst-plugins-bad/sys/mediafoundation/plugin.cpp b/subprojects/gst-plugins-bad/sys/mediafoundation/plugin.cpp index 70115a5d64..bb65508e43 100644 --- a/subprojects/gst-plugins-bad/sys/mediafoundation/plugin.cpp +++ b/subprojects/gst-plugins-bad/sys/mediafoundation/plugin.cpp @@ -77,6 +77,8 @@ #if GST_MF_HAVE_D3D11 #include +#include +#include #include #endif -- 2.34.1