## GstRegistry

GstRegistry — Abstract base class for management of GstPlugin objects

## Synopsis

    #include <gst/gst.h>

    struct              GstRegistry;
    GstRegistry *       gst_registry_get_default            (void);
    GList *             gst_registry_get_feature_list       (GstRegistry *registry,
                                                             GType type);
    guint32             gst_registry_get_feature_list_cookie
                                                            (GstRegistry *registry);
    GList *             gst_registry_get_feature_list_by_plugin
                                                            (GstRegistry *registry,
                                                             const gchar *name);
    GList *             gst_registry_get_path_list          (GstRegistry *registry);
    GList *             gst_registry_get_plugin_list        (GstRegistry *registry);
    gboolean            gst_registry_add_plugin             (GstRegistry *registry,
                                                             GstPlugin *plugin);
    void                gst_registry_remove_plugin          (GstRegistry *registry,
                                                             GstPlugin *plugin);
    GList *             gst_registry_plugin_filter          (GstRegistry *registry,
                                                             GstPluginFilter filter,
                                                             gboolean first,
                                                             gpointer user_data);
    GList *             gst_registry_feature_filter         (GstRegistry *registry,
                                                             GstPluginFeatureFilter filter,
                                                             gboolean first,
                                                             gpointer user_data);
    GstPlugin *         gst_registry_find_plugin            (GstRegistry *registry,
                                                             const gchar *name);
    GstPluginFeature *  gst_registry_find_feature           (GstRegistry *registry,
                                                             const gchar *name,
                                                             GType type);
    GstPluginFeature *  gst_registry_lookup_feature         (GstRegistry *registry,
                                                             const char *name);
    void                gst_registry_add_path               (GstRegistry *registry,
                                                             const gchar *path);
    gboolean            gst_registry_scan_path              (GstRegistry *registry,
                                                             const gchar *path);
    GstPlugin *         gst_registry_lookup                 (GstRegistry *registry,
                                                             const char *filename);
    void                gst_registry_remove_feature         (GstRegistry *registry,
                                                             GstPluginFeature *feature);
    gboolean            gst_registry_add_feature            (GstRegistry *registry,
                                                             GstPluginFeature *feature);

    gboolean            gst_default_registry_check_feature_version
                                                            (const gchar *feature_name,
                                                             guint min_major,
                                                             guint min_minor,
                                                             guint min_micro);
    #define             gst_default_registry_get_path_list
    #define             gst_default_registry_add_plugin     (plugin)
    #define             gst_default_registry_add_path       (path)
    #define             gst_default_registry_find_plugin    (name)
    #define             gst_default_registry_find_feature   (name,
                                                             type)
    #define             gst_default_registry_get_plugin_list
    #define             gst_default_registry_get_feature_list_cookie
    #define             gst_default_registry_feature_filter (filter,
                                                             first,
                                                             user_data)

## Object Hierarchy

      GObject
       +----GstObject
             +----GstRegistry

## Signals

      "feature-added"                                  : Run Last
      "plugin-added"                                   : Run Last

## Description

One registry holds the metadata of a set of plugins.

Design:

The GstRegistry object is a list of plugins and some functions for dealing with them. Each GstPlugin is matched 1-1 with a file on disk, and may or may not be loaded at a given time. There may be multiple GstRegistry objects, but the "default registry" is the only object that has any meaning to the core.

The registry file is actually a cache of plugin information. This is unlike versions prior to 0.10, where the registry file was the primary source of plugin information, and was created by the gst-register command.

The primary source, at all times, of plugin information is each plugin file itself. Thus, if an application wants information about a particular plugin, or wants to search for a feature that satisfies given criteria, the primary means of doing so is to load every plugin and look at the resulting information that is gathered in the default registry. Clearly, this is a time consuming process, so we cache information in the registry file. The format and location of the cache file is internal to gstreamer.

On startup, plugins are searched for in the plugin search path. The following locations are checked in this order:

- location from --gst-plugin-path commandline option.

- the GST_PLUGIN_PATH environment variable.

- the GST_PLUGIN_SYSTEM_PATH environment variable.

