From 1d7262baa3242b648423759514fbb5e53cf8adc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Cerveau?= Date: Mon, 29 Mar 2021 13:11:23 +0200 Subject: [PATCH] asfdemux: 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: --- gst/asfdemux/gstasf.c | 34 +++++------------------ gst/asfdemux/gstasfdemux.c | 3 ++ gst/asfdemux/gstasfdemux.h | 3 -- gst/asfdemux/gstasfelement.c | 52 +++++++++++++++++++++++++++++++++++ gst/asfdemux/gstasfelements.h | 39 ++++++++++++++++++++++++++ gst/asfdemux/gstrtpasfdepay.c | 3 ++ gst/asfdemux/gstrtspwms.c | 3 ++ gst/asfdemux/meson.build | 1 + 8 files changed, 108 insertions(+), 30 deletions(-) create mode 100644 gst/asfdemux/gstasfelement.c create mode 100644 gst/asfdemux/gstasfelements.h diff --git a/gst/asfdemux/gstasf.c b/gst/asfdemux/gstasf.c index 01d289f3f4..73a7db2997 100644 --- a/gst/asfdemux/gstasf.c +++ b/gst/asfdemux/gstasf.c @@ -25,44 +25,24 @@ #include #include "gst/gst-i18n-plugin.h" -#include "gstasfdemux.h" -#include "gstrtspwms.h" -#include "gstrtpasfdepay.h" +#include "gstasfelements.h" + /* #include "gstasfmux.h" */ static gboolean plugin_init (GstPlugin * plugin) { - GST_DEBUG_CATEGORY_INIT (asfdemux_dbg, "asfdemux", 0, "asf demuxer element"); + gboolean ret = FALSE; -#ifdef ENABLE_NLS - GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE, - LOCALEDIR); - bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -#endif /* ENABLE_NLS */ - - gst_riff_init (); - - if (!gst_element_register (plugin, "asfdemux", GST_RANK_SECONDARY, - GST_TYPE_ASF_DEMUX)) { - return FALSE; - } - if (!gst_element_register (plugin, "rtspwms", GST_RANK_SECONDARY, - GST_TYPE_RTSP_WMS)) { - return FALSE; - } - if (!gst_element_register (plugin, "rtpasfdepay", GST_RANK_MARGINAL, - GST_TYPE_RTP_ASF_DEPAY)) { - return FALSE; - } + ret |= GST_ELEMENT_REGISTER (asfdemux, plugin); + ret |= GST_ELEMENT_REGISTER (rtspwms, plugin); + ret |= GST_ELEMENT_REGISTER (rtpasfdepay, plugin); /* if (!gst_element_register (plugin, "asfmux", GST_RANK_NONE, GST_TYPE_ASFMUX)) return FALSE; */ - - return TRUE; + return ret; } GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, diff --git a/gst/asfdemux/gstasfdemux.c b/gst/asfdemux/gstasfdemux.c index 69b3b184cc..8f68908c87 100644 --- a/gst/asfdemux/gstasfdemux.c +++ b/gst/asfdemux/gstasfdemux.c @@ -43,6 +43,7 @@ #include #include +#include "gstasfelements.h" #include "gstasfdemux.h" #include "asfheaders.h" #include "asfpacket.h" @@ -117,6 +118,8 @@ static GstFlowReturn gst_asf_demux_push_complete_payloads (GstASFDemux * demux, #define gst_asf_demux_parent_class parent_class G_DEFINE_TYPE (GstASFDemux, gst_asf_demux, GST_TYPE_ELEMENT); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (asfdemux, "asfdemux", GST_RANK_SECONDARY, + GST_TYPE_ASF_DEMUX, asf_element_init (plugin)); static void gst_asf_demux_class_init (GstASFDemuxClass * klass) diff --git a/gst/asfdemux/gstasfdemux.h b/gst/asfdemux/gstasfdemux.h index e97da93bf9..841b21ad4f 100644 --- a/gst/asfdemux/gstasfdemux.h +++ b/gst/asfdemux/gstasfdemux.h @@ -40,9 +40,6 @@ G_BEGIN_DECLS #define GST_IS_ASF_DEMUX_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ASF_DEMUX)) -GST_DEBUG_CATEGORY_EXTERN (asfdemux_dbg); -#define GST_CAT_DEFAULT asfdemux_dbg - typedef struct _GstASFDemux GstASFDemux; typedef struct _GstASFDemuxClass GstASFDemuxClass; typedef enum _GstASF3DMode GstASF3DMode; diff --git a/gst/asfdemux/gstasfelement.c b/gst/asfdemux/gstasfelement.c new file mode 100644 index 0000000000..3991f489e8 --- /dev/null +++ b/gst/asfdemux/gstasfelement.c @@ -0,0 +1,52 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen + * + * 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 "gst/gst-i18n-plugin.h" + +#include "gstasfelements.h" + +/* #include "gstasfmux.h" */ +GST_DEBUG_CATEGORY_EXTERN (asfdemux_dbg); +#define GST_CAT_DEFAULT asfdemux_dbg + +void +asf_element_init (GstPlugin * plugin) +{ + static gsize res = FALSE; + if (g_once_init_enter (&res)) { + GST_DEBUG_CATEGORY_INIT (asfdemux_dbg, "asfdemux", 0, + "asf demuxer element"); + +#ifdef ENABLE_NLS + GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE, + LOCALEDIR); + bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); +#endif /* ENABLE_NLS */ + gst_riff_init (); + g_once_init_leave (&res, TRUE); + } + +} diff --git a/gst/asfdemux/gstasfelements.h b/gst/asfdemux/gstasfelements.h new file mode 100644 index 0000000000..5495322c28 --- /dev/null +++ b/gst/asfdemux/gstasfelements.h @@ -0,0 +1,39 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen + * + * 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_ASF_ELEMENTS_H__ +#define __GST_ASF_ELEMENTS_H__ + + +#include +#include + + +G_BEGIN_DECLS + +void asf_element_init (GstPlugin * plugin); + +GST_ELEMENT_REGISTER_DECLARE (asfdemux); +GST_ELEMENT_REGISTER_DECLARE (rtspwms); +GST_ELEMENT_REGISTER_DECLARE (rtpasfdepay); + +G_END_DECLS + +#endif /* __GST_ASF_ELEMENTS_H__ */ diff --git a/gst/asfdemux/gstrtpasfdepay.c b/gst/asfdemux/gstrtpasfdepay.c index 3f13b5c578..c9e247202b 100644 --- a/gst/asfdemux/gstrtpasfdepay.c +++ b/gst/asfdemux/gstrtpasfdepay.c @@ -22,6 +22,7 @@ # include "config.h" #endif +#include "gstasfelements.h" #include "gstrtpasfdepay.h" #include @@ -53,6 +54,8 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", #define gst_rtp_asf_depay_parent_class parent_class G_DEFINE_TYPE (GstRtpAsfDepay, gst_rtp_asf_depay, GST_TYPE_RTP_BASE_DEPAYLOAD); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtpasfdepay, "rtpasfdepay", + GST_RANK_MARGINAL, GST_TYPE_RTP_ASF_DEPAY, asf_element_init (plugin)); static void gst_rtp_asf_depay_finalize (GObject * object); diff --git a/gst/asfdemux/gstrtspwms.c b/gst/asfdemux/gstrtspwms.c index 9d045a8d3a..ff58e1bc48 100644 --- a/gst/asfdemux/gstrtspwms.c +++ b/gst/asfdemux/gstrtspwms.c @@ -29,6 +29,7 @@ #include +#include "gstasfelements.h" #include "gstrtspwms.h" GST_DEBUG_CATEGORY_STATIC (rtspwms_debug); @@ -205,6 +206,8 @@ static void gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data); G_DEFINE_TYPE_WITH_CODE (GstRTSPWMS, gst_rtsp_wms, GST_TYPE_ELEMENT, G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION, gst_rtsp_wms_extension_init)); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtspwms, "rtspwms", GST_RANK_SECONDARY, + GST_TYPE_RTSP_WMS, asf_element_init (plugin)); static void gst_rtsp_wms_class_init (GstRTSPWMSClass * g_class) diff --git a/gst/asfdemux/meson.build b/gst/asfdemux/meson.build index aa6db98fee..a86188be24 100644 --- a/gst/asfdemux/meson.build +++ b/gst/asfdemux/meson.build @@ -1,6 +1,7 @@ asf_sources = [ 'gstasfdemux.c', 'gstasf.c', + 'gstasfelement.c', 'asfheaders.c', 'asfpacket.c', 'gstrtpasfdepay.c',