diff options
author | Stéphane Cerveau <scerveau@collabora.com> | 2021-03-26 11:00:50 +0100 |
---|---|---|
committer | Olivier Crête <olivier.crete@ocrete.ca> | 2021-04-09 19:23:40 +0000 |
commit | da9e012e8a0b82e9487ab9802162023d87d63d3f (patch) | |
tree | c0a13fd3d7a2f34a9dfe61d3ef5943b46e96a692 /sys/decklink | |
parent | fee725f3cc75a74b77ee3ce785e65f1d2d500305 (diff) | |
download | gstreamer-plugins-bad-da9e012e8a0b82e9487ab9802162023d87d63d3f.tar.gz |
plugins-sys: allow per feature registration
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.
More details here:
https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2116>
Diffstat (limited to 'sys/decklink')
-rw-r--r-- | sys/decklink/gstdecklink.cpp | 57 | ||||
-rw-r--r-- | sys/decklink/gstdecklink.h | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkaudiosink.cpp | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkaudiosink.h | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkaudiosrc.cpp | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkaudiosrc.h | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkdeviceprovider.cpp | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkdeviceprovider.h | 1 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkplugin.cpp | 52 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkvideosink.cpp | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkvideosink.h | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkvideosrc.cpp | 2 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkvideosrc.h | 2 | ||||
-rw-r--r-- | sys/decklink/meson.build | 1 |
14 files changed, 91 insertions, 40 deletions
diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp index 7916e8bdb..453418059 100644 --- a/sys/decklink/gstdecklink.cpp +++ b/sys/decklink/gstdecklink.cpp @@ -1992,45 +1992,22 @@ gst_decklink_clock_get_internal_time (GstClock * clock) return result; } -static gboolean -plugin_init (GstPlugin * plugin) +void +decklink_element_init (GstPlugin * plugin) { - GST_DEBUG_CATEGORY_INIT (gst_decklink_debug, "decklink", 0, - "debug category for decklink plugin"); - - gst_element_register (plugin, "decklinkaudiosink", GST_RANK_NONE, - GST_TYPE_DECKLINK_AUDIO_SINK); - gst_element_register (plugin, "decklinkvideosink", GST_RANK_NONE, - GST_TYPE_DECKLINK_VIDEO_SINK); - gst_element_register (plugin, "decklinkaudiosrc", GST_RANK_NONE, - GST_TYPE_DECKLINK_AUDIO_SRC); - gst_element_register (plugin, "decklinkvideosrc", GST_RANK_NONE, - GST_TYPE_DECKLINK_VIDEO_SRC); - - gst_device_provider_register (plugin, "decklinkdeviceprovider", - GST_RANK_PRIMARY, GST_TYPE_DECKLINK_DEVICE_PROVIDER); - - gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_AUDIO_CHANNELS, - (GstPluginAPIFlags) 0); - gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_AUDIO_CONNECTION, - (GstPluginAPIFlags) 0); - gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_PROFILE_ID, - (GstPluginAPIFlags) 0); - gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_KEYER_MODE, - (GstPluginAPIFlags) 0); - gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_MODE, (GstPluginAPIFlags) 0); - gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_TIMECODE_FORMAT, - (GstPluginAPIFlags) 0); - gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_VIDEO_FORMAT, - (GstPluginAPIFlags) 0); - gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_CONNECTION, - (GstPluginAPIFlags) 0); - - return TRUE; + static gsize res = FALSE; + if (g_once_init_enter (&res)) { + GST_DEBUG_CATEGORY_INIT (gst_decklink_debug, "decklink", 0, + "debug category for decklink plugin"); + gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_AUDIO_CHANNELS, (GstPluginAPIFlags) 0); + gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_AUDIO_CONNECTION, (GstPluginAPIFlags) 0); + gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_PROFILE_ID, (GstPluginAPIFlags) 0); + gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_KEYER_MODE, (GstPluginAPIFlags) 0); + gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_MODE, (GstPluginAPIFlags) 0); + gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_TIMECODE_FORMAT, (GstPluginAPIFlags) 0); + gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_VIDEO_FORMAT, (GstPluginAPIFlags) 0); + gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK_CONNECTION, (GstPluginAPIFlags) 0); + + g_once_init_leave (&res, TRUE); + } } - -GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, - GST_VERSION_MINOR, - decklink, - "Blackmagic Decklink plugin", - plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_PACKAGE_ORIGIN) diff --git a/sys/decklink/gstdecklink.h b/sys/decklink/gstdecklink.h index 0e3e3d5bc..baa78795e 100644 --- a/sys/decklink/gstdecklink.h +++ b/sys/decklink/gstdecklink.h @@ -55,6 +55,8 @@ #define WINAPI #endif /* G_OS_WIN32 */ +void decklink_element_init (GstPlugin * plugin); + typedef enum { GST_DECKLINK_MODE_AUTO, diff --git a/sys/decklink/gstdecklinkaudiosink.cpp b/sys/decklink/gstdecklinkaudiosink.cpp index 924caf1d1..65991ba3a 100644 --- a/sys/decklink/gstdecklinkaudiosink.cpp +++ b/sys/decklink/gstdecklinkaudiosink.cpp @@ -101,6 +101,8 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", #define parent_class gst_decklink_audio_sink_parent_class G_DEFINE_TYPE (GstDecklinkAudioSink, gst_decklink_audio_sink, GST_TYPE_BASE_SINK); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (decklinkaudiosink, "decklinkaudiosink", GST_RANK_NONE, + GST_TYPE_DECKLINK_AUDIO_SINK, decklink_element_init (plugin)); static void gst_decklink_audio_sink_class_init (GstDecklinkAudioSinkClass * klass) diff --git a/sys/decklink/gstdecklinkaudiosink.h b/sys/decklink/gstdecklinkaudiosink.h index 0394664b1..a9a94e775 100644 --- a/sys/decklink/gstdecklinkaudiosink.h +++ b/sys/decklink/gstdecklinkaudiosink.h @@ -67,6 +67,8 @@ struct _GstDecklinkAudioSinkClass GType gst_decklink_audio_sink_get_type (void); +GST_ELEMENT_REGISTER_DECLARE (decklinkaudiosink); + G_END_DECLS #endif /* __GST_DECKLINK_AUDIO_SINK_H__ */ diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp index 41e4f8571..c0845cd25 100644 --- a/sys/decklink/gstdecklinkaudiosrc.cpp +++ b/sys/decklink/gstdecklinkaudiosrc.cpp @@ -140,6 +140,8 @@ static gboolean gst_decklink_audio_src_stop (GstDecklinkAudioSrc * self); #define parent_class gst_decklink_audio_src_parent_class G_DEFINE_TYPE (GstDecklinkAudioSrc, gst_decklink_audio_src, GST_TYPE_PUSH_SRC); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (decklinkaudiosrc, "decklinkaudiosrc", GST_RANK_NONE, + GST_TYPE_DECKLINK_AUDIO_SRC, decklink_element_init (plugin)); static void gst_decklink_audio_src_class_init (GstDecklinkAudioSrcClass * klass) diff --git a/sys/decklink/gstdecklinkaudiosrc.h b/sys/decklink/gstdecklinkaudiosrc.h index fdb77b622..bda465506 100644 --- a/sys/decklink/gstdecklinkaudiosrc.h +++ b/sys/decklink/gstdecklinkaudiosrc.h @@ -94,6 +94,8 @@ struct _GstDecklinkAudioSrcClass GType gst_decklink_audio_src_get_type (void); +GST_ELEMENT_REGISTER_DECLARE (decklinkaudiosrc); + G_END_DECLS #endif /* __GST_DECKLINK_AUDIO_SRC_H__ */ diff --git a/sys/decklink/gstdecklinkdeviceprovider.cpp b/sys/decklink/gstdecklinkdeviceprovider.cpp index c884c4281..3a9870593 100644 --- a/sys/decklink/gstdecklinkdeviceprovider.cpp +++ b/sys/decklink/gstdecklinkdeviceprovider.cpp @@ -26,6 +26,8 @@ G_DEFINE_TYPE (GstDecklinkDeviceProvider, gst_decklink_device_provider, GST_TYPE_DEVICE_PROVIDER); +GST_DEVICE_PROVIDER_REGISTER_DEFINE (decklinkdeviceprovider, "decklinkdeviceprovider", + GST_RANK_PRIMARY, GST_TYPE_DECKLINK_DEVICE_PROVIDER); static void gst_decklink_device_provider_init (GstDecklinkDeviceProvider * self) diff --git a/sys/decklink/gstdecklinkdeviceprovider.h b/sys/decklink/gstdecklinkdeviceprovider.h index 0bd684def..5f79dfd42 100644 --- a/sys/decklink/gstdecklinkdeviceprovider.h +++ b/sys/decklink/gstdecklinkdeviceprovider.h @@ -41,6 +41,7 @@ struct _GstDecklinkDeviceProvider }; GType gst_decklink_device_provider_get_type (void); +GST_DEVICE_PROVIDER_REGISTER_DECLARE (decklinkdeviceprovider); G_END_DECLS diff --git a/sys/decklink/gstdecklinkplugin.cpp b/sys/decklink/gstdecklinkplugin.cpp new file mode 100644 index 000000000..7ba41a31a --- /dev/null +++ b/sys/decklink/gstdecklinkplugin.cpp @@ -0,0 +1,52 @@ +/* GStreamer + * Copyright (C) 2011 David Schleef <ds@schleef.org> + * Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com> + * Copyright (C) 2015 Florian Langlois <florian.langlois@fr.thalesgroup.com> + * Copyright (C) 2020 Sohonet <dev@sohonet.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 Street, Suite 500, + * Boston, MA 02110-1335, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gst/gst.h> + +#include "gstdecklinkaudiosink.h" +#include "gstdecklinkvideosink.h" +#include "gstdecklinkaudiosrc.h" +#include "gstdecklinkvideosrc.h" +#include "gstdecklinkdeviceprovider.h" + +static gboolean +plugin_init (GstPlugin * plugin) +{ + GST_ELEMENT_REGISTER (decklinkaudiosink, plugin); + GST_ELEMENT_REGISTER (decklinkvideosink, plugin); + GST_ELEMENT_REGISTER (decklinkaudiosrc, plugin); + GST_ELEMENT_REGISTER (decklinkvideosrc, plugin); + + GST_DEVICE_PROVIDER_REGISTER (decklinkdeviceprovider, plugin); + + return TRUE; +} + +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + decklink, + "Blackmagic Decklink plugin", + plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_PACKAGE_ORIGIN) diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp index 7e9b514c6..a64c046a6 100644 --- a/sys/decklink/gstdecklinkvideosink.cpp +++ b/sys/decklink/gstdecklinkvideosink.cpp @@ -280,6 +280,8 @@ gst_decklink_video_sink_start_scheduled_playback (GstElement * element); #define parent_class gst_decklink_video_sink_parent_class G_DEFINE_TYPE (GstDecklinkVideoSink, gst_decklink_video_sink, GST_TYPE_BASE_SINK); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (decklinkvideosink, "decklinkvideosink", GST_RANK_NONE, + GST_TYPE_DECKLINK_VIDEO_SINK, decklink_element_init (plugin)); static gboolean reset_framerate (GstCapsFeatures * features, GstStructure * structure, diff --git a/sys/decklink/gstdecklinkvideosink.h b/sys/decklink/gstdecklinkvideosink.h index dffe3a7f3..555ec8e72 100644 --- a/sys/decklink/gstdecklinkvideosink.h +++ b/sys/decklink/gstdecklinkvideosink.h @@ -84,6 +84,8 @@ struct _GstDecklinkVideoSinkClass GType gst_decklink_video_sink_get_type (void); +GST_ELEMENT_REGISTER_DECLARE (decklinkvideosink); + void gst_decklink_video_sink_convert_to_internal_clock (GstDecklinkVideoSink * self, GstClockTime * timestamp, GstClockTime * duration); diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp index 40dc31db2..41de397d7 100644 --- a/sys/decklink/gstdecklinkvideosrc.cpp +++ b/sys/decklink/gstdecklinkvideosrc.cpp @@ -242,6 +242,8 @@ static void gst_decklink_video_src_start_streams (GstElement * element); #define parent_class gst_decklink_video_src_parent_class G_DEFINE_TYPE (GstDecklinkVideoSrc, gst_decklink_video_src, GST_TYPE_PUSH_SRC); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (decklinkvideosrc, "decklinkvideosrc", GST_RANK_NONE, + GST_TYPE_DECKLINK_VIDEO_SRC, decklink_element_init (plugin)); static void gst_decklink_video_src_class_init (GstDecklinkVideoSrcClass * klass) diff --git a/sys/decklink/gstdecklinkvideosrc.h b/sys/decklink/gstdecklinkvideosrc.h index 3213aa5b7..edd52d334 100644 --- a/sys/decklink/gstdecklinkvideosrc.h +++ b/sys/decklink/gstdecklinkvideosrc.h @@ -124,6 +124,8 @@ struct _GstDecklinkVideoSrcClass GType gst_decklink_video_src_get_type (void); +GST_ELEMENT_REGISTER_DECLARE (decklinkvideosrc); + G_END_DECLS #endif /* __GST_DECKLINK_VIDEO_SRC_H__ */ diff --git a/sys/decklink/meson.build b/sys/decklink/meson.build index abffb633f..d869e79a4 100644 --- a/sys/decklink/meson.build +++ b/sys/decklink/meson.build @@ -1,4 +1,5 @@ decklink_sources = [ + 'gstdecklinkplugin.cpp', 'gstdecklink.cpp', 'gstdecklinkaudiosink.cpp', 'gstdecklinkvideosink.cpp', |