mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 11:41:09 +00:00
insertbin: make it available in the registry
so it could also be used from the gst-parse-launch Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5514>
This commit is contained in:
parent
d2c9200828
commit
709913b1d2
7 changed files with 252 additions and 2 deletions
|
@ -52,7 +52,31 @@ Each operation (addition or removal) can take a callback, this callback
|
||||||
is guaranteed to be called. Unlike GIO, there is no guarantee about where
|
is guaranteed to be called. Unlike GIO, there is no guarantee about where
|
||||||
this callback will be called from, it could be called before the action
|
this callback will be called from, it could be called before the action
|
||||||
returns or it could be called later from another thread. The signature of
|
returns or it could be called later from another thread. The signature of
|
||||||
this callback GstInsertBinCallback().</doc>
|
this callback GstInsertBinCallback().
|
||||||
|
|
||||||
|
Apart from the library API, since 1.24 insertbin can also be found in the
|
||||||
|
registry:
|
||||||
|
|
||||||
|
``` C
|
||||||
|
GstElement *pipeline, *insertbin, *videoflip;
|
||||||
|
|
||||||
|
gst_init (NULL, NULL);
|
||||||
|
pipeline =
|
||||||
|
gst_parse_launch ("videotestsrc ! insertbin name=i ! autovideosink",
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
insertbin = gst_bin_get_by_name (GST_BIN (pipeline), "i");
|
||||||
|
videoflip = gst_element_factory_make ("videoflip", NULL);
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
g_object_set (videoflip, "method", 1, NULL);
|
||||||
|
g_signal_emit_by_name (insertbin, "append", videoflip, NULL, NULL);
|
||||||
|
|
||||||
|
...
|
||||||
|
```</doc>
|
||||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/insertbin/gstinsertbin.h"/>
|
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/insertbin/gstinsertbin.h"/>
|
||||||
<implements name="Gst.ChildProxy"/>
|
<implements name="Gst.ChildProxy"/>
|
||||||
<constructor name="new" c:identifier="gst_insert_bin_new" version="1.2">
|
<constructor name="new" c:identifier="gst_insert_bin_new" version="1.2">
|
||||||
|
|
|
@ -33552,6 +33552,152 @@
|
||||||
"tracers": {},
|
"tracers": {},
|
||||||
"url": "Unknown package origin"
|
"url": "Unknown package origin"
|
||||||
},
|
},
|
||||||
|
"insertbin": {
|
||||||
|
"description": "insertbin",
|
||||||
|
"elements": {
|
||||||
|
"insertbin": {
|
||||||
|
"author": "Olivier Crete <olivier.crete@collabora.com>",
|
||||||
|
"description": "Auto-links filter style elements insertally",
|
||||||
|
"hierarchy": [
|
||||||
|
"GstInsertBin",
|
||||||
|
"GstBin",
|
||||||
|
"GstElement",
|
||||||
|
"GstObject",
|
||||||
|
"GInitiallyUnowned",
|
||||||
|
"GObject"
|
||||||
|
],
|
||||||
|
"interfaces": [
|
||||||
|
"GstChildProxy"
|
||||||
|
],
|
||||||
|
"klass": "Generic/Bin/Filter",
|
||||||
|
"pad-templates": {
|
||||||
|
"sink": {
|
||||||
|
"caps": "ANY",
|
||||||
|
"direction": "sink",
|
||||||
|
"presence": "always"
|
||||||
|
},
|
||||||
|
"src": {
|
||||||
|
"caps": "ANY",
|
||||||
|
"direction": "src",
|
||||||
|
"presence": "always"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rank": "none",
|
||||||
|
"signals": {
|
||||||
|
"append": {
|
||||||
|
"action": true,
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"name": "arg0",
|
||||||
|
"type": "GstElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg1",
|
||||||
|
"type": "gpointer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg2",
|
||||||
|
"type": "gpointer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"return-type": "void",
|
||||||
|
"when": "last"
|
||||||
|
},
|
||||||
|
"insert-after": {
|
||||||
|
"action": true,
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"name": "arg0",
|
||||||
|
"type": "GstElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg1",
|
||||||
|
"type": "GstElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg2",
|
||||||
|
"type": "gpointer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg3",
|
||||||
|
"type": "gpointer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"return-type": "void",
|
||||||
|
"when": "last"
|
||||||
|
},
|
||||||
|
"insert-before": {
|
||||||
|
"action": true,
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"name": "arg0",
|
||||||
|
"type": "GstElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg1",
|
||||||
|
"type": "GstElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg2",
|
||||||
|
"type": "gpointer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg3",
|
||||||
|
"type": "gpointer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"return-type": "void",
|
||||||
|
"when": "last"
|
||||||
|
},
|
||||||
|
"prepend": {
|
||||||
|
"action": true,
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"name": "arg0",
|
||||||
|
"type": "GstElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg1",
|
||||||
|
"type": "gpointer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg2",
|
||||||
|
"type": "gpointer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"return-type": "void",
|
||||||
|
"when": "last"
|
||||||
|
},
|
||||||
|
"remove": {
|
||||||
|
"action": true,
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"name": "arg0",
|
||||||
|
"type": "GstElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg1",
|
||||||
|
"type": "gpointer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arg2",
|
||||||
|
"type": "gpointer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"return-type": "void",
|
||||||
|
"when": "last"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filename": "gstinsertbin",
|
||||||
|
"license": "LGPL",
|
||||||
|
"other-types": {},
|
||||||
|
"package": "GStreamer Bad Plug-ins",
|
||||||
|
"source": "gst-plugins-bad",
|
||||||
|
"tracers": {},
|
||||||
|
"url": "Unknown package origin"
|
||||||
|
},
|
||||||
"inter": {
|
"inter": {
|
||||||
"description": "plugin for inter-pipeline communication",
|
"description": "plugin for inter-pipeline communication",
|
||||||
"elements": {
|
"elements": {
|
||||||
|
|
|
@ -37,6 +37,30 @@
|
||||||
* returns or it could be called later from another thread. The signature of
|
* returns or it could be called later from another thread. The signature of
|
||||||
* this callback GstInsertBinCallback().
|
* this callback GstInsertBinCallback().
|
||||||
*
|
*
|
||||||
|
* Apart from the library API, since 1.24 insertbin can also be found in the
|
||||||
|
* registry:
|
||||||
|
*
|
||||||
|
* ``` C
|
||||||
|
* GstElement *pipeline, *insertbin, *videoflip;
|
||||||
|
*
|
||||||
|
* gst_init (NULL, NULL);
|
||||||
|
* pipeline =
|
||||||
|
* gst_parse_launch ("videotestsrc ! insertbin name=i ! autovideosink",
|
||||||
|
* NULL);
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
* insertbin = gst_bin_get_by_name (GST_BIN (pipeline), "i");
|
||||||
|
* videoflip = gst_element_factory_make ("videoflip", NULL);
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
* g_object_set (videoflip, "method", 1, NULL);
|
||||||
|
* g_signal_emit_by_name (insertbin, "append", videoflip, NULL, NULL);
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
* ```
|
||||||
|
*
|
||||||
* Since: 1.2
|
* Since: 1.2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
13
subprojects/gst-plugins-bad/gst/insertbin/meson.build
Normal file
13
subprojects/gst-plugins-bad/gst/insertbin/meson.build
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
insertbin_sources = [
|
||||||
|
'plugin.c'
|
||||||
|
]
|
||||||
|
|
||||||
|
gstinsertbin = library('gstinsertbin',
|
||||||
|
insertbin_sources,
|
||||||
|
c_args : gst_plugins_bad_args + [ '-DGST_USE_UNSTABLE_API' ],
|
||||||
|
include_directories : [configinc],
|
||||||
|
dependencies : [gst_dep, gstinsertbin_dep],
|
||||||
|
install : true,
|
||||||
|
install_dir : plugins_install_dir,
|
||||||
|
)
|
||||||
|
plugins += [gstinsertbin]
|
42
subprojects/gst-plugins-bad/gst/insertbin/plugin.c
Normal file
42
subprojects/gst-plugins-bad/gst/insertbin/plugin.c
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/* GStreamer
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 Alexander Slobodeniuk <aslobodeniuk@fluendo.com>
|
||||||
|
*
|
||||||
|
* insertbin: a GstBin to insertally link filter-like elements.
|
||||||
|
*
|
||||||
|
* 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 <gst/insertbin/gstinsertbin.h>
|
||||||
|
|
||||||
|
GST_ELEMENT_REGISTER_DECLARE (insertbin);
|
||||||
|
GST_ELEMENT_REGISTER_DEFINE (insertbin, "insertbin", GST_RANK_NONE,
|
||||||
|
GST_TYPE_INSERT_BIN);
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_init (GstPlugin * plugin)
|
||||||
|
{
|
||||||
|
return GST_ELEMENT_REGISTER (insertbin, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
||||||
|
GST_VERSION_MINOR,
|
||||||
|
insertbin,
|
||||||
|
"insertbin",
|
||||||
|
plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
|
|
@ -5,7 +5,7 @@ foreach plugin : ['accurip', 'adpcmdec', 'adpcmenc', 'aiff', 'asfmux',
|
||||||
'debugutils', 'dvbsubenc',
|
'debugutils', 'dvbsubenc',
|
||||||
'dvbsuboverlay', 'dvdspu', 'faceoverlay', 'festival',
|
'dvbsuboverlay', 'dvdspu', 'faceoverlay', 'festival',
|
||||||
'fieldanalysis', 'freeverb', 'frei0r', 'gaudieffects', 'gdp',
|
'fieldanalysis', 'freeverb', 'frei0r', 'gaudieffects', 'gdp',
|
||||||
'geometrictransform', 'id3tag', 'inter', 'interlace',
|
'geometrictransform', 'id3tag', 'insertbin', 'inter', 'interlace',
|
||||||
'ivfparse', 'ivtc', 'jp2kdecimator', 'jpegformat', 'librfb',
|
'ivfparse', 'ivtc', 'jp2kdecimator', 'jpegformat', 'librfb',
|
||||||
'midi', 'mpegdemux', 'mpegpsmux', 'mpegtsdemux', 'mpegtsmux',
|
'midi', 'mpegdemux', 'mpegpsmux', 'mpegtsdemux', 'mpegtsmux',
|
||||||
'mxf', 'netsim', 'onvif', 'pcapparse', 'pnm', 'proxy',
|
'mxf', 'netsim', 'onvif', 'pcapparse', 'pnm', 'proxy',
|
||||||
|
|
|
@ -32,6 +32,7 @@ option('gaudieffects', type : 'feature', value : 'auto')
|
||||||
option('gdp', type : 'feature', value : 'auto')
|
option('gdp', type : 'feature', value : 'auto')
|
||||||
option('geometrictransform', type : 'feature', value : 'auto')
|
option('geometrictransform', type : 'feature', value : 'auto')
|
||||||
option('id3tag', type : 'feature', value : 'auto')
|
option('id3tag', type : 'feature', value : 'auto')
|
||||||
|
option('insertbin', type : 'feature', value : 'auto')
|
||||||
option('inter', type : 'feature', value : 'auto')
|
option('inter', type : 'feature', value : 'auto')
|
||||||
option('interlace', type : 'feature', value : 'auto')
|
option('interlace', type : 'feature', value : 'auto')
|
||||||
option('ivfparse', type : 'feature', value : 'auto')
|
option('ivfparse', type : 'feature', value : 'auto')
|
||||||
|
|
Loading…
Reference in a new issue