summaryrefslogtreecommitdiff
path: root/sys/decklink
diff options
context:
space:
mode:
authorStéphane Cerveau <scerveau@collabora.com>2021-03-26 11:00:50 +0100
committerOlivier Crête <olivier.crete@ocrete.ca>2021-04-09 19:23:40 +0000
commitda9e012e8a0b82e9487ab9802162023d87d63d3f (patch)
treec0a13fd3d7a2f34a9dfe61d3ef5943b46e96a692 /sys/decklink
parentfee725f3cc75a74b77ee3ce785e65f1d2d500305 (diff)
downloadgstreamer-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.cpp57
-rw-r--r--sys/decklink/gstdecklink.h2
-rw-r--r--sys/decklink/gstdecklinkaudiosink.cpp2
-rw-r--r--sys/decklink/gstdecklinkaudiosink.h2
-rw-r--r--sys/decklink/gstdecklinkaudiosrc.cpp2
-rw-r--r--sys/decklink/gstdecklinkaudiosrc.h2
-rw-r--r--sys/decklink/gstdecklinkdeviceprovider.cpp2
-rw-r--r--sys/decklink/gstdecklinkdeviceprovider.h1
-rw-r--r--sys/decklink/gstdecklinkplugin.cpp52
-rw-r--r--sys/decklink/gstdecklinkvideosink.cpp2
-rw-r--r--sys/decklink/gstdecklinkvideosink.h2
-rw-r--r--sys/decklink/gstdecklinkvideosrc.cpp2
-rw-r--r--sys/decklink/gstdecklinkvideosrc.h2
-rw-r--r--sys/decklink/meson.build1
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',