d3d11: Get rid of "extern "C"" wrapping for GST_DEBUG_CATEGORY_EXTERN
authorSeungha Yang <seungha@centricular.com>
Fri, 10 Sep 2021 15:43:26 +0000 (00:43 +0900)
committerSeungha Yang <seungha@centricular.com>
Thu, 16 Sep 2021 15:48:45 +0000 (00:48 +0900)
Instead, change the file defining debug category to cpp

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2525>

24 files changed:
sys/d3d11/gstd3d11av1dec.cpp
sys/d3d11/gstd3d11compositor.cpp
sys/d3d11/gstd3d11compositorbin.cpp
sys/d3d11/gstd3d11converter.cpp
sys/d3d11/gstd3d11deinterlace.cpp
sys/d3d11/gstd3d11desktopdup.cpp
sys/d3d11/gstd3d11desktopdupsrc.cpp
sys/d3d11/gstd3d11h264dec.cpp
sys/d3d11/gstd3d11h265dec.cpp
sys/d3d11/gstd3d11mpeg2dec.cpp
sys/d3d11/gstd3d11overlaycompositor.cpp
sys/d3d11/gstd3d11pluginutils.cpp
sys/d3d11/gstd3d11shader.cpp
sys/d3d11/gstd3d11videoprocessor.cpp
sys/d3d11/gstd3d11vp8dec.cpp
sys/d3d11/gstd3d11vp9dec.cpp
sys/d3d11/gstd3d11window.cpp
sys/d3d11/gstd3d11window_corewindow.cpp
sys/d3d11/gstd3d11window_dummy.cpp
sys/d3d11/gstd3d11window_swapchainpanel.cpp
sys/d3d11/gstd3d11window_win32.cpp
sys/d3d11/meson.build
sys/d3d11/plugin.c [deleted file]
sys/d3d11/plugin.cpp [new file with mode: 0644]

index c8bc36971583ae1b85dd3698af6c8f7b53a24f7e..c479598994e0cf04cd689d2d415e83ecf5a33f69 100644 (file)
@@ -49,6 +49,9 @@
 #include <d3d9.h>
 #include <dxva.h>
 
+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,
index 1f9198705c10fb258a7bd0a49153f0a87a93980f..0c70873c2b2fd7d6a5d2f08d9b70197bf1269cae 100644 (file)
 #include <string.h>
 #include <wrl.h>
 
-/* *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* */
 
 /**
index e53cc5bf4798ba90f4351c0794e787e577e151ee..1e60797230b5e5ab34151e64b65d687f9a320c44 100644 (file)
 #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 *
  ****************************/
index dd63411704e5bef96bae332a336fa551bdcddc2d..1d22a009780c801c96d435256c9a46ba052ca518 100644 (file)
 #include <wrl.h>
 #include <string.h>
 
-/* *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
index b961cf043ebec64122cefe51cffd3d71ec798354..99de8437b04de7c2d9bb65f7589c0c10532bbf4c 100644 (file)
 #include <wrl.h>
 #include <string.h>
 
-/* *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:
index 8be33c101af43406c13c572123da8e41a20964a9..1e5590ee9476b6ef863c471238be2290e6671582 100644 (file)
 
 #include <wrl.h>
 
-/* *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);
index 39ec4cde7b858d6fd9b30d4d64f21addd0d497e5..9dd445d71a8491653384175e71b07674752e3bf9 100644 (file)
 
 #include <string.h>
 
-/* *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,
index 08adb62374f5dbf5726d2b5e85715599201b6e1b..f1a3d548fe174030a8469463ca2757aaa5540b89 100644 (file)
 #include <d3d9.h>
 #include <dxva.h>
 
-/* *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,
index 1ca92064f37a92a7107e0c9baa155d6ce3a3b68a..00826bfaf7f047a9193e9b1c73ba174da6715a15 100644 (file)
 #include <d3d9.h>
 #include <dxva.h>
 
-/* *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,
index da32f95a3ecb34e8a96c0813d02a49a5d2979f21..8a6ceed73779ed0da1caaf6f421c1a80ddfe7ac2 100644 (file)
 #include <d3d9.h>
 #include <dxva.h>
 
-/* *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,
index b09ca9c5ba1836782f742d285ed722fc7ed55873..b2dd65330dafb8cb760a8afe8a25d34aabee9cca 100644 (file)
 #include "gstd3d11pluginutils.h"
 #include <wrl.h>
 
-/* *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 {
index 5d899c765fa5480812f1291483d42b5756f45de5..624063eefdf277bc1ad7623b370005ba9fb12972 100644 (file)
 #include <windows.h>
 #include <versionhelpers.h>
 
-/* *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;
 
index ded8689c55bb03072bf9d6ea6dc7a508d0ea273d..3f9ea34fca225200ec4400a08dd3ddcb863e79bd 100644 (file)
 
 /* *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
 
index e1b4b5cee24c59dab3a2d7fd8d2bcdbd21219916..a907fab46f32daaf75746bdd3c319f6354b80580 100644 (file)
 
 #include <string.h>
 
-/* *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
index 9c2e6ec1e78338bd73b5fd96e488e4fbb35e9c16..fd6c00e22a173dadce589e156709a0695b5d08cb 100644 (file)
 #include <d3d9.h>
 #include <dxva.h>
 
-/* *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,
index c6aba1cebef3587e288fb3b8f12d6aa4b3654f9e..09c15bfabe6547f5d1f37cf137eac0e4f84c9eb7 100644 (file)
 #include <d3d9.h>
 #include <dxva.h>
 
-/* *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,
index 666bde53462356f38b6b53a7c0a6fb6a7f352972..85506b1a869dee0bfcf1c50fdfb9a95f27002635 100644 (file)
 #endif
 
 #include <wrl.h>
+
 /* *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
 {
index f637080853627a15fdfb5f8365d01dfe390b1063..a2b4e5b3d32494e6c8935f4d58bd91d8932e7283 100644 (file)
@@ -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)
 
index 434c661f7e458111c6d6e7732420e0c5fc9ad010..f45ffbd611fea14fb0bef3a4afac46f547174267 100644 (file)
 
 /* *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;
index fdb068b1b8f425a1039cd4cec41cf246ed07c355..2e6773a2606d65c7145edeb82200ca7e579f28cc 100644 (file)
@@ -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)
 
index 23d5d3de86e870f8db590574a9e169977dffda37..644839129d4e14d0360543b1b1e32325418ef4d8 100644 (file)
 
 /* *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"
index 24f2debf8d1199c8920ab1ef526ed8766330ceeb..43f213d9c91c5627ed17da5defa2ac680f57db98 100644 (file)
@@ -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 (file)
index c089428..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/* GStreamer
- * Copyright (C) 2019 Seungha Yang <seungha.yang@navercorp.com>
- *
- * 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 <gst/gst.h>
-#include <gst/d3d11/gstd3d11.h>
-#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 (file)
index 0000000..2a6f094
--- /dev/null
@@ -0,0 +1,245 @@
+/* GStreamer
+ * Copyright (C) 2019 Seungha Yang <seungha.yang@navercorp.com>
+ *
+ * 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 <gst/gst.h>
+#include <gst/d3d11/gstd3d11.h>
+#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)