mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 02:00:33 +00:00
d0bcc34dad
Original commit message from CVS: * docs/manual/advanced-autoplugging.xml: * docs/manual/advanced-clocks.xml: * docs/manual/advanced-interfaces.xml: * docs/manual/advanced-metadata.xml: * docs/manual/advanced-position.xml: * docs/manual/advanced-schedulers.xml: * docs/manual/advanced-threads.xml: * docs/manual/appendix-gnome.xml: * docs/manual/appendix-programs.xml: * docs/manual/appendix-quotes.xml: * docs/manual/autoplugging.xml: * docs/manual/basics-bins.xml: * docs/manual/basics-data.xml: * docs/manual/basics-elements.xml: * docs/manual/basics-helloworld.xml: * docs/manual/basics-init.xml: * docs/manual/basics-pads.xml: * docs/manual/basics-plugins.xml: * docs/manual/bins-api.xml: * docs/manual/bins.xml: * docs/manual/buffers-api.xml: * docs/manual/buffers.xml: * docs/manual/clocks.xml: * docs/manual/components.xml: * docs/manual/cothreads.xml: * docs/manual/debugging.xml: * docs/manual/dparams-app.xml: * docs/manual/dynamic.xml: * docs/manual/elements-api.xml: * docs/manual/elements.xml: * docs/manual/factories.xml: * docs/manual/gnome.xml: * docs/manual/goals.xml: * docs/manual/helloworld.xml: * docs/manual/helloworld2.xml: * docs/manual/highlevel-components.xml: * docs/manual/highlevel-xml.xml: * docs/manual/init-api.xml: * docs/manual/intro-basics.xml: * docs/manual/intro-motivation.xml: * docs/manual/intro-preface.xml: * docs/manual/intro.xml: * docs/manual/links-api.xml: * docs/manual/links.xml: * docs/manual/manual.xml: * docs/manual/motivation.xml: * docs/manual/pads-api.xml: * docs/manual/pads.xml: * docs/manual/plugins-api.xml: * docs/manual/plugins.xml: * docs/manual/programs.xml: * docs/manual/queues.xml: * docs/manual/quotes.xml: * docs/manual/schedulers.xml: * docs/manual/states-api.xml: * docs/manual/states.xml: * docs/manual/threads.xml: * docs/manual/typedetection.xml: * docs/manual/win32.xml: * docs/manual/xml.xml: Try 2. This time, include a short preface as a "general introduction", also add code blocks around all code samples so they get compiled. We still need a way to tell readers the filename of the code sample. In some cases, don't show all code in the documentation, but do include it in the generated code. This allows for focussing on specific bits in the docs, while still having a full test application available. * examples/manual/Makefile.am: Fix up examples for new ADM. Add several of the new examples that were either added or were missing from the build system. * examples/manual/extract.pl: Allow nameless blocks.
84 lines
2.3 KiB
XML
84 lines
2.3 KiB
XML
<chapter id="chapter-plugins">
|
|
<title>Plugins</title>
|
|
<!-- FIXME: introduce type definitions before this chapter -->
|
|
<para>
|
|
A plugin is a shared library that contains at least one of the following
|
|
items:
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
one or more element factories
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
one or more type definitions
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
one or more auto-pluggers
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
exported symbols for use in other plugins
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>
|
|
All plugins should implement one function, <function>plugin_init</function>,
|
|
that creates all the element factories and registers all the type
|
|
definitions contained in the plugin.
|
|
Without this function, a plugin cannot be registered.
|
|
</para>
|
|
<para>
|
|
The plugins are maintained in the plugin system. Optionally, the
|
|
type definitions and the element factories can be saved into an XML
|
|
representation so that the plugin system does not have to load all
|
|
available plugins in order to know their definition.
|
|
</para>
|
|
|
|
<para>
|
|
The basic plugin structure has the following fields:
|
|
</para>
|
|
<programlisting>
|
|
typedef struct _GstPlugin GstPlugin;
|
|
|
|
struct _GstPlugin {
|
|
gchar *name; /* name of the plugin */
|
|
gchar *longname; /* long name of plugin */
|
|
gchar *filename; /* filename it came from */
|
|
|
|
GList *types; /* list of types provided */
|
|
gint numtypes;
|
|
GList *elements; /* list of elements provided */
|
|
gint numelements;
|
|
GList *autopluggers; /* list of autopluggers provided */
|
|
gint numautopluggers;
|
|
|
|
gboolean loaded; /* if the plugin is in memory */
|
|
};
|
|
</programlisting>
|
|
|
|
<para>
|
|
You can query a <classname>GList</classname> of available plugins with the
|
|
function <function>gst_plugin_get_list</function> as this example shows:
|
|
</para>
|
|
<programlisting>
|
|
GList *plugins;
|
|
|
|
plugins = gst_plugin_get_list ();
|
|
|
|
while (plugins) {
|
|
GstPlugin *plugin = (GstPlugin *)plugins->data;
|
|
|
|
g_print ("plugin: %s\n", gst_plugin_get_name (plugin));
|
|
|
|
plugins = g_list_next (plugins);
|
|
}
|
|
</programlisting>
|
|
</chapter>
|