From 160ba7d0e9094a9254586f96ed9a02e9a6955dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Cerveau?= Date: Fri, 11 Dec 2020 15:02:03 +0100 Subject: [PATCH] app: 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/app/gstapp.c | 41 ++++++---------------------------------- gst/app/gstappelements.h | 36 +++++++++++++++++++++++++++++++++++ gst/app/gstappsink.c | 35 ++++++++++++++++++++++++++++++++++ gst/app/gstappsrc.c | 35 ++++++++++++++++++++++++++++++++++ gst/app/meson.build | 8 +++++++- 5 files changed, 119 insertions(+), 36 deletions(-) create mode 100644 gst/app/gstappelements.h create mode 100644 gst/app/gstappsink.c create mode 100644 gst/app/gstappsrc.c diff --git a/gst/app/gstapp.c b/gst/app/gstapp.c index 9732fc8c20..1a036a204e 100644 --- a/gst/app/gstapp.c +++ b/gst/app/gstapp.c @@ -16,47 +16,18 @@ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ -/** - * SECTION:element-appsrc - * @title: appsrc - * - * The appsrc element can be used by applications to insert data into a - * GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides - * external API functions. - * - * For the documentation of the API, please see the - * libgstapp section in the - * GStreamer Plugins Base Libraries documentation. - */ -/** - * SECTION:element-appsink - * @title: appsink - * - * Appsink is a sink plugin that supports many different methods for making - * the application get a handle on the GStreamer data in a pipeline. Unlike - * most GStreamer elements, Appsink provides external API functions. - * - * For the documentation of the API, please see the - * libgstapp section in - * the GStreamer Plugins Base Libraries documentation. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include +#include "gstappelements.h" static gboolean plugin_init (GstPlugin * plugin) { - gst_element_register (plugin, "appsrc", GST_RANK_NONE, GST_TYPE_APP_SRC); - gst_element_register (plugin, "appsink", GST_RANK_NONE, GST_TYPE_APP_SINK); + gboolean ret = FALSE; - return TRUE; + ret |= GST_ELEMENT_REGISTER (appsrc, plugin); + ret |= GST_ELEMENT_REGISTER (appsink, plugin); + + return ret; } GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, diff --git a/gst/app/gstappelements.h b/gst/app/gstappelements.h new file mode 100644 index 0000000000..0328aad716 --- /dev/null +++ b/gst/app/gstappelements.h @@ -0,0 +1,36 @@ +/* GStreamer + * Copyright (C) 2007 David Schleef + * Copyright (C) 2020 Huawei Technologies Co., Ltd. + * @Author: Stéphane Cerveau + * + * 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_APP_ELEMENTS_H__ +#define __GST_APP_ELEMENTS_H__ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include +#include + +GST_ELEMENT_REGISTER_DECLARE (appsrc); +GST_ELEMENT_REGISTER_DECLARE (appsink); + +#endif /* __GST_APP_ELEMENTS_H__ */ diff --git a/gst/app/gstappsink.c b/gst/app/gstappsink.c new file mode 100644 index 0000000000..108a2a814d --- /dev/null +++ b/gst/app/gstappsink.c @@ -0,0 +1,35 @@ +/* GStreamer + * Copyright (C) 2007 David Schleef + * + * 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:element-appsink + * @title: appsink + * + * Appsink is a sink plugin that supports many different methods for making + * the application get a handle on the GStreamer data in a pipeline. Unlike + * most GStreamer elements, Appsink provides external API functions. + * + * For the documentation of the API, please see the + * libgstapp section in + * the GStreamer Plugins Base Libraries documentation. + */ + +#include "gstappelements.h" + +GST_ELEMENT_REGISTER_DEFINE (appsink, "appsink", GST_RANK_NONE, + GST_TYPE_APP_SINK); diff --git a/gst/app/gstappsrc.c b/gst/app/gstappsrc.c new file mode 100644 index 0000000000..c6a81e7f96 --- /dev/null +++ b/gst/app/gstappsrc.c @@ -0,0 +1,35 @@ +/* GStreamer + * Copyright (C) 2007 David Schleef + * + * 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:element-appsrc + * @title: appsrc + * + * The appsrc element can be used by applications to insert data into a + * GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides + * external API functions. + * + * For the documentation of the API, please see the + * libgstapp section in the + * GStreamer Plugins Base Libraries documentation. + */ + + +#include "gstappelements.h" + +GST_ELEMENT_REGISTER_DEFINE (appsrc, "appsrc", GST_RANK_NONE, GST_TYPE_APP_SRC); diff --git a/gst/app/meson.build b/gst/app/meson.build index 79b3142191..8bdf2d8eb5 100644 --- a/gst/app/meson.build +++ b/gst/app/meson.build @@ -1,5 +1,11 @@ -gstapp_plugin = library('gstapp', +app_sources = [ 'gstapp.c', + 'gstappsink.c', + 'gstappsrc.c', +] + +gstapp_plugin = library('gstapp', + app_sources, c_args: gst_plugins_base_args, include_directories: [configinc], dependencies : [gst_base_dep, app_dep, tag_dep],