- default locations (if GST_PLUGIN_SYSTEM_PATH is not set). Those default locations are: `~/.gstreamer-$GST_MAJORMINOR/plugins/` and `$prefix/libs/gstreamer-$GST_MAJORMINOR/`.

The registry cache file is loaded from `~/.gstreamer-$GST_MAJORMINOR/registry-$ARCH.bin` or the file listed in the GST_REGISTRY env var. One reason to change the registry location is for testing.

For each plugin that is found in the plugin search path, there could be 3 possibilities for cached information:

- the cache may not contain information about a given file.

- the cache may have stale information.

- the cache may have current information.

In the first two cases, the plugin is loaded and the cache updated. In addition to these cases, the cache may have entries for plugins that are not relevant to the current process. These are marked as not available to the current process. If the cache is updated for whatever reason, it is marked dirty.

A dirty cache is written out at the end of initialization. Each entry is checked to make sure the information is minimally valid. If not, the entry is simply dropped.

Implementation notes:

The "cache" and "default registry" are different concepts and can represent different sets of plugins. For various reasons, at init time, the cache is stored in the default registry, and plugins not relevant to the current process are marked with the `GST_PLUGIN_FLAG_CACHED` bit. These plugins are removed at the end of initialization.

## Details

### struct GstRegistry

    struct GstRegistry;

Opaque GstRegistry structure.

### gst_registry_get_default ()

    GstRegistry *       gst_registry_get_default            (void);

Retrieves the default registry. The caller does not own a reference on the registry, as it is alive as long as GStreamer is initialized.

Returns : | The default GstRegistry. [transfer none]

### gst_registry_get_feature_list ()

    GList *             gst_registry_get_feature_list       (GstRegistry *registry,
                                                             GType type);

Retrieves a GList of GstPluginFeature of `type`.

`registry` : | a GstRegistry
`type` : | a GType.
Returns : | a GList of GstPluginFeature of `type`. Use `gst_plugin_feature_list_free()` after use MT safe. [transfer full][element-type Gst.PluginFeature]

### gst_registry_get_feature_list_cookie ()

    guint32             gst_registry_get_feature_list_cookie
                                                            (GstRegistry *registry);

Returns the registrys feature list cookie. This changes every time a feature is added or removed from the registry.

`registry` : | the registry
Returns : | the feature list cookie.

Since 0.10.26

### gst_registry_get_feature_list_by_plugin ()

    GList *             gst_registry_get_feature_list_by_plugin
                                                            (GstRegistry *registry,
                                                             const gchar *name);

Retrieves a GList of features of the plugin with name `name`.

`registry` : | a GstRegistry.
`name` : | a plugin name.
Returns : | a GList of GstPluginFeature. Use `gst_plugin_feature_list_free()` after usage. [transfer full][element-type Gst.PluginFeature]

### gst_registry_get_path_list ()

    GList *             gst_registry_get_path_list          (GstRegistry *registry);

Get the list of paths for the given registry.

`registry` : | the registry to get the pathlist of
Returns : | A GList of paths as strings. g_list_free after use. MT safe. [transfer container][element-type char*]

### gst_registry_get_plugin_list ()

    GList *             gst_registry_get_plugin_list        (GstRegistry *registry);

Get a copy of all plugins registered in the given registry. The refcount of each element in the list in incremented.

`registry` : | the registry to search
Returns : | a GList of GstPlugin. Use `gst_plugin_list_free()` after usage. MT safe. [transfer full][element-type Gst.Plugin]

### gst_registry_add_plugin ()

    gboolean            gst_registry_add_plugin             (GstRegistry *registry,
                                                             GstPlugin *plugin);

Add the plugin to the registry. The plugin-added signal will be emitted. This function will sink `plugin`.

`registry` : | the registry to add the plugin to
`plugin` : | the plugin to add. [transfer full]
Returns : | TRUE on success. MT safe.

### gst_registry_remove_plugin ()

    void                gst_registry_remove_plugin          (GstRegistry *registry,
                                                             GstPlugin *plugin);

Remove the plugin from the registry.

MT safe.

