<!-- ##### SECTION Title ##### -->
GstElementFactory

<!-- ##### SECTION Short_Description ##### -->
Create GstElements from a factory

<!-- ##### SECTION Long_Description ##### -->
<para>
GstElementFactory is used to create instances of elements. A GstElementfactory
can be added to a #GstPlugin as it is also a #GstPluginFeature.
</para>
<para>
Use gst_element_factory_new() to create a new factory which can be added to a plugin 
with gst_plugin_add_feature().
</para>
<para>
gst_element_factory_add_pad_template() is used to add a padtemplate to the factory.
This function will enable the application to query for elementfactories that handle
a specific media type.
</para>
<para>
Use the gst_element_factory_find() and gst_element_factory_create() functions
to create element instances or use gst_element_factory_make() as a convenient 
shortcut.
</para>
<para>
The following code example shows you how to create a GstFileSrc element.
</para>

<para>
  <programlisting role="C">
  #include &lt;gst/gst.h&gt;

  GstElement *src;
  GstElementFactory *srcfactory;

  gst_init(&amp;argc,&amp;argv);

  srcfactory = gst_element_factory_find("filesrc");
  g_return_if_fail(srcfactory != NULL);

  src = gst_element_factory_create(srcfactory,"src");
  g_return_if_fail(src != NULL);
  ...
  </programlisting>
</para>
<para>
An elementfactory can be assigned a rank with gst_element_factory_set_rank() 
so that the autopluggers can select a plugin more appropriatly
</para>

<!-- ##### SECTION See_Also ##### -->
<para>
#GstElement, #GstPlugin, #GstPluginFeature, #GstPadTemplate.
</para>

<!-- ##### STRUCT GstElementDetails ##### -->
<para>
This struct is used to define public information about the element.  It
describes the element, mostly for the benefit of editors.
</para>

@longname: 
@klass: 
@license: 
@description: 
@version: 
@author: 
@copyright: 

<!-- ##### FUNCTION gst_element_factory_new ##### -->
<para>

</para>

@name: 
@type: 
@details: 
@Returns: 


<!-- ##### FUNCTION gst_element_factory_find ##### -->
<para>

</para>

@name: 
@Returns: 


<!-- ##### FUNCTION gst_element_factory_add_pad_template ##### -->
<para>

</para>

@elementfactory: 
@templ: 


<!-- ##### FUNCTION gst_element_factory_can_src_caps ##### -->
<para>

</para>

@factory: 
@caps: 
@Returns: 


<!-- ##### FUNCTION gst_element_factory_can_sink_caps ##### -->
<para>

</para>

@factory: 
@caps: 
@Returns: 


<!-- ##### FUNCTION gst_element_factory_create ##### -->
<para>

</para>

@factory: 
@name: 
@Returns: 


<!-- ##### FUNCTION gst_element_factory_make ##### -->
<para>

</para>

@factoryname: 
@name: 
@Returns: 


<!-- ##### FUNCTION gst_element_factory_make_or_warn ##### -->
<para>

</para>

@factoryname: 
@name: 
@Returns: 


<!-- ##### FUNCTION gst_element_factory_set_rank ##### -->
<para>

</para>

@factory: 
@rank: 


<!-- ##### MACRO GST_ELEMENT_RANK_MARGINAL ##### -->
<para>
The element is only marginally usefull for autoplugging
</para>



<!-- ##### MACRO GST_ELEMENT_RANK_NONE ##### -->
<para>
The plugin may not be used in autoplugging
</para>



<!-- ##### MACRO GST_ELEMENT_RANK_PRIMARY ##### -->
<para>
The plugin is well suited for autoplugging
</para>



<!-- ##### MACRO GST_ELEMENT_RANK_SECONDARY ##### -->
<para>
The plugin is suited for autoplugging but only as a second
candidate.
</para>



