<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>