`registry` : | the registry to remove the plugin from
`plugin` : | the plugin to remove. [transfer none]

### gst_registry_plugin_filter ()

    GList *             gst_registry_plugin_filter          (GstRegistry *registry,
                                                             GstPluginFilter filter,
                                                             gboolean first,
                                                             gpointer user_data);

Runs a filter against all plugins in the registry and returns a GList with the results. If the first flag is set, only the first match is returned (as a list with a single object). Every plugin is reffed; use `gst_plugin_list_free()` after use, which will unref again.

`registry` : | registry to query
`filter` : | the filter to use. [scope call]
`first` : | only return first match
`user_data` : | user data passed to the filter function. [closure]
Returns : | a GList of GstPlugin. Use `gst_plugin_list_free()` after usage. MT safe. [transfer full][element-type Gst.Plugin]

### gst_registry_feature_filter ()

    GList *             gst_registry_feature_filter         (GstRegistry *registry,
                                                             GstPluginFeatureFilter filter,
                                                             gboolean first,
                                                             gpointer user_data);

Runs a filter against all features of the plugins in the registry and returns a GList with the results. If the first flag is set, only the first match is returned (as a list with a single object).

`registry` : | registry to query
`filter` : | the filter to use. [scope call]
`first` : | only return first match
`user_data` : | user data passed to the filter function. [closure]
Returns : | a GList of GstPluginFeature. Use `gst_plugin_feature_list_free()` after usage. MT safe. [transfer full][element-type Gst.PluginFeature]

### gst_registry_find_plugin ()

    GstPlugin *         gst_registry_find_plugin            (GstRegistry *registry,
                                                             const gchar *name);

Find the plugin with the given name in the registry. The plugin will be reffed; caller is responsible for unreffing.

`registry` : | the registry to search
`name` : | the plugin name to find
Returns : | the plugin with the given name or NULL if the plugin was not found. `gst_object_unref()` after usage. MT safe. [transfer full]

### gst_registry_find_feature ()

    GstPluginFeature *  gst_registry_find_feature           (GstRegistry *registry,
                                                             const gchar *name,
                                                             GType type);

Find the pluginfeature with the given name and type in the registry.

`registry` : | the registry to search
`name` : | the pluginfeature name to find
`type` : | the pluginfeature type to find
Returns : | the pluginfeature with the given name and type or NULL if the plugin was not found. `gst_object_unref()` after usage. MT safe. [transfer full]

### gst_registry_lookup_feature ()

    GstPluginFeature *  gst_registry_lookup_feature         (GstRegistry *registry,
                                                             const char *name);

Find a GstPluginFeature with `name` in `registry`.

`registry` : | a GstRegistry
`name` : | a GstPluginFeature name
Returns : | a GstPluginFeature with its refcount incremented, use `gst_object_unref()` after usage. MT safe. [transfer full]

### gst_registry_add_path ()

    void                gst_registry_add_path               (GstRegistry *registry,
                                                             const gchar *path);

Add the given path to the registry. The syntax of the path is specific to the registry. If the path has already been added, do nothing.

`registry` : | the registry to add the path to
`path` : | the path to add to the registry

### gst_registry_scan_path ()

    gboolean            gst_registry_scan_path              (GstRegistry *registry,
                                                             const gchar *path);

Scan the given path for plugins to add to the registry. The syntax of the path is specific to the registry.

`registry` : | the registry to add found plugins to
`path` : | the path to scan
Returns : | `TRUE` if registry changed

### gst_registry_lookup ()

    GstPlugin *         gst_registry_lookup                 (GstRegistry *registry,
                                                             const char *filename);

Look up a plugin in the given registry with the given filename. If found, plugin is reffed.

`registry` : | the registry to look up in
`filename` : | the name of the file to look up
Returns : | the GstPlugin if found, or NULL if not. `gst_object_unref()` after usage. [transfer full]

### gst_registry_remove_feature ()

    void                gst_registry_remove_feature         (GstRegistry *registry,
                                                             GstPluginFeature *feature);

Remove the feature from the registry.

MT safe.

`registry` : | the registry to remove the feature from
`feature` : | the feature to remove. [transfer none]

