| <chapter id="chapter-compiling"> |
| <title>Compiling</title> |
| <para> |
| This section talks about the different things you can do when building |
| and shipping your applications and plugins. |
| </para> |
| |
| <sect1 id="section-compiling-embedding"> |
| <title>Embedding static elements in your application</title> |
| <para> |
| The <ulink type="http" |
| url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html">Plugin |
| Writer's Guide</ulink> 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;. |
| </para> |
| <para> |
| Dynamically loaded plugins contain a structure that's defined using |
| <function>GST_PLUGIN_DEFINE ()</function>. This structure is loaded |
| when the plugin is loaded by the &GStreamer; core. The structure |
| contains an initialization function (usually called |
| <function>plugin_init</function>) that will be called right after that. |
| It's purpose is to register the elements provided by the plugin with |
| the &GStreamer; framework. |
| If you want to embed elements directly in |
| your application, the only thing you need to do is to replace |
| <function>GST_PLUGIN_DEFINE ()</function> with a call to |
| <function>gst_plugin_register_static ()</function>. As soon as you |
| call <function>gst_plugin_register_static ()</function>, 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 <function>gst_element_factory_make |
| ("my-element-name", "some-name")</function> to create an instance of the |
| element. |
| </para> |
| |
| <programlisting> |
| <![CDATA[ |
| /* |
| * Here, you would write the actual plugin code. |
| */ |
| |
| [..] |
| |
| static gboolean |
| register_elements (GstPlugin *plugin) |
| { |
| return gst_element_register (plugin, "my-element-name", |
| GST_RANK_NONE, MY_PLUGIN_TYPE); |
| } |
| |
| 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/") |
| |
| ... |
| } |
| ]]> |
| </programlisting> |
| </sect1> |
| </chapter> |