From 4e9520ab342ed214ba2571846b8d3556142a41e6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Cerveau?= Date: Thu, 11 Feb 2021 10:43:14 +0100 Subject: [PATCH] encoding: 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/encoding/gstencodebin.c | 3 +++ gst/encoding/gstencodebin2.c | 4 ++++ gst/encoding/gstencodingelements.c | 46 ++++++++++++++++++++++++++++++++++++++ gst/encoding/gstencodingelements.h | 36 +++++++++++++++++++++++++++++ gst/encoding/meson.build | 1 + gst/encoding/plugin.c | 22 +++++------------- 6 files changed, 95 insertions(+), 17 deletions(-) create mode 100644 gst/encoding/gstencodingelements.c create mode 100644 gst/encoding/gstencodingelements.h diff --git a/gst/encoding/gstencodebin.c b/gst/encoding/gstencodebin.c index 7b1e6ef..f137291 100644 --- a/gst/encoding/gstencodebin.c +++ b/gst/encoding/gstencodebin.c @@ -83,6 +83,7 @@ * */ +#include "gstencodingelements.h" #include "gstencodebin.h" struct _GstEncodeBin @@ -91,6 +92,8 @@ struct _GstEncodeBin }; G_DEFINE_TYPE (GstEncodeBin, gst_encode_bin, GST_TYPE_ENCODE_BASE_BIN); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (encodebin, "encodebin", GST_RANK_NONE, + gst_encode_bin_get_type (), encoding_element_init (plugin)); static GstStaticPadTemplate muxer_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, diff --git a/gst/encoding/gstencodebin2.c b/gst/encoding/gstencodebin2.c index ebd3a08..5a64634 100644 --- a/gst/encoding/gstencodebin2.c +++ b/gst/encoding/gstencodebin2.c @@ -23,9 +23,11 @@ #endif #include +#include "gstencodingelements.h" #include "gstencodebasebin.h" #include "gstencodebin2.h" + /** * SECTION:element-encodebin2 * @@ -57,6 +59,8 @@ struct _GstEncodeBin2 }; G_DEFINE_TYPE (GstEncodeBin2, gst_encode_bin2, GST_TYPE_ENCODE_BASE_BIN); +GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (encodebin2, "encodebin2", GST_RANK_NONE, + gst_encode_bin2_get_type (), encoding_element_init (plugin)); static void gst_encode_bin2_class_init (GstEncodeBin2Class * klass) diff --git a/gst/encoding/gstencodingelements.c b/gst/encoding/gstencodingelements.c new file mode 100644 index 0000000..a06a808 --- /dev/null +++ b/gst/encoding/gstencodingelements.c @@ -0,0 +1,46 @@ +/* GStreamer encoding bin + * Copyright (C) 2016 Jan Schmidt + * (C) 2020 Thibault Saunier + * (C) 2009 Edward Hervey + * (C) 2009 Nokia Corporation + * + * 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 "gstencodingelements.h" + +void +encoding_element_init (GstPlugin * plugin) +{ + static gsize res = FALSE; + + if (g_once_init_enter (&res)) { +#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 + g_once_init_leave (&res, TRUE); + } +} diff --git a/gst/encoding/gstencodingelements.h b/gst/encoding/gstencodingelements.h new file mode 100644 index 0000000..cf5bf7f --- /dev/null +++ b/gst/encoding/gstencodingelements.h @@ -0,0 +1,36 @@ +/* GStreamer encoding bin + * Copyright (C) 2016 Jan Schmidt + * (C) 2020 Thibault Saunier + * (C) 2009 Edward Hervey + * (C) 2009 Nokia Corporation + * + * 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 __ENCODING_ELEMENTS_H__ +#define __ENCODING_ELEMENTS_H__ + +#include + +G_BEGIN_DECLS + +G_GNUC_INTERNAL void encoding_element_init (GstPlugin * plugin); + +GST_ELEMENT_REGISTER_DECLARE (encodebin); +GST_ELEMENT_REGISTER_DECLARE (encodebin2); + +G_END_DECLS + +#endif //__ENCODING_ELEMENTS_H__ diff --git a/gst/encoding/meson.build b/gst/encoding/meson.build index 09ea83c..6c61b41 100644 --- a/gst/encoding/meson.build +++ b/gst/encoding/meson.build @@ -6,6 +6,7 @@ encoding_sources = [ 'gststreamcombiner.c', 'gststreamsplitter.c', 'plugin.c', + 'gstencodingelements.c', ] gstencoding = library('gstencoding', diff --git a/gst/encoding/plugin.c b/gst/encoding/plugin.c index ee2e0bf..9875198 100644 --- a/gst/encoding/plugin.c +++ b/gst/encoding/plugin.c @@ -24,30 +24,18 @@ #endif #include -#include -#include "gstencodebin.h" -#include "gstencodebin2.h" +#include "gstencodingelements.h" static gboolean plugin_init (GstPlugin * plugin) { - gboolean res; + 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 */ + ret |= GST_ELEMENT_REGISTER (encodebin, plugin); + ret |= GST_ELEMENT_REGISTER (encodebin2, plugin); - res = gst_element_register (plugin, "encodebin", GST_RANK_NONE, - gst_encode_bin_get_type ()); - - res |= gst_element_register (plugin, "encodebin2", GST_RANK_NONE, - gst_encode_bin2_get_type ()); - - return res; + return ret; } GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, -- 2.7.4