gi-gst-1.0.26: GStreamer bindings
CopyrightWill Thompson and Iñaki García Etxebarria
LicenseLGPL-2.1
MaintainerIñaki García Etxebarria
Safe HaskellSafe-Inferred
LanguageHaskell2010

GI.Gst.Objects.Registry

Description

One registry holds the metadata of a set of plugins.

<emphasis role="bold">Design:</emphasis>

The Registry object is a list of plugins and some functions for dealing with them. Each Plugin is matched 1-1 with a file on disk, and may or may not be loaded at a given time.

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: $XDG_DATA_HOME/gstreamer-$GST_API_VERSION/plugins/ and $prefix/libs/gstreamer-$GST_API_VERSION/. $XDG_DATA_HOME defaults to $HOME/.local/share.

The registry cache file is loaded from $XDG_CACHE_HOME/gstreamer-$GST_API_VERSION/registry-$ARCH.bin (where $XDG_CACHE_HOME defaults to $HOME/.cache) 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 "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 PluginFlagsCached bit. These plugins are removed at the end of initialization.

Synopsis

Exported types

newtype Registry Source #

Memory-managed wrapper type.

Constructors

Registry (ManagedPtr Registry) 

Instances

Instances details
Eq Registry Source # 
Instance details

Defined in GI.Gst.Objects.Registry

GObject Registry Source # 
Instance details

Defined in GI.Gst.Objects.Registry

ManagedPtrNewtype Registry Source # 
Instance details

Defined in GI.Gst.Objects.Registry

Methods

toManagedPtr :: Registry -> ManagedPtr Registry

TypedObject Registry Source # 
Instance details

Defined in GI.Gst.Objects.Registry

Methods

glibType :: IO GType

HasParentTypes Registry Source # 
Instance details

Defined in GI.Gst.Objects.Registry

IsGValue (Maybe Registry) Source #

Convert Registry to and from GValue. See toGValue and fromGValue.

Instance details

Defined in GI.Gst.Objects.Registry

Methods

gvalueGType_ :: IO GType

gvalueSet_ :: Ptr GValue -> Maybe Registry -> IO ()

gvalueGet_ :: Ptr GValue -> IO (Maybe Registry)

type ParentTypes Registry Source # 
Instance details

Defined in GI.Gst.Objects.Registry

type ParentTypes Registry = '[Object, Object]

class (GObject o, IsDescendantOf Registry o) => IsRegistry o Source #

Type class for types which can be safely cast to Registry, for instance with toRegistry.

Instances

Instances details
(GObject o, IsDescendantOf Registry o) => IsRegistry o Source # 
Instance details

Defined in GI.Gst.Objects.Registry

toRegistry :: (MonadIO m, IsRegistry o) => o -> m Registry Source #

Cast to Registry, for types for which this is known to be safe. For general casts, use castTo.

Methods

addFeature

registryAddFeature Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a, IsPluginFeature b) 
=> a

registry: the registry to add the plugin to

-> b

feature: the feature to add

-> m Bool

Returns: True on success.

MT safe.

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

feature's reference count will be incremented, and any floating reference will be removed (see gst_object_ref_sink())

addPlugin

registryAddPlugin Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a, IsPlugin b) 
=> a

registry: the registry to add the plugin to

-> b

plugin: the plugin to add

-> m Bool

Returns: True on success.

MT safe.

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

plugin's reference count will be incremented, and any floating reference will be removed (see gst_object_ref_sink())

checkFeatureVersion

registryCheckFeatureVersion Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: a Registry

-> Text

featureName: the name of the feature (e.g. "oggdemux")

-> Word32

minMajor: the minimum major version number

-> Word32

minMinor: the minimum minor version number

-> Word32

minMicro: the minimum micro version number

-> m Bool

Returns: True if the feature could be found and the version is the same as the required version or newer, and False otherwise.

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

featureFilter

registryFeatureFilter Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: registry to query

-> PluginFeatureFilter

filter: the filter to use

-> Bool

first: only return first match

-> m [PluginFeature]

Returns: a List of PluginFeature. Use pluginFeatureListFree after usage.

MT safe.

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).

findFeature

registryFindFeature Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: the registry to search

-> Text

name: the pluginfeature name to find

-> GType

type: the pluginfeature type to find

-> m (Maybe PluginFeature)

Returns: the pluginfeature with the given name and type or Nothing if the plugin was not found. objectUnref after usage.

MT safe.

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

findPlugin

registryFindPlugin Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: the registry to search

-> Text

name: the plugin name to find

-> m (Maybe Plugin)

Returns: the plugin with the given name or Nothing if the plugin was not found. objectUnref after usage.

MT safe.

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

forkIsEnabled

registryForkIsEnabled Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> m Bool

Returns: True if GStreamer will use the child helper process when rebuilding the registry.

