From 4f45828641a566c2205f166426f532fcafd5f1f2 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Sat, 11 Sep 2021 00:43:26 +0900 Subject: d3d11: Get rid of "extern "C"" wrapping for GST_DEBUG_CATEGORY_EXTERN Instead, change the file defining debug category to cpp Part-of: --- sys/d3d11/gstd3d11av1dec.cpp | 13 +- sys/d3d11/gstd3d11compositor.cpp | 8 +- sys/d3d11/gstd3d11compositorbin.cpp | 6 - sys/d3d11/gstd3d11converter.cpp | 8 +- sys/d3d11/gstd3d11deinterlace.cpp | 8 +- sys/d3d11/gstd3d11desktopdup.cpp | 8 +- sys/d3d11/gstd3d11desktopdupsrc.cpp | 6 - sys/d3d11/gstd3d11h264dec.cpp | 6 - sys/d3d11/gstd3d11h265dec.cpp | 6 - sys/d3d11/gstd3d11mpeg2dec.cpp | 6 - sys/d3d11/gstd3d11overlaycompositor.cpp | 9 +- sys/d3d11/gstd3d11pluginutils.cpp | 6 - sys/d3d11/gstd3d11shader.cpp | 6 +- sys/d3d11/gstd3d11videoprocessor.cpp | 6 - sys/d3d11/gstd3d11vp8dec.cpp | 6 - sys/d3d11/gstd3d11vp9dec.cpp | 6 - sys/d3d11/gstd3d11window.cpp | 6 +- sys/d3d11/gstd3d11window_corewindow.cpp | 3 - sys/d3d11/gstd3d11window_dummy.cpp | 6 +- sys/d3d11/gstd3d11window_swapchainpanel.cpp | 4 - sys/d3d11/gstd3d11window_win32.cpp | 6 +- sys/d3d11/meson.build | 23 ++- sys/d3d11/plugin.c | 245 ---------------------------- sys/d3d11/plugin.cpp | 245 ++++++++++++++++++++++++++++ 24 files changed, 275 insertions(+), 377 deletions(-) delete mode 100644 sys/d3d11/plugin.c create mode 100644 sys/d3d11/plugin.cpp diff --git a/sys/d3d11/gstd3d11av1dec.cpp b/sys/d3d11/gstd3d11av1dec.cpp index c8bc36971..c47959899 100644 --- a/sys/d3d11/gstd3d11av1dec.cpp +++ b/sys/d3d11/gstd3d11av1dec.cpp @@ -49,6 +49,9 @@ #include #include +GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_av1_dec_debug); +#define GST_CAT_DEFAULT gst_d3d11_av1_dec_debug + /* Might not be defined in dxva.h, copied from DXVA AV1 spec available at * https://www.microsoft.com/en-us/download/confirmation.aspx?id=101577 * and modified with "GST_" prefix @@ -347,16 +350,6 @@ typedef struct _GST_DXVA_Tile_AV1 #pragma pack(pop) -/* *INDENT-OFF* */ - -G_BEGIN_DECLS - -GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_av1_dec_debug); -#define GST_CAT_DEFAULT gst_d3d11_av1_dec_debug - -G_END_DECLS -/* *INDENT-ON* */ - enum { PROP_0, diff --git a/sys/d3d11/gstd3d11compositor.cpp b/sys/d3d11/gstd3d11compositor.cpp index 1f9198705..0c70873c2 100644 --- a/sys/d3d11/gstd3d11compositor.cpp +++ b/sys/d3d11/gstd3d11compositor.cpp @@ -43,15 +43,11 @@ #include #include -/* *INDENT-OFF* */ -using namespace Microsoft::WRL; - -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_compositor_debug); #define GST_CAT_DEFAULT gst_d3d11_compositor_debug -G_END_DECLS +/* *INDENT-OFF* */ +using namespace Microsoft::WRL; /* *INDENT-ON* */ /** diff --git a/sys/d3d11/gstd3d11compositorbin.cpp b/sys/d3d11/gstd3d11compositorbin.cpp index e53cc5bf4..1e6079723 100644 --- a/sys/d3d11/gstd3d11compositorbin.cpp +++ b/sys/d3d11/gstd3d11compositorbin.cpp @@ -47,15 +47,9 @@ #include "gstd3d11compositor.h" #include "gstd3d11pluginutils.h" -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_compositor_debug); #define GST_CAT_DEFAULT gst_d3d11_compositor_debug -G_END_DECLS -/* *INDENT-ON* */ - /**************************** * GstD3D11CompositorBinPad * ****************************/ diff --git a/sys/d3d11/gstd3d11converter.cpp b/sys/d3d11/gstd3d11converter.cpp index dd6341170..1d22a0097 100644 --- a/sys/d3d11/gstd3d11converter.cpp +++ b/sys/d3d11/gstd3d11converter.cpp @@ -28,15 +28,11 @@ #include #include -/* *INDENT-OFF* */ -using namespace Microsoft::WRL; - -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_converter_debug); #define GST_CAT_DEFAULT gst_d3d11_converter_debug -G_END_DECLS +/* *INDENT-OFF* */ +using namespace Microsoft::WRL; /* *INDENT-ON* */ #define CONVERTER_MAX_QUADS 2 diff --git a/sys/d3d11/gstd3d11deinterlace.cpp b/sys/d3d11/gstd3d11deinterlace.cpp index b961cf043..99de8437b 100644 --- a/sys/d3d11/gstd3d11deinterlace.cpp +++ b/sys/d3d11/gstd3d11deinterlace.cpp @@ -42,15 +42,11 @@ #include #include -/* *INDENT-OFF* */ -using namespace Microsoft::WRL; - -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_deinterlace_debug); #define GST_CAT_DEFAULT gst_d3d11_deinterlace_debug -G_END_DECLS +/* *INDENT-OFF* */ +using namespace Microsoft::WRL; /* *INDENT-ON* */ /* Deinterlacing Methods: diff --git a/sys/d3d11/gstd3d11desktopdup.cpp b/sys/d3d11/gstd3d11desktopdup.cpp index 8be33c101..1e5590ee9 100644 --- a/sys/d3d11/gstd3d11desktopdup.cpp +++ b/sys/d3d11/gstd3d11desktopdup.cpp @@ -53,15 +53,11 @@ #include -/* *INDENT-OFF* */ -using namespace Microsoft::WRL; - -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_desktop_dup_debug); #define GST_CAT_DEFAULT gst_d3d11_desktop_dup_debug -G_END_DECLS +/* *INDENT-OFF* */ +using namespace Microsoft::WRL; /* List of GstD3D11DesktopDup weakref */ G_LOCK_DEFINE_STATIC (dupl_list_lock); diff --git a/sys/d3d11/gstd3d11desktopdupsrc.cpp b/sys/d3d11/gstd3d11desktopdupsrc.cpp index 39ec4cde7..9dd445d71 100644 --- a/sys/d3d11/gstd3d11desktopdupsrc.cpp +++ b/sys/d3d11/gstd3d11desktopdupsrc.cpp @@ -42,15 +42,9 @@ #include -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_desktop_dup_debug); #define GST_CAT_DEFAULT gst_d3d11_desktop_dup_debug -G_END_DECLS -/* *INDENT-ON* */ - enum { PROP_0, diff --git a/sys/d3d11/gstd3d11h264dec.cpp b/sys/d3d11/gstd3d11h264dec.cpp index 08adb6237..f1a3d548f 100644 --- a/sys/d3d11/gstd3d11h264dec.cpp +++ b/sys/d3d11/gstd3d11h264dec.cpp @@ -79,15 +79,9 @@ #include #include -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_h264_dec_debug); #define GST_CAT_DEFAULT gst_d3d11_h264_dec_debug -G_END_DECLS -/* *INDENT-ON* */ - enum { PROP_0, diff --git a/sys/d3d11/gstd3d11h265dec.cpp b/sys/d3d11/gstd3d11h265dec.cpp index 1ca92064f..00826bfaf 100644 --- a/sys/d3d11/gstd3d11h265dec.cpp +++ b/sys/d3d11/gstd3d11h265dec.cpp @@ -49,15 +49,9 @@ #include #include -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_h265_dec_debug); #define GST_CAT_DEFAULT gst_d3d11_h265_dec_debug -G_END_DECLS -/* *INDENT-ON* */ - enum { PROP_0, diff --git a/sys/d3d11/gstd3d11mpeg2dec.cpp b/sys/d3d11/gstd3d11mpeg2dec.cpp index da32f95a3..8a6ceed73 100644 --- a/sys/d3d11/gstd3d11mpeg2dec.cpp +++ b/sys/d3d11/gstd3d11mpeg2dec.cpp @@ -49,15 +49,9 @@ #include #include -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_mpeg2_dec_debug); #define GST_CAT_DEFAULT gst_d3d11_mpeg2_dec_debug -G_END_DECLS -/* *INDENT-ON* */ - enum { PROP_0, diff --git a/sys/d3d11/gstd3d11overlaycompositor.cpp b/sys/d3d11/gstd3d11overlaycompositor.cpp index b09ca9c5b..b2dd65330 100644 --- a/sys/d3d11/gstd3d11overlaycompositor.cpp +++ b/sys/d3d11/gstd3d11overlaycompositor.cpp @@ -26,15 +26,12 @@ #include "gstd3d11pluginutils.h" #include -/* *INDENT-OFF* */ -using namespace Microsoft::WRL; - -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_overlay_compositor_debug); #define GST_CAT_DEFAULT gst_d3d11_overlay_compositor_debug -G_END_DECLS +/* *INDENT-OFF* */ +using namespace Microsoft::WRL; + typedef struct { struct { diff --git a/sys/d3d11/gstd3d11pluginutils.cpp b/sys/d3d11/gstd3d11pluginutils.cpp index 5d899c765..624063eef 100644 --- a/sys/d3d11/gstd3d11pluginutils.cpp +++ b/sys/d3d11/gstd3d11pluginutils.cpp @@ -27,15 +27,9 @@ #include #include -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_plugin_utils_debug); #define GST_CAT_DEFAULT gst_d3d11_plugin_utils_debug -G_END_DECLS -/* *INDENT-ON* */ - /* Max Texture Dimension for feature level 11_0 ~ 12_1 */ static guint _gst_d3d11_texture_max_dimension = 16384; diff --git a/sys/d3d11/gstd3d11shader.cpp b/sys/d3d11/gstd3d11shader.cpp index ded8689c5..3f9ea34fc 100644 --- a/sys/d3d11/gstd3d11shader.cpp +++ b/sys/d3d11/gstd3d11shader.cpp @@ -28,15 +28,11 @@ /* *INDENT-OFF* */ using namespace Microsoft::WRL; - -G_BEGIN_DECLS +/* *INDENT-ON* */ GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_shader_debug); #define GST_CAT_DEFAULT gst_d3d11_shader_debug -G_END_DECLS -/* *INDENT-ON* */ - /* too many const buffers doesn't make sense */ #define MAX_CONST_BUFFERS 16 diff --git a/sys/d3d11/gstd3d11videoprocessor.cpp b/sys/d3d11/gstd3d11videoprocessor.cpp index e1b4b5cee..a907fab46 100644 --- a/sys/d3d11/gstd3d11videoprocessor.cpp +++ b/sys/d3d11/gstd3d11videoprocessor.cpp @@ -26,15 +26,9 @@ #include -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_video_processor_debug); #define GST_CAT_DEFAULT gst_d3d11_video_processor_debug -G_END_DECLS -/* *INDENT-ON* */ - #if (GST_D3D11_HEADER_VERSION >= 1 && GST_D3D11_DXGI_HEADER_VERSION >= 4) #define HAVE_VIDEO_CONTEXT_ONE #endif diff --git a/sys/d3d11/gstd3d11vp8dec.cpp b/sys/d3d11/gstd3d11vp8dec.cpp index 9c2e6ec1e..fd6c00e22 100644 --- a/sys/d3d11/gstd3d11vp8dec.cpp +++ b/sys/d3d11/gstd3d11vp8dec.cpp @@ -49,15 +49,9 @@ #include #include -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_vp8_dec_debug); #define GST_CAT_DEFAULT gst_d3d11_vp8_dec_debug -G_END_DECLS -/* *INDENT-ON* */ - enum { PROP_0, diff --git a/sys/d3d11/gstd3d11vp9dec.cpp b/sys/d3d11/gstd3d11vp9dec.cpp index c6aba1ceb..09c15bfab 100644 --- a/sys/d3d11/gstd3d11vp9dec.cpp +++ b/sys/d3d11/gstd3d11vp9dec.cpp @@ -79,15 +79,9 @@ #include #include -/* *INDENT-OFF* */ -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_vp9_dec_debug); #define GST_CAT_DEFAULT gst_d3d11_vp9_dec_debug -G_END_DECLS -/* *INDENT-ON* */ - enum { PROP_0, diff --git a/sys/d3d11/gstd3d11window.cpp b/sys/d3d11/gstd3d11window.cpp index 666bde534..85506b1a8 100644 --- a/sys/d3d11/gstd3d11window.cpp +++ b/sys/d3d11/gstd3d11window.cpp @@ -35,16 +35,14 @@ #endif #include + /* *INDENT-OFF* */ using namespace Microsoft::WRL; - -G_BEGIN_DECLS +/* *INDENT-ON* */ GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_window_debug); #define GST_CAT_DEFAULT gst_d3d11_window_debug -G_END_DECLS -/* *INDENT-ON* */ enum { diff --git a/sys/d3d11/gstd3d11window_corewindow.cpp b/sys/d3d11/gstd3d11window_corewindow.cpp index f63708085..a2b4e5b3d 100644 --- a/sys/d3d11/gstd3d11window_corewindow.cpp +++ b/sys/d3d11/gstd3d11window_corewindow.cpp @@ -47,12 +47,9 @@ typedef ABI::Windows::Foundation:: __FITypedEventHandler_2_Windows__CUI__CCore__CCoreWindow_Windows__CUI__CCore__CWindowSizeChangedEventArgs_t IWindowSizeChangedEventHandler; -G_BEGIN_DECLS GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_window_debug); #define GST_CAT_DEFAULT gst_d3d11_window_debug -G_END_DECLS - /* timeout to wait busy UI thread */ #define DEFAULT_ASYNC_TIMEOUT (10 * 1000) diff --git a/sys/d3d11/gstd3d11window_dummy.cpp b/sys/d3d11/gstd3d11window_dummy.cpp index 434c661f7..f45ffbd61 100644 --- a/sys/d3d11/gstd3d11window_dummy.cpp +++ b/sys/d3d11/gstd3d11window_dummy.cpp @@ -28,15 +28,11 @@ /* *INDENT-OFF* */ using namespace Microsoft::WRL; - -G_BEGIN_DECLS +/* *INDENT-ON* */ GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_window_debug); #define GST_CAT_DEFAULT gst_d3d11_window_debug -G_END_DECLS -/* *INDENT-ON* */ - struct _GstD3D11WindowDummy { GstD3D11Window parent; diff --git a/sys/d3d11/gstd3d11window_swapchainpanel.cpp b/sys/d3d11/gstd3d11window_swapchainpanel.cpp index fdb068b1b..2e6773a26 100644 --- a/sys/d3d11/gstd3d11window_swapchainpanel.cpp +++ b/sys/d3d11/gstd3d11window_swapchainpanel.cpp @@ -41,13 +41,9 @@ using namespace Microsoft::WRL::Wrappers; using namespace ABI::Windows::UI; using namespace ABI::Windows::Foundation; -G_BEGIN_DECLS - GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_window_debug); #define GST_CAT_DEFAULT gst_d3d11_window_debug -G_END_DECLS - /* timeout to wait busy UI thread */ #define DEFAULT_ASYNC_TIMEOUT (10 * 1000) diff --git a/sys/d3d11/gstd3d11window_win32.cpp b/sys/d3d11/gstd3d11window_win32.cpp index 23d5d3de8..644839129 100644 --- a/sys/d3d11/gstd3d11window_win32.cpp +++ b/sys/d3d11/gstd3d11window_win32.cpp @@ -29,15 +29,11 @@ /* *INDENT-OFF* */ using namespace Microsoft::WRL; - -G_BEGIN_DECLS +/* *INDENT-ON* */ GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_window_debug); #define GST_CAT_DEFAULT gst_d3d11_window_debug -G_END_DECLS -/* *INDENT-ON* */ - G_LOCK_DEFINE_STATIC (create_lock); #define EXTERNAL_PROC_PROP_NAME "d3d11_window_external_proc" diff --git a/sys/d3d11/meson.build b/sys/d3d11/meson.build index 24f2debf8..43f213d9c 100644 --- a/sys/d3d11/meson.build +++ b/sys/d3d11/meson.build @@ -13,7 +13,7 @@ d3d11_sources = [ 'gstd3d11videosink.cpp', 'gstd3d11window.cpp', 'gstd3d11window_dummy.cpp', - 'plugin.c', + 'plugin.cpp', ] d3d11_dec_sources = [ @@ -26,8 +26,8 @@ d3d11_dec_sources = [ 'gstd3d11vp8dec.cpp', ] -extra_c_args = ['-DCOBJMACROS', '-DGST_USE_UNSTABLE_API'] -extra_cpp_args = ['-DGST_USE_UNSTABLE_API'] +extra_c_args = ['-DCOBJMACROS'] +extra_args = ['-DGST_USE_UNSTABLE_API'] extra_dep = [] d3d11_option = get_option('d3d11') @@ -58,7 +58,7 @@ 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_c_args += ['-DHAVE_DXVA_H'] + extra_args += ['-DHAVE_DXVA_H'] extra_dep += [gstcodecs_dep] has_decoder = true endif @@ -83,13 +83,13 @@ if d3d11_winapi_desktop 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_c_args += ['-DHAVE_DXGI_DESKTOP_DUP'] + extra_args += ['-DHAVE_DXGI_DESKTOP_DUP'] d3d11_sources += ['gstd3d11desktopdup.cpp', 'gstd3d11desktopdupsrc.cpp'] message('Enable D3D11 Desktop Duplication API') endif # multimedia clock is desktop only API if has_decoder and winmm_lib.found() and cc.has_header('timeapi.h') - extra_cpp_args += ['-DHAVE_WINMM'] + extra_args += ['-DHAVE_WINMM'] extra_dep += [winmm_lib] endif endif @@ -97,24 +97,23 @@ 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_c_args += ['-DHAVE_D3D11_VIDEO_PROC'] + 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' - extra_args = cc.get_supported_arguments([ + extra_mingw_args = cc.get_supported_arguments([ '-Wno-redundant-decls', ]) - extra_c_args += extra_args - extra_cpp_args += extra_args + extra_args += extra_mingw_args endif gstd3d11 = library('gstd3d11', d3d11_sources, - c_args : gst_plugins_bad_args + extra_c_args, - cpp_args: gst_plugins_bad_args + extra_cpp_args, + 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, install : true, diff --git a/sys/d3d11/plugin.c b/sys/d3d11/plugin.c deleted file mode 100644 index c0894283a..000000000 --- a/sys/d3d11/plugin.c +++ /dev/null @@ -1,245 +0,0 @@ -/* GStreamer - * Copyright (C) 2019 Seungha Yang - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include "gstd3d11videosink.h" -#include "gstd3d11upload.h" -#include "gstd3d11download.h" -#include "gstd3d11convert.h" -#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 "gstd3d11desktopdupsrc.h" -#endif -#ifdef HAVE_D3D11_VIDEO_PROC -#include "gstd3d11deinterlace.h" -#endif - -GST_DEBUG_CATEGORY (gst_d3d11_debug); -GST_DEBUG_CATEGORY (gst_d3d11_shader_debug); -GST_DEBUG_CATEGORY (gst_d3d11_converter_debug); -GST_DEBUG_CATEGORY (gst_d3d11_plugin_utils_debug); -GST_DEBUG_CATEGORY (gst_d3d11_format_debug); -GST_DEBUG_CATEGORY (gst_d3d11_device_debug); -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_h264_dec_debug); -GST_DEBUG_CATEGORY (gst_d3d11_h265_dec_debug); -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 - -#ifdef HAVE_DXGI_DESKTOP_DUP -GST_DEBUG_CATEGORY (gst_d3d11_desktop_dup_debug); -#endif - -#ifdef HAVE_D3D11_VIDEO_PROC -GST_DEBUG_CATEGORY (gst_d3d11_deinterlace_debug); -#endif - -#define GST_CAT_DEFAULT gst_d3d11_debug - -static gboolean -plugin_init (GstPlugin * plugin) -{ - GstRank video_sink_rank = GST_RANK_PRIMARY; - D3D_FEATURE_LEVEL max_feature_level = D3D_FEATURE_LEVEL_9_3; - guint i; - - GST_DEBUG_CATEGORY_INIT (gst_d3d11_debug, "d3d11", 0, "direct3d 11 plugin"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_shader_debug, - "d3d11shader", 0, "d3d11shader"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_converter_debug, - "d3d11converter", 0, "d3d11converter"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_plugin_utils_debug, - "d3d11pluginutils", 0, "d3d11 plugin utility functions"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_overlay_compositor_debug, - "d3d11overlaycompositor", 0, "d3d11overlaycompositor"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_window_debug, - "d3d11window", 0, "d3d11window"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_video_processor_debug, - "d3d11videoprocessor", 0, "d3d11videoprocessor"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_compositor_debug, - "d3d11compositor", 0, "d3d11compositor element"); - - if (!gst_d3d11_shader_init ()) { - 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_h264_dec_debug, - "d3d11h264dec", 0, "Direct3D11 H.264 Video Decoder"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_vp9_dec_debug, - "d3d11vp9dec", 0, "Direct3D11 VP9 Video Decoder"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_h265_dec_debug, - "d3d11h265dec", 0, "Direct3D11 H.265 Video Decoder"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_vp8_dec_debug, - "d3d11vp8dec", 0, "Direct3D11 VP8 Decoder"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_mpeg2_dec_debug, - "d3d11mpeg2dec", 0, "Direct3D11 MPEG2 Decoder"); - GST_DEBUG_CATEGORY_INIT (gst_d3d11_av1_dec_debug, - "d3d11av1dec", 0, "Direct3D11 AV1 Decoder"); - } -#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 */ - /* AMD seems supporting up to 12 cards, and 8 for NVIDIA */ - for (i = 0; i < 12; i++) { - GstD3D11Device *device = NULL; - ID3D11Device *device_handle; - D3D_FEATURE_LEVEL feature_level; - - device = gst_d3d11_device_new (i, D3D11_CREATE_DEVICE_BGRA_SUPPORT); - if (!device) - break; - - device_handle = gst_d3d11_device_get_device_handle (device); - feature_level = ID3D11Device_GetFeatureLevel (device_handle); - - 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 ()) { - GstD3D11Decoder *decoder = NULL; - gboolean legacy; - gboolean hardware; - - g_object_get (device, "hardware", &hardware, NULL); - if (!hardware) - goto done; - - decoder = gst_d3d11_decoder_new (device); - if (!decoder) - goto done; - - legacy = gst_d3d11_decoder_util_is_legacy_device (device); - - gst_d3d11_h264_dec_register (plugin, - device, decoder, GST_RANK_SECONDARY, legacy); - if (!legacy) { - gst_d3d11_h265_dec_register (plugin, device, decoder, - GST_RANK_SECONDARY); - gst_d3d11_vp9_dec_register (plugin, device, decoder, - GST_RANK_SECONDARY); - gst_d3d11_vp8_dec_register (plugin, device, decoder, - GST_RANK_SECONDARY); - gst_d3d11_mpeg2_dec_register (plugin, device, decoder, - GST_RANK_SECONDARY); - gst_d3d11_av1_dec_register (plugin, device, decoder, - GST_RANK_SECONDARY); - } - - done: - gst_clear_object (&decoder); - } -#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); - } -#endif - - gst_object_unref (device); - } - - /* FIXME: Our shader code is not compatible with D3D_FEATURE_LEVEL_9_3 - * or lower. So HLSL compiler cannot understand our shader code and - * therefore d3d11colorconverter cannot be configured. - * - * Known D3D_FEATURE_LEVEL_9_3 driver is - * "VirtualBox Graphics Adapter (WDDM)" - * ... and there might be some more old physical devices which don't support - * D3D_FEATURE_LEVEL_10_0. - */ - if (max_feature_level < D3D_FEATURE_LEVEL_10_0) - video_sink_rank = GST_RANK_NONE; - - gst_d3d11_plugin_utils_init (max_feature_level); - - gst_element_register (plugin, - "d3d11upload", GST_RANK_NONE, GST_TYPE_D3D11_UPLOAD); - gst_element_register (plugin, - "d3d11download", GST_RANK_NONE, GST_TYPE_D3D11_DOWNLOAD); - gst_element_register (plugin, - "d3d11convert", GST_RANK_NONE, GST_TYPE_D3D11_CONVERT); - gst_element_register (plugin, - "d3d11colorconvert", GST_RANK_NONE, GST_TYPE_D3D11_COLOR_CONVERT); - gst_element_register (plugin, - "d3d11scale", GST_RANK_NONE, GST_TYPE_D3D11_SCALE); - gst_element_register (plugin, - "d3d11videosink", video_sink_rank, GST_TYPE_D3D11_VIDEO_SINK); - - gst_element_register (plugin, - "d3d11compositorelement", GST_RANK_NONE, GST_TYPE_D3D11_COMPOSITOR); - gst_element_register (plugin, - "d3d11compositor", GST_RANK_SECONDARY, GST_TYPE_D3D11_COMPOSITOR_BIN); - -#ifdef HAVE_DXGI_DESKTOP_DUP - if (gst_d3d11_is_windows_8_or_greater ()) { - GST_DEBUG_CATEGORY_INIT (gst_d3d11_desktop_dup_debug, - "d3d11desktopdupsrc", 0, "d3d11desktopdupsrc"); - gst_element_register (plugin, - "d3d11desktopdupsrc", GST_RANK_NONE, GST_TYPE_D3D11_DESKTOP_DUP_SRC); - } -#endif - - return TRUE; -} - -GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, - GST_VERSION_MINOR, - d3d11, - "Direct3D11 plugin", - plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) diff --git a/sys/d3d11/plugin.cpp b/sys/d3d11/plugin.cpp new file mode 100644 index 000000000..2a6f09400 --- /dev/null +++ b/sys/d3d11/plugin.cpp @@ -0,0 +1,245 @@ +/* GStreamer + * Copyright (C) 2019 Seungha Yang + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include "gstd3d11videosink.h" +#include "gstd3d11upload.h" +#include "gstd3d11download.h" +#include "gstd3d11convert.h" +#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 "gstd3d11desktopdupsrc.h" +#endif +#ifdef HAVE_D3D11_VIDEO_PROC +#include "gstd3d11deinterlace.h" +#endif + +GST_DEBUG_CATEGORY (gst_d3d11_debug); +GST_DEBUG_CATEGORY (gst_d3d11_shader_debug); +GST_DEBUG_CATEGORY (gst_d3d11_converter_debug); +GST_DEBUG_CATEGORY (gst_d3d11_plugin_utils_debug); +GST_DEBUG_CATEGORY (gst_d3d11_format_debug); +GST_DEBUG_CATEGORY (gst_d3d11_device_debug); +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_h264_dec_debug); +GST_DEBUG_CATEGORY (gst_d3d11_h265_dec_debug); +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 + +#ifdef HAVE_DXGI_DESKTOP_DUP +GST_DEBUG_CATEGORY (gst_d3d11_desktop_dup_debug); +#endif + +#ifdef HAVE_D3D11_VIDEO_PROC +GST_DEBUG_CATEGORY (gst_d3d11_deinterlace_debug); +#endif + +#define GST_CAT_DEFAULT gst_d3d11_debug + +static gboolean +plugin_init (GstPlugin * plugin) +{ + GstRank video_sink_rank = GST_RANK_PRIMARY; + D3D_FEATURE_LEVEL max_feature_level = D3D_FEATURE_LEVEL_9_3; + guint i; + + GST_DEBUG_CATEGORY_INIT (gst_d3d11_debug, "d3d11", 0, "direct3d 11 plugin"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_shader_debug, + "d3d11shader", 0, "d3d11shader"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_converter_debug, + "d3d11converter", 0, "d3d11converter"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_plugin_utils_debug, + "d3d11pluginutils", 0, "d3d11 plugin utility functions"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_overlay_compositor_debug, + "d3d11overlaycompositor", 0, "d3d11overlaycompositor"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_window_debug, + "d3d11window", 0, "d3d11window"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_video_processor_debug, + "d3d11videoprocessor", 0, "d3d11videoprocessor"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_compositor_debug, + "d3d11compositor", 0, "d3d11compositor element"); + + if (!gst_d3d11_shader_init ()) { + 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_h264_dec_debug, + "d3d11h264dec", 0, "Direct3D11 H.264 Video Decoder"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_vp9_dec_debug, + "d3d11vp9dec", 0, "Direct3D11 VP9 Video Decoder"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_h265_dec_debug, + "d3d11h265dec", 0, "Direct3D11 H.265 Video Decoder"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_vp8_dec_debug, + "d3d11vp8dec", 0, "Direct3D11 VP8 Decoder"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_mpeg2_dec_debug, + "d3d11mpeg2dec", 0, "Direct3D11 MPEG2 Decoder"); + GST_DEBUG_CATEGORY_INIT (gst_d3d11_av1_dec_debug, + "d3d11av1dec", 0, "Direct3D11 AV1 Decoder"); + } +#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 */ + /* AMD seems supporting up to 12 cards, and 8 for NVIDIA */ + for (i = 0; i < 12; i++) { + GstD3D11Device *device = NULL; + ID3D11Device *device_handle; + D3D_FEATURE_LEVEL feature_level; + + device = gst_d3d11_device_new (i, D3D11_CREATE_DEVICE_BGRA_SUPPORT); + if (!device) + break; + + device_handle = gst_d3d11_device_get_device_handle (device); + feature_level = device_handle->GetFeatureLevel (); + + 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 ()) { + GstD3D11Decoder *decoder = NULL; + gboolean legacy; + gboolean hardware; + + g_object_get (device, "hardware", &hardware, NULL); + if (!hardware) + goto done; + + decoder = gst_d3d11_decoder_new (device); + if (!decoder) + goto done; + + legacy = gst_d3d11_decoder_util_is_legacy_device (device); + + gst_d3d11_h264_dec_register (plugin, + device, decoder, GST_RANK_SECONDARY, legacy); + if (!legacy) { + gst_d3d11_h265_dec_register (plugin, device, decoder, + GST_RANK_SECONDARY); + gst_d3d11_vp9_dec_register (plugin, device, decoder, + GST_RANK_SECONDARY); + gst_d3d11_vp8_dec_register (plugin, device, decoder, + GST_RANK_SECONDARY); + gst_d3d11_mpeg2_dec_register (plugin, device, decoder, + GST_RANK_SECONDARY); + gst_d3d11_av1_dec_register (plugin, device, decoder, + GST_RANK_SECONDARY); + } + + done: + gst_clear_object (&decoder); + } +#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); + } +#endif + + gst_object_unref (device); + } + + /* FIXME: Our shader code is not compatible with D3D_FEATURE_LEVEL_9_3 + * or lower. So HLSL compiler cannot understand our shader code and + * therefore d3d11colorconverter cannot be configured. + * + * Known D3D_FEATURE_LEVEL_9_3 driver is + * "VirtualBox Graphics Adapter (WDDM)" + * ... and there might be some more old physical devices which don't support + * D3D_FEATURE_LEVEL_10_0. + */ + if (max_feature_level < D3D_FEATURE_LEVEL_10_0) + video_sink_rank = GST_RANK_NONE; + + gst_d3d11_plugin_utils_init (max_feature_level); + + gst_element_register (plugin, + "d3d11upload", GST_RANK_NONE, GST_TYPE_D3D11_UPLOAD); + gst_element_register (plugin, + "d3d11download", GST_RANK_NONE, GST_TYPE_D3D11_DOWNLOAD); + gst_element_register (plugin, + "d3d11convert", GST_RANK_NONE, GST_TYPE_D3D11_CONVERT); + gst_element_register (plugin, + "d3d11colorconvert", GST_RANK_NONE, GST_TYPE_D3D11_COLOR_CONVERT); + gst_element_register (plugin, + "d3d11scale", GST_RANK_NONE, GST_TYPE_D3D11_SCALE); + gst_element_register (plugin, + "d3d11videosink", video_sink_rank, GST_TYPE_D3D11_VIDEO_SINK); + + gst_element_register (plugin, + "d3d11compositorelement", GST_RANK_NONE, GST_TYPE_D3D11_COMPOSITOR); + gst_element_register (plugin, + "d3d11compositor", GST_RANK_SECONDARY, GST_TYPE_D3D11_COMPOSITOR_BIN); + +#ifdef HAVE_DXGI_DESKTOP_DUP + if (gst_d3d11_is_windows_8_or_greater ()) { + GST_DEBUG_CATEGORY_INIT (gst_d3d11_desktop_dup_debug, + "d3d11desktopdupsrc", 0, "d3d11desktopdupsrc"); + gst_element_register (plugin, + "d3d11desktopdupsrc", GST_RANK_NONE, GST_TYPE_D3D11_DESKTOP_DUP_SRC); + } +#endif + + return TRUE; +} + +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + d3d11, + "Direct3D11 plugin", + plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) -- cgit v1.2.1