## GstPreset GstPreset — helper interface for element presets |

## Functions

gchar ** | gst_preset_get_preset_names ()
gchar ** | gst_preset_get_property_names ()
gboolean | gst_preset_load_preset ()
gboolean | gst_preset_save_preset ()
gboolean | gst_preset_rename_preset ()
gboolean | gst_preset_delete_preset ()
gboolean | gst_preset_set_meta ()
gboolean | gst_preset_get_meta ()
gboolean | gst_preset_set_app_dir ()
const gchar * | gst_preset_get_app_dir ()
gboolean | gst_preset_is_editable ()

## Types and Values

| GstPreset
struct | GstPresetInterface

## Object Hierarchy

        GInterface
        ╰── GstPreset

## Includes

    #include <gst/gst.h>

## Description

This interface offers methods to query and manipulate parameter preset sets. A preset is a bunch of property settings, together with meta data and a name. The name of a preset serves as key for subsequent method calls to manipulate single presets. All instances of one type will share the list of presets. The list is created on demand, if presets are not used, the list is not created.

The interface comes with a default implementation that serves most plugins. Wrapper plugins will override most methods to implement support for the native preset format of those wrapped plugins. One method that is useful to be overridden is `gst_preset_get_property_names()`. With that one can control which properties are saved and in which order. When implementing support for read-only presets, one should set the vmethods for `gst_preset_save_preset()` and `gst_preset_delete_preset()` to `NULL`. Applications can use `gst_preset_is_editable()` to check for that.

The default implementation supports presets located in a system directory, application specific directory and in the users home directory. When getting a list of presets individual presets are read and overlaid in 1) system, 2) application and 3) user order. Whenever an earlier entry is newer, the later entries will be updated. Since 1.8 you can also provide extra paths where to find presets through the GST_PRESET_PATH environment variable. Presets found in those paths will be considered as "app presets".

## Functions

### gst_preset_get_preset_names ()

    gchar **
    gst_preset_get_preset_names (GstPreset *preset);

Get a copy of preset names as a `NULL` terminated string array.

#### Parameters

preset | a GObject that implements GstPreset |

#### Returns

list with names, use `g_strfreev()` after usage.

[transfer full][array zero-terminated=1][element-type gchar*]

### gst_preset_get_property_names ()

    gchar **
    gst_preset_get_property_names (GstPreset *preset);

Get a the names of the GObject properties that can be used for presets.

#### Parameters

preset | a GObject that implements GstPreset |

#### Returns

an array of property names which should be freed with `g_strfreev()` after use.

[transfer full][array zero-terminated=1][element-type gchar*]

### gst_preset_load_preset ()

    gboolean
    gst_preset_load_preset (GstPreset *preset,
                            const gchar *name);

Load the given preset.

#### Parameters

preset | a GObject that implements GstPreset |
name | preset name to load |

#### Returns

`TRUE` for success, `FALSE` if e.g. there is no preset with that `name`

### gst_preset_save_preset ()

    gboolean
    gst_preset_save_preset (GstPreset *preset,
                            const gchar *name);

Save the current object settings as a preset under the given name. If there is already a preset by this `name` it will be overwritten.

#### Parameters

preset | a GObject that implements GstPreset |
name | preset name to save |

#### Returns

`TRUE` for success, `FALSE`

### gst_preset_rename_preset ()

    gboolean
    gst_preset_rename_preset (GstPreset *preset,
                              const gchar *old_name,
                              const gchar *new_name);

Renames a preset. If there is already a preset by the `new_name` it will be overwritten.

#### Parameters

preset | a GObject that implements GstPreset |
old_name | current preset name |
new_name | new preset name |

#### Returns

`TRUE` for success, `FALSE` if e.g. there is no preset with `old_name`

### gst_preset_delete_preset ()

    gboolean
    gst_preset_delete_preset (GstPreset *preset,
                              const gchar *name);

Delete the given preset.

#### Parameters

preset | a GObject that implements GstPreset |
name | preset name to remove |

#### Returns

`TRUE` for success, `FALSE` if e.g. there is no preset with that `name`

### gst_preset_set_meta ()

    gboolean
    gst_preset_set_meta (GstPreset *preset,
                         const gchar *name,
                         const gchar *tag,
                         const gchar *value);

Sets a new `value` for an existing meta data item or adds a new item. Meta data `tag` names can be something like e.g. "comment". Supplying `NULL` for the `value` will unset an existing value.

#### Parameters

preset | a GObject that implements GstPreset |
name | preset name |
tag | meta data item name |
value | new value. | [allow-none]

#### Returns

`TRUE` for success, `FALSE` if e.g. there is no preset with that `name`

### gst_preset_get_meta ()

    gboolean
    gst_preset_get_meta (GstPreset *preset,
                         const gchar *name,
                         const gchar *tag,
                         gchar **value);

Gets the `value` for an existing meta data `tag` . Meta data `tag` names can be something like e.g. "comment". Returned values need to be released when done.

#### Parameters

preset | a GObject that implements GstPreset |
name | preset name |
tag | meta data item name |
value | value. | [out callee-allocates]

#### Returns

`TRUE` for success, `FALSE` if e.g. there is no preset with that `name` or no value for the given `tag`

### gst_preset_set_app_dir ()

    gboolean
    gst_preset_set_app_dir (const gchar *app_dir);

Sets an extra directory as an absolute path that should be considered when looking for presets. Any presets in the application dir will shadow the system presets.

#### Parameters

app_dir | the application specific preset dir. | [type filename]

#### Returns

`TRUE` for success, `FALSE` if the dir already has been set

### gst_preset_get_app_dir ()

    const gchar *
    gst_preset_get_app_dir (void);

Gets the directory for application specific presets if set by the application.

#### Returns

the directory or `NULL`, don't free or modify the string.

[nullable][type filename]

### gst_preset_is_editable ()

    gboolean
    gst_preset_is_editable (GstPreset *preset);

Check if one can add new presets, change existing ones and remove presets.

#### Parameters

preset | a GObject that implements GstPreset |

#### Returns

`TRUE` if presets are editable or `FALSE` if they are static

Since: 1.6

## Types and Values

### GstPreset

    typedef struct _GstPreset GstPreset;

Opaque GstPreset data structure.

### struct GstPresetInterface

    struct GstPresetInterface {
      GTypeInterface parent;

      /* methods */
      gchar**      (*get_preset_names)    (GstPreset *preset);

      gchar**      (*get_property_names)  (GstPreset *preset);

      gboolean     (*load_preset)         (GstPreset *preset, const gchar *name);
      gboolean     (*save_preset)         (GstPreset *preset, const gchar *name);
      gboolean     (*rename_preset)       (GstPreset *preset, const gchar *old_name,
                                           const gchar *new_name);
      gboolean     (*delete_preset)       (GstPreset *preset, const gchar *name);

      gboolean     (*set_meta)            (GstPreset *preset, const gchar *name,
                                           const gchar *tag, const gchar *value);
      gboolean     (*get_meta)            (GstPreset *preset, const gchar *name,
                                           const gchar *tag, gchar **value);
    };

GstPreset interface.

#### Members

GTypeInterface `parent`; | parent interface type. |
`get_preset_names` () | virtual method to get list of presets |
`get_property_names` () | virtual methods to get properties that are persistent |
`load_preset` () | virtual methods to load a preset into properties |
`save_preset` () | virtual methods to save properties into a preset |
`rename_preset` () | virtual methods to rename a preset |
`delete_preset` () | virtual methods to remove a preset |
`set_meta` () | virtual methods to set textual meta data to a preset |
`get_meta` () | virtual methods to get textual meta data from a preset |