By default GStreamer will perform scanning and rebuilding of the registry file using a helper child process.

Applications might want to disable this behaviour with the registryForkSetEnabled function, in which case new plugins are scanned (and loaded) into the application process.

forkSetEnabled

registryForkSetEnabled Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> Bool

enabled: whether rebuilding the registry can use a temporary child helper process.

-> m () 

Applications might want to disable/enable spawning of a child helper process when rebuilding the registry. See registryForkIsEnabled for more information.

get

registryGet Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> m Registry

Returns: the Registry.

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

getFeatureList

registryGetFeatureList Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: a Registry

-> GType

type: a GType.

-> m [PluginFeature]

Returns: a List of PluginFeature of type. Use pluginFeatureListFree after use

MT safe.

Retrieves a List of PluginFeature of type.

getFeatureListByPlugin

registryGetFeatureListByPlugin Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: a Registry.

-> Text

name: a plugin name.

-> m [PluginFeature]

Returns: a List of PluginFeature. Use pluginFeatureListFree after usage.

Retrieves a List of features of the plugin with name name.

getFeatureListCookie

registryGetFeatureListCookie Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: the registry

-> m Word32

Returns: the feature list cookie.

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

getPluginList

registryGetPluginList Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: the registry to search

-> m [Plugin]

Returns: a List of Plugin. Use pluginListFree after usage.

MT safe.

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

lookup

registryLookup Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: the registry to look up in

-> Text

filename: the name of the file to look up

-> m (Maybe Plugin)

Returns: the Plugin if found, or Nothing if not. objectUnref after usage.

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

lookupFeature

registryLookupFeature Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: a Registry

-> Text

name: a PluginFeature name

-> m (Maybe PluginFeature)

Returns: a PluginFeature with its refcount incremented, use objectUnref after usage.

MT safe.

Find a PluginFeature with name in registry.

pluginFilter

registryPluginFilter Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: registry to query

-> PluginFilter

filter: the filter to use

-> Bool

first: only return first match

-> m [Plugin]

Returns: a List of Plugin. Use pluginListFree after usage.

MT safe.

Runs a filter against all plugins in the registry and returns a List 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 pluginListFree after use, which will unref again.

removeFeature

registryRemoveFeature Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a, IsPluginFeature b) 
=> a

registry: the registry to remove the feature from

-> b

feature: the feature to remove

-> m () 

Remove the feature from the registry.

MT safe.

removePlugin

registryRemovePlugin Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a, IsPlugin b) 
=> a

registry: the registry to remove the plugin from

-> b

plugin: the plugin to remove

-> m () 

Remove the plugin from the registry.

MT safe.

scanPath

registryScanPath Source #

Arguments

:: (HasCallStack, MonadIO m, IsRegistry a) 
=> a

registry: the registry to add found plugins to

-> [Char]

path: the path to scan

-> m Bool

Returns: True if registry changed

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

Signals

featureAdded

type RegistryFeatureAddedCallback Source #

Arguments

 = PluginFeature

feature: the feature that has been added

-> IO () 

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

afterRegistryFeatureAdded :: (IsRegistry a, MonadIO m) => a -> ((?self :: a) => RegistryFeatureAddedCallback) -> m SignalHandlerId Source #

Connect a signal handler for the featureAdded signal, to be run after the default handler. When overloading is enabled, this is equivalent to

after registry #featureAdded callback

By default the object invoking the signal is not passed to the callback. If you need to access it, you can use the implit ?self parameter. Note that this requires activating the ImplicitParams GHC extension.

onRegistryFeatureAdded :: (IsRegistry a, MonadIO m) => a -> ((?self :: a) => RegistryFeatureAddedCallback) -> m SignalHandlerId Source #

Connect a signal handler for the featureAdded signal, to be run before the default handler. When overloading is enabled, this is equivalent to

on registry #featureAdded callback

pluginAdded

type RegistryPluginAddedCallback Source #

Arguments

 = Plugin

plugin: the plugin that has been added

-> IO () 

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

afterRegistryPluginAdded :: (IsRegistry a, MonadIO m) => a -> ((?self :: a) => RegistryPluginAddedCallback) -> m SignalHandlerId Source #

Connect a signal handler for the pluginAdded signal, to be run after the default handler. When overloading is enabled, this is equivalent to

after registry #pluginAdded callback

By default the object invoking the signal is not passed to the callback. If you need to access it, you can use the implit ?self parameter. Note that this requires activating the ImplicitParams GHC extension.

onRegistryPluginAdded :: (IsRegistry a, MonadIO m) => a -> ((?self :: a) => RegistryPluginAddedCallback) -> m SignalHandlerId Source #

Connect a signal handler for the pluginAdded signal, to be run before the default handler. When overloading is enabled, this is equivalent to

on registry #pluginAdded callback