## GstTypeFactory

GstTypeFactory — Add types to plugins.

## Synopsis

    #include <gst/gst.h>

    struct      GstTypeFactory;
    struct      GstTypeDefinition;
    GstCaps*    (*GstTypeFindFunc)              (GstBuffer *buf,
                                                 gpointer priv);
    GstTypeFactory* gst_type_factory_new        (GstTypeDefinition *definition);
    GstTypeFactory* gst_type_factory_find       (const gchar *name);

## Object Hierarchy

      GObject
       +----GstPluginFeature
             +----GstTypeFactory

## Description

A GstTypeFactory is used to add a new type and a typedetection function to a plugin. Typefactories are named so they can be found with gst_type_factory_find().

gst_type_factory_new() is used to create a new typefactory from the given GstTypeDefinition. A typefactory is added to a GstPlugin with gst_plugin_add_feature() as shown in the example:

      static GstCaps*
      avi_type_find (GstBuffer *buf, gpointer private)
      {
        gchar *data = GST_BUFFER_DATA (buf);

        if (strncmp (&data[0], "RIFF", 4)) return NULL;
        if (strncmp (&data[8], "AVI ", 4)) return NULL;

        return gst_caps_new ("avi_type_find","video/avi", NULL);
      }

      /* typedefinition for 'avi' */
      static GstTypeDefinition avidefinition = {
        "avidecoder_video/avi",   /* the name of this definition */
        "video/avi",              /* the mime type */
        ".avi",                   /* the file extensions */
        avi_type_find,             /* a pointer to a GstTypeFindFunc function */
      };

      static gboolean
      plugin_init (GModule *module, GstPlugin *plugin)
      {
        GstTypeFactory *type;
        ...
        type = gst_type_factory_new (&avidefinition);
        gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (type));
        ...
      }

## Details

### struct GstTypeFactory

    struct GstTypeFactory;

The struct with the typefactory information.

### struct GstTypeDefinition

    struct GstTypeDefinition {

      gchar *name;
      gchar *mime;
      gchar *exts;
      GstTypeFindFunc typefindfunc;
    };

The typedefinition structure.

gchar *`name` | The name of this factory
gchar *`mime` | The mime type of the new type.
gchar *`exts` | The extensions of this type.
GstTypeFindFunc `typefindfunc` | An optional typefind function.

### GstTypeFindFunc ()

    GstCaps*    (*GstTypeFindFunc)              (GstBuffer *buf,
                                                 gpointer priv);

This is the function that will be called when a typefind has to be performed by a plugin.

`buf` : | the buffer with media on which to perform the typefind
`priv` : | private; don't touch
Returns : | A GstCaps structure describing the type or NULL if the type was not recognized by this function;

### gst_type_factory_new ()

    GstTypeFactory* gst_type_factory_new        (GstTypeDefinition *definition);

Creata a new typefactory from the given definition.

`definition` : | the definition to use
Returns : | the new typefactory

### gst_type_factory_find ()

    GstTypeFactory* gst_type_factory_find       (const gchar *name);

Return the TypeFactory with the given name.

`name` : | the name of the typefactory to find
Returns : | a GstTypeFactory with the given name;

## See Also

GstPluginFeature, GstPlugin