diff --git a/ext/vulkan/gstvulkan.c b/ext/vulkan/gstvulkan.c index d989d9f12e..ad2fed9eba 100644 --- a/ext/vulkan/gstvulkan.c +++ b/ext/vulkan/gstvulkan.c @@ -36,50 +36,29 @@ #include "vkdownload.h" #include "vkviewconvert.h" #include "vkdeviceprovider.h" +#include "gstvulkanelements.h" -#define GST_CAT_DEFAULT gst_vulkan_debug -GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); static gboolean plugin_init (GstPlugin * plugin) { - GST_DEBUG_CATEGORY_INIT (gst_vulkan_debug, "vulkan", 0, "vulkan"); + gboolean ret = FALSE; - if (!gst_element_register (plugin, "vulkansink", - GST_RANK_NONE, GST_TYPE_VULKAN_SINK)) { - return FALSE; - } + ret |= GST_DEVICE_PROVIDER_REGISTER (vulkandeviceprovider, plugin); - if (!gst_element_register (plugin, "vulkanupload", - GST_RANK_NONE, GST_TYPE_VULKAN_UPLOAD)) { - return FALSE; - } + ret |= GST_ELEMENT_REGISTER (vulkansink, plugin); - if (!gst_element_register (plugin, "vulkandownload", - GST_RANK_NONE, GST_TYPE_VULKAN_DOWNLOAD)) { - return FALSE; - } + ret |= GST_ELEMENT_REGISTER (vulkanupload, plugin); - if (!gst_element_register (plugin, "vulkancolorconvert", - GST_RANK_NONE, GST_TYPE_VULKAN_COLOR_CONVERT)) { - return FALSE; - } + ret |= GST_ELEMENT_REGISTER (vulkandownload, plugin); - if (!gst_element_register (plugin, "vulkanimageidentity", - GST_RANK_NONE, GST_TYPE_VULKAN_IMAGE_IDENTITY)) { - return FALSE; - } + ret |= GST_ELEMENT_REGISTER (vulkancolorconvert, plugin); - if (!gst_element_register (plugin, "vulkanviewconvert", - GST_RANK_NONE, GST_TYPE_VULKAN_VIEW_CONVERT)) { - return FALSE; - } + ret |= GST_ELEMENT_REGISTER (vulkanimageidentity, plugin); - if (!gst_device_provider_register (plugin, "vulkandeviceprovider", - GST_RANK_MARGINAL, GST_TYPE_VULKAN_DEVICE_PROVIDER)) - return FALSE; + ret |= GST_ELEMENT_REGISTER (vulkanviewconvert, plugin); - return TRUE; + return ret; } GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, diff --git a/ext/vulkan/gstvulkanelement.c b/ext/vulkan/gstvulkanelement.c new file mode 100644 index 0000000000..72c6d68528 --- /dev/null +++ b/ext/vulkan/gstvulkanelement.c @@ -0,0 +1,46 @@ +/* + * GStreamer + * Copyright (C) 2015 Matthew Waters + * + * 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. + */ + +/** + * SECTION:plugin-vulkan + * @title: vulkan + * + * Cross-platform Vulkan plugin. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "gstvulkanelements.h" + +#define GST_CAT_DEFAULT gst_vulkan_debug +GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); + +void +vulkan_element_init (GstPlugin * plugin) +{ + static gsize res = FALSE; + + if (g_once_init_enter (&res)) { + GST_DEBUG_CATEGORY_INIT (gst_vulkan_debug, "vulkan", 0, "vulkan"); + g_once_init_leave (&res, TRUE); + } +} diff --git a/ext/vulkan/gstvulkanelements.h b/ext/vulkan/gstvulkanelements.h new file mode 100644 index 0000000000..ef8db67edf --- /dev/null +++ b/ext/vulkan/gstvulkanelements.h @@ -0,0 +1,41 @@ +/* GStreamer + * Copyright (C) <2020> The GStreamer Contributors. + * + * 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. + */ + + +#ifndef __GST_VULKAN_ELEMENTS_H__ +#define __GST_VULKAN_ELEMENTS_H__ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +void vulkan_element_init (GstPlugin * plugin); + +GST_ELEMENT_REGISTER_DECLARE (vulkancolorconvert); +GST_ELEMENT_REGISTER_DECLARE (vulkandownload); +GST_ELEMENT_REGISTER_DECLARE (vulkanimageidentity); +GST_ELEMENT_REGISTER_DECLARE (vulkansink); +GST_ELEMENT_REGISTER_DECLARE (vulkanupload); +GST_ELEMENT_REGISTER_DECLARE (vulkanviewconvert); +GST_DEVICE_PROVIDER_REGISTER_DECLARE (vulkandeviceprovider); + + +#endif /* __GST_VULKAN_ELEMENTS_H__ */ diff --git a/ext/vulkan/meson.build b/ext/vulkan/meson.build index fca87b85bc..5b2fd9a1b0 100644 --- a/ext/vulkan/meson.build +++ b/ext/vulkan/meson.build @@ -17,6 +17,7 @@ subdir('shaders') vulkan_sources = [ 'gstvulkan.c', + 'gstvulkanelement.c', 'vkcolorconvert.c', 'vkdownload.c', 'vkdeviceprovider.c', diff --git a/ext/vulkan/vkcolorconvert.c b/ext/vulkan/vkcolorconvert.c index cbc494735c..82ad5982b9 100644 --- a/ext/vulkan/vkcolorconvert.c +++ b/ext/vulkan/vkcolorconvert.c @@ -43,6 +43,8 @@ #include "shaders/rgb_to_yuy2.frag.h" #include "shaders/rgb_to_nv12.frag.h" +#include "gstvulkanelements.h" + GST_DEBUG_CATEGORY (gst_debug_vulkan_color_convert); #define GST_CAT_DEFAULT gst_debug_vulkan_color_convert @@ -795,6 +797,8 @@ G_DEFINE_TYPE_WITH_CODE (GstVulkanColorConvert, gst_vulkan_color_convert, GST_TYPE_VULKAN_VIDEO_FILTER, GST_DEBUG_CATEGORY_INIT (gst_debug_vulkan_color_convert, "vulkancolorconvert", 0, "Vulkan Color Convert")); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (vulkancolorconvert, "vulkancolorconvert", + GST_RANK_NONE, GST_TYPE_VULKAN_COLOR_CONVERT, vulkan_element_init (plugin)); struct yuv_info { diff --git a/ext/vulkan/vkdeviceprovider.c b/ext/vulkan/vkdeviceprovider.c index 1f8888d990..e04d0c9acf 100644 --- a/ext/vulkan/vkdeviceprovider.c +++ b/ext/vulkan/vkdeviceprovider.c @@ -23,6 +23,7 @@ #include "config.h" #endif +#include "gstvulkanelements.h" #include "vkdeviceprovider.h" #include @@ -39,7 +40,10 @@ static GstDevice *gst_vulkan_device_object_new (GstVulkanPhysicalDevice * G_DEFINE_TYPE_WITH_CODE (GstVulkanDeviceProvider, gst_vulkan_device_provider, GST_TYPE_DEVICE_PROVIDER, GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, - "vulkandevice", 0, "Vulkan Device");); + "vulkandevice", 0, "Vulkan Device"); + ); +GST_DEVICE_PROVIDER_REGISTER_DEFINE (vulkandeviceprovider, + "vulkandeviceprovider", GST_RANK_MARGINAL, GST_TYPE_VULKAN_DEVICE_PROVIDER); static void gst_vulkan_device_provider_finalize (GObject * object); static void gst_vulkan_device_provider_set_property (GObject * object, diff --git a/ext/vulkan/vkdownload.c b/ext/vulkan/vkdownload.c index 1bb64b8770..c513cabd91 100644 --- a/ext/vulkan/vkdownload.c +++ b/ext/vulkan/vkdownload.c @@ -31,6 +31,7 @@ #include +#include "gstvulkanelements.h" #include "vkdownload.h" GST_DEBUG_CATEGORY (gst_debug_vulkan_download); @@ -470,6 +471,8 @@ enum G_DEFINE_TYPE_WITH_CODE (GstVulkanDownload, gst_vulkan_download, GST_TYPE_BASE_TRANSFORM, GST_DEBUG_CATEGORY_INIT (gst_debug_vulkan_download, "vulkandownload", 0, "Vulkan Downloader")); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (vulkandownload, "vulkandownload", + GST_RANK_NONE, GST_TYPE_VULKAN_DOWNLOAD, vulkan_element_init (plugin)); static void gst_vulkan_download_class_init (GstVulkanDownloadClass * klass) diff --git a/ext/vulkan/vkimageidentity.c b/ext/vulkan/vkimageidentity.c index d8972179d5..9bdb038f21 100644 --- a/ext/vulkan/vkimageidentity.c +++ b/ext/vulkan/vkimageidentity.c @@ -31,6 +31,7 @@ #include +#include "gstvulkanelements.h" #include "vkimageidentity.h" #include "shaders/identity.vert.h" @@ -83,6 +84,9 @@ G_DEFINE_TYPE_WITH_CODE (GstVulkanImageIdentity, gst_vulkan_image_identity, GST_TYPE_VULKAN_VIDEO_FILTER, GST_DEBUG_CATEGORY_INIT (gst_debug_vulkan_image_identity, "vulkanimageidentity", 0, "Vulkan Image identity")); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (vulkanimageidentity, + "vulkanimageidentity", GST_RANK_NONE, GST_TYPE_VULKAN_IMAGE_IDENTITY, + vulkan_element_init (plugin)); static void gst_vulkan_image_identity_class_init (GstVulkanImageIdentityClass * klass) diff --git a/ext/vulkan/vksink.c b/ext/vulkan/vksink.c index 9177b98fca..09bb66db1a 100644 --- a/ext/vulkan/vksink.c +++ b/ext/vulkan/vksink.c @@ -32,6 +32,7 @@ //#include +#include "gstvulkanelements.h" #include "vksink.h" GST_DEBUG_CATEGORY (gst_debug_vulkan_sink); @@ -108,6 +109,8 @@ G_DEFINE_TYPE_WITH_CODE (GstVulkanSink, gst_vulkan_sink, gst_vulkan_sink_video_overlay_init); G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION, gst_vulkan_sink_navigation_interface_init)); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (vulkansink, "vulkansink", GST_RANK_NONE, + GST_TYPE_VULKAN_SINK, vulkan_element_init (plugin)); static void gst_vulkan_sink_class_init (GstVulkanSinkClass * klass) diff --git a/ext/vulkan/vkupload.c b/ext/vulkan/vkupload.c index 0f2a6e9d53..f49ac0140e 100644 --- a/ext/vulkan/vkupload.c +++ b/ext/vulkan/vkupload.c @@ -30,7 +30,7 @@ #endif #include - +#include "gstvulkanelements.h" #include "vkupload.h" GST_DEBUG_CATEGORY (gst_debug_vulkan_upload); @@ -1164,6 +1164,8 @@ enum G_DEFINE_TYPE_WITH_CODE (GstVulkanUpload, gst_vulkan_upload, GST_TYPE_BASE_TRANSFORM, GST_DEBUG_CATEGORY_INIT (gst_debug_vulkan_upload, "vulkanupload", 0, "Vulkan Uploader")); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (vulkanupload, "vulkanupload", + GST_RANK_NONE, GST_TYPE_VULKAN_UPLOAD, vulkan_element_init (plugin)); static void gst_vulkan_upload_class_init (GstVulkanUploadClass * klass) diff --git a/ext/vulkan/vkviewconvert.c b/ext/vulkan/vkviewconvert.c index 8d9e7f4b15..2ff998b163 100644 --- a/ext/vulkan/vkviewconvert.c +++ b/ext/vulkan/vkviewconvert.c @@ -31,6 +31,7 @@ #include +#include "gstvulkanelements.h" #include "vkviewconvert.h" #include "shaders/identity.vert.h" @@ -561,6 +562,8 @@ G_DEFINE_TYPE_WITH_CODE (GstVulkanViewConvert, gst_vulkan_view_convert, GST_TYPE_VULKAN_VIDEO_FILTER, GST_DEBUG_CATEGORY_INIT (gst_debug_vulkan_view_convert, "vulkanviewconvert", 0, "Vulkan View Convert")); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (vulkanviewconvert, "vulkanviewconvert", + GST_RANK_NONE, GST_TYPE_VULKAN_VIEW_CONVERT, vulkan_element_init (plugin)); static void gst_vulkan_view_convert_class_init (GstVulkanViewConvertClass * klass)