2016-06-04 06:55:52 +00:00
|
|
|
---
|
|
|
|
title: Compiling
|
|
|
|
...
|
|
|
|
|
|
|
|
# Compiling
|
|
|
|
|
|
|
|
This section talks about the different things you can do when building
|
|
|
|
and shipping your applications and plugins.
|
|
|
|
|
2016-06-17 22:41:07 +00:00
|
|
|
## Embedding static elements in your application
|
2016-06-04 06:55:52 +00:00
|
|
|
|
2016-11-15 13:14:26 +00:00
|
|
|
The [Plugin Writer's Guide](plugin-development/index.md)
|
2016-06-04 06:55:52 +00:00
|
|
|
describes in great detail how to write elements for the GStreamer
|
|
|
|
framework. In this section, we will solely discuss how to embed such
|
|
|
|
elements statically in your application. This can be useful for
|
|
|
|
application-specific elements that have no use elsewhere in GStreamer.
|
|
|
|
|
2019-08-02 16:17:20 +00:00
|
|
|
Elements do not need to be registered to be used in GStreamer, so one
|
|
|
|
can simply instantiate the elements with `g_object_new ()` and use them
|
|
|
|
in pipelines like any other.
|
|
|
|
|
|
|
|
If the statically linked elements should also be available through a
|
|
|
|
name for functions such as `gst_element_factory_make ()`, these elements
|
|
|
|
can be registered direclty without a plugin. For that you can use
|
|
|
|
`gst_element_register ()` with `NULL` as plugin parameter.
|
|
|
|
|
|
|
|
While these two methods are usually sufficient, it is also possible
|
|
|
|
to register a static plugin.
|
|
|
|
|
|
|
|
### Static plugins
|
|
|
|
|
2016-06-04 06:55:52 +00:00
|
|
|
Dynamically loaded plugins contain a structure that's defined using
|
|
|
|
`GST_PLUGIN_DEFINE ()`. This structure is loaded when the plugin is
|
|
|
|
loaded by the GStreamer core. The structure contains an initialization
|
|
|
|
function (usually called `plugin_init`) that will be called right after
|
|
|
|
that. It's purpose is to register the elements provided by the plugin
|
2019-08-02 16:17:20 +00:00
|
|
|
with the GStreamer framework. To register a static plugin, the only
|
|
|
|
thing you need to do is to replace `GST_PLUGIN_DEFINE ()` with a call
|
|
|
|
to `gst_plugin_register_static ()`. As soon as you call
|
|
|
|
`gst_plugin_register_static ()`, the elements will from then on be
|
|
|
|
available like any other element, without them having to be dynamically
|
|
|
|
loadable libraries. In the example below, you would be able to call
|
|
|
|
`gst_element_factory_make("my-element-name", "some-name")` to create
|
|
|
|
an instance of the element.
|
2016-06-04 06:55:52 +00:00
|
|
|
|
2016-06-06 01:50:32 +00:00
|
|
|
``` c
|
2016-06-04 06:55:52 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Here, you would write the actual plugin code.
|
|
|
|
*/
|
|
|
|
|
|
|
|
[..]
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
register_elements (GstPlugin *plugin)
|
|
|
|
{
|
2020-11-06 09:30:35 +00:00
|
|
|
return GST_ELEMENT_REGISTER (my_element_name, plugin);
|
2016-06-04 06:55:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static
|
|
|
|
my_code_init (void)
|
|
|
|
{
|
|
|
|
...
|
|
|
|
|
|
|
|
gst_plugin_register_static (
|
|
|
|
GST_VERSION_MAJOR,
|
|
|
|
GST_VERSION_MINOR,
|
|
|
|
"my-private-plugins",
|
|
|
|
"Private elements of my application",
|
|
|
|
register_elements,
|
|
|
|
VERSION,
|
|
|
|
"LGPL",
|
|
|
|
"my-application-source",
|
|
|
|
"my-application",
|
|
|
|
"http://www.my-application.net/")
|
|
|
|
|
|
|
|
...
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-11-05 08:18:49 +00:00
|
|
|
```
|