### gst_registry_add_feature ()

    gboolean            gst_registry_add_feature            (GstRegistry *registry,
                                                             GstPluginFeature *feature);

Add the feature to the registry. The feature-added signal will be emitted. This function sinks `feature`.

`registry` : | the registry to add the plugin to
`feature` : | the feature to add. [transfer full]
Returns : | TRUE on success. MT safe.

### gst_default_registry_check_feature_version ()

    gboolean            gst_default_registry_check_feature_version
                                                            (const gchar *feature_name,
                                                             guint min_major,
                                                             guint min_minor,
                                                             guint min_micro);

Checks whether a plugin feature by the given name exists in the default registry and whether its version is at least the version required.

`feature_name` : | the name of the feature (e.g. "oggdemux")
`min_major` : | the minimum major version number
`min_minor` : | the minimum minor version number
`min_micro` : | the minimum micro version number
Returns : | TRUE if the feature could be found and the version is the same as the required version or newer, and FALSE otherwise.

### gst_default_registry_get_path_list

    #define             gst_default_registry_get_path_list()

Get the list of paths for the default registry.

Returns : | a GList of paths as strings. `g_list_free()` after use. [transfer container][element-type char*]

### gst_default_registry_add_plugin()

    #define             gst_default_registry_add_plugin(plugin)

Add the plugin to the default registry. The plugin-added signal will be emitted.

`plugin` : | the plugin to add. [transfer full]
Returns : | TRUE on success.

### gst_default_registry_add_path()

    #define             gst_default_registry_add_path(path)

Add the given path to the default registry. The syntax of the path is specific to the registry. If the path has already been added, do nothing.

`path` : | the path to add to the registry

### gst_default_registry_find_plugin()

    #define             gst_default_registry_find_plugin(name)

Find the plugin with the given name in the default registry. The plugin will be reffed; caller is responsible for unreffing.

`name` : | the plugin name to find
Returns : | The plugin with the given name or NULL if the plugin was not found. [transfer full]

### gst_default_registry_find_feature()

    #define             gst_default_registry_find_feature(name,type)

Find the pluginfeature with the given name and type in the default registry.

`name` : | the pluginfeature name to find
`type` : | the pluginfeature type to find
Returns : | the pluginfeature with the given name and type or NULL if the plugin was not found. [transfer full]

### gst_default_registry_get_plugin_list

    #define             gst_default_registry_get_plugin_list()

Get a copy of all plugins registered in the default registry.

Returns : | a copy of the list. Free after use. [transfer full][element-type Gst.Plugin]

### gst_default_registry_get_feature_list_cookie

    #define             gst_default_registry_get_feature_list_cookie()

Returns the default registrys feature list cookie. This changes every time a feature is added or removed from the registry.

Returns : | the feature list cookie.

Since 0.10.26

### gst_default_registry_feature_filter()

    #define             gst_default_registry_feature_filter(filter,first,user_data)

Runs a filter against all features of the plugins in the default registry and returns a GList with the results. If the first flag is set, only the first match is returned (as a list with a single object).

`filter` : | the filter to use
`first` : | only return first match
`user_data` : | user data passed to the filter function
Returns : | a GList of plugin features, gst_plugin_feature_list_free after use. [transfer full][element-type Gst.PluginFeature]

## Signal Details

### The `"feature-added"` signal

    void                user_function                      (GstRegistry *registry,
                                                            gpointer     feature,
                                                            gpointer     user_data)      : Run Last

Signals that a feature has been added to the registry (possibly replacing a previously-added one by the same name)

`registry` : | the registry that emitted the signal
`feature` : | the feature that has been added
`user_data` : | user data set when the signal handler was connected.

### The `"plugin-added"` signal

    void                user_function                      (GstRegistry *registry,
                                                            gpointer     plugin,
                                                            gpointer     user_data)      : Run Last

Signals that a plugin has been added to the registry (possibly replacing a previously-added one by the same name)

`registry` : | the registry that emitted the signal
`plugin` : | the plugin that has been added
`user_data` : | user data set when the signal handler was connected.

## See Also

GstPlugin, GstPluginFeature