SOMEWHAT OUTDATED
-----------------


We describe how the plugin system works.

Plugins
-------

plugins are basically shared libraries with a plugin_init
function.

they provide the GStreamer core library with the following
information:

  - element factories
  - type factories
  - metadata factories?

ElementFactory
--------------

element factories provide the core library with elements (duh)

an element factory has the following information:

  - a unique name for the element factory
  - strings describing the element (name, desciption, copyright,...)
  - a description of the media types it accepts (as capabilities) 
  - a description of the media types it outputs (as capabilities)


TypeFactory
-----------

has the following properties:

 - a mime type
 - file extensions that may provide a hint for this type
 - a function to detect this type
 - a string to detect this type (file(1) like)


XML registry
------------

The complete plugin tree will be exported into an XML description so
that the definitions of the factories can be obtained without having
to load and plugin_init the plugins.

Loading of plugins
------------------

at some point, the plugin will need to be read into memory before
any elements it provides can be used. the XML description of the
loaded plugin will need to be updated.

We will have the following methods for (implicitly) loading plugins:

 gst_plugin_load_all()

  remove the complete XML tree and read all the plugins in the
  paths. The plugin_init method will be called and the XML tree
  will be rebuild in memory.

 gst_plugin_load (name)

  The plugin will be located in the tree and if it already loaded, the
  function returns. If it is not loaded, the XML entry is removed and
  the plugin is loaded. The plugin_init is called so that the XML tree
  is reconstructed.

 gst_elementfactory_create (factory, name);

  The plugin providing the element will be located, if the plugin is
  already loaded, an element with the given name is created.
  if the plugin is not loaded, gst_plugin_load is called.
  the loaded factory is located again and the element is created.

 The typefind function is called

  When the plugin description  is read from the XML file, the typefind 
  function is hooked up to a dummy typefind function. The dummy typefind 
  function will locate the plugin it belongs to and call gst_plugin_load.
  after the loading of the plugin, the real typefind function is called.



 

  


