## GstCapsFeatures GstCapsFeatures — A set of features in caps |

## Synopsis

    #include <gst/gst.h>

                        GstCapsFeatures;
    GstCapsFeatures *   gst_caps_features_new               (const gchar *feature1,
                                                             ...);
    GstCapsFeatures *   gst_caps_features_new_empty         (void);
    GstCapsFeatures *   gst_caps_features_new_any           (void);
    GstCapsFeatures *   gst_caps_features_new_id            (GQuark feature1,
                                                             ...);
    GstCapsFeatures *   gst_caps_features_new_id_valist     (GQuark feature1,
                                                             va_list varargs);
    GstCapsFeatures *   gst_caps_features_new_valist        (const gchar *feature1,
                                                             va_list varargs);
    GstCapsFeatures *   gst_caps_features_copy              (const GstCapsFeatures *features);
    void                gst_caps_features_free              (GstCapsFeatures *features);
    GstCapsFeatures *   gst_caps_features_from_string       (const gchar *features);
    gchar *             gst_caps_features_to_string         (const GstCapsFeatures *features);
    gboolean            gst_caps_features_set_parent_refcount
                                                            (GstCapsFeatures *features,
                                                             gint *refcount);
    gboolean            gst_caps_features_is_equal          (const GstCapsFeatures *features1,
                                                             const GstCapsFeatures *features2);
    gboolean            gst_caps_features_is_any            (const GstCapsFeatures *features);
    gboolean            gst_caps_features_contains          (const GstCapsFeatures *features,
                                                             const gchar *feature);
    gboolean            gst_caps_features_contains_id       (const GstCapsFeatures *features,
                                                             GQuark feature);
    guint               gst_caps_features_get_size          (const GstCapsFeatures *features);
    const gchar *       gst_caps_features_get_nth           (const GstCapsFeatures *features,
                                                             guint i);
    GQuark              gst_caps_features_get_nth_id        (const GstCapsFeatures *features,
                                                             guint i);
    void                gst_caps_features_add               (GstCapsFeatures *features,
                                                             const gchar *feature);
    void                gst_caps_features_add_id            (GstCapsFeatures *features,
                                                             GQuark feature);
    void                gst_caps_features_remove            (GstCapsFeatures *features,
                                                             const gchar *feature);
    void                gst_caps_features_remove_id         (GstCapsFeatures *features,
                                                             GQuark feature);

## Description

GstCapsFeatures can optionally be set on a GstCaps to add requirements for additional features for a specific GstStructure. Caps structures with the same name but with a non-equal set of caps features are not compatible. If a pad supports multiple sets of features it has to add multiple equal structures with different feature sets to the caps.

Empty GstCapsFeatures are equivalent with the GstCapsFeatures that only contain GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY. ANY GstCapsFeatures as created by `gst_caps_features_new_any()` are equal to any other GstCapsFeatures and can be used to specify that any GstCapsFeatures would be supported, e.g. for elements that don't touch buffer memory. GstCaps with ANY GstCapsFeatures are considered non-fixed and during negotiation some GstCapsFeatures have to be selected.

Examples for caps features would be the requirement of a specific GstMemory types or the requirement of having a specific GstMeta on the buffer. Features are given as a string of the format "memory:GstMemoryTypeName" or "meta:GstMetaAPIName".

## Details

### GstCapsFeatures

    typedef struct _GstCapsFeatures GstCapsFeatures;

### gst_caps_features_new ()

    GstCapsFeatures *   gst_caps_features_new               (const gchar *feature1,
                                                             ...);

Creates a new GstCapsFeatures with the given features. The last argument must be NULL.

Free-function: gst_caps_features_free

`feature1` : | name of first feature to set
`...` : | additional features
Returns : | a new, empty GstCapsFeatures. [transfer full]

Since 1.2

### gst_caps_features_new_empty ()

    GstCapsFeatures *   gst_caps_features_new_empty         (void);

Creates a new, empty GstCapsFeatures.

Free-function: gst_caps_features_free

Returns : | a new, empty GstCapsFeatures. [transfer full]

Since 1.2

### gst_caps_features_new_any ()

    GstCapsFeatures *   gst_caps_features_new_any           (void);

Creates a new, ANY GstCapsFeatures. This will be equal to any other GstCapsFeatures but caps with these are unfixed.

Free-function: gst_caps_features_free

Returns : | a new, ANY GstCapsFeatures. [transfer full]

Since 1.2

### gst_caps_features_new_id ()

    GstCapsFeatures *   gst_caps_features_new_id            (GQuark feature1,
                                                             ...);

Creates a new GstCapsFeatures with the given features. The last argument must be 0.

Free-function: gst_caps_features_free

`feature1` : | name of first feature to set
`...` : | additional features
Returns : | a new, empty GstCapsFeatures. [transfer full]

Since 1.2

### gst_caps_features_new_id_valist ()

    GstCapsFeatures *   gst_caps_features_new_id_valist     (GQuark feature1,
                                                             va_list varargs);

Creates a new GstCapsFeatures with the given features.

Free-function: gst_caps_features_free

`feature1` : | name of first feature to set
`varargs` : | variable argument list
Returns : | a new, empty GstCapsFeatures. [transfer full]

Since 1.2

### gst_caps_features_new_valist ()

    GstCapsFeatures *   gst_caps_features_new_valist        (const gchar *feature1,
                                                             va_list varargs);

Creates a new GstCapsFeatures with the given features.

Free-function: gst_caps_features_free

`feature1` : | name of first feature to set
`varargs` : | variable argument list
Returns : | a new, empty GstCapsFeatures. [transfer full]

Since 1.2

### gst_caps_features_copy ()

    GstCapsFeatures *   gst_caps_features_copy              (const GstCapsFeatures *features);

Duplicates a GstCapsFeatures and all its values.

Free-function: gst_caps_features_free

`features` : | a GstCapsFeatures to duplicate
Returns : | a new GstCapsFeatures. [transfer full]

Since 1.2

### gst_caps_features_free ()

    void                gst_caps_features_free              (GstCapsFeatures *features);

Frees a GstCapsFeatures and all its values. The caps features must not have a parent when this function is called.

`features` : | the GstCapsFeatures to free. [in][transfer full]

Since 1.2

### gst_caps_features_from_string ()

    GstCapsFeatures *   gst_caps_features_from_string       (const gchar *features);

Creates a GstCapsFeatures from a string representation.

Free-function: gst_caps_features_free

`features` : | a string representation of a GstCapsFeatures.
Returns : | a new GstCapsFeatures or NULL when the string could not be parsed. Free with `gst_caps_features_free()` after use. [transfer full]

Since 1.2

### gst_caps_features_to_string ()

    gchar *             gst_caps_features_to_string         (const GstCapsFeatures *features);

Converts `features` to a human-readable string representation.

For debugging purposes its easier to do something like this:

    1
    GST_LOG ("features is %" GST_PTR_FORMAT, features);

This prints the features in human readble form.

Free-function: g_free

`features` : | a GstCapsFeatures
Returns : | a pointer to string allocated by `g_malloc()`. `g_free()` after usage. [transfer full]

Since 1.2

### gst_caps_features_set_parent_refcount ()

    gboolean            gst_caps_features_set_parent_refcount
                                                            (GstCapsFeatures *features,
                                                             gint *refcount);

Sets the parent_refcount field of GstCapsFeatures. This field is used to determine whether a caps features is mutable or not. This function should only be called by code implementing parent objects of GstCapsFeatures, as described in the MT Refcounting section of the design documents.

`features` : | a GstCapsFeatures
`refcount` : | a pointer to the parent's refcount. [in]
Returns : | `TRUE` if the parent refcount could be set.

Since 1.2

### gst_caps_features_is_equal ()

    gboolean            gst_caps_features_is_equal          (const GstCapsFeatures *features1,
                                                             const GstCapsFeatures *features2);

Check if `features1` and `features2` are equal.

`features1` : | a GstCapsFeatures.
`features2` : | a GstCapsFeatures.
Returns : | `TRUE` if `features1` and `features2` are equal.

Since 1.2

### gst_caps_features_is_any ()

    gboolean            gst_caps_features_is_any            (const GstCapsFeatures *features);

Check if `features` is `GST_CAPS_FEATURES_ANY`.

`features` : | a GstCapsFeatures.
Returns : | `TRUE` if `features` is `GST_CAPS_FEATURES_ANY`.

Since 1.2

### gst_caps_features_contains ()

    gboolean            gst_caps_features_contains          (const GstCapsFeatures *features,
                                                             const gchar *feature);

Check if `features` contains `feature`.

`features` : | a GstCapsFeatures.
`feature` : | a feature
Returns : | `TRUE` if `features` contains `feature`.

Since 1.2

### gst_caps_features_contains_id ()

    gboolean            gst_caps_features_contains_id       (const GstCapsFeatures *features,
                                                             GQuark feature);

Check if `features` contains `feature`.

`features` : | a GstCapsFeatures.
`feature` : | a feature
Returns : | `TRUE` if `features` contains `feature`.

Since 1.2

### gst_caps_features_get_size ()

    guint               gst_caps_features_get_size          (const GstCapsFeatures *features);

Returns the number of features in `features`.

`features` : | a GstCapsFeatures.
Returns : | The number of features in `features`.

Since 1.2

### gst_caps_features_get_nth ()

    const gchar *       gst_caps_features_get_nth           (const GstCapsFeatures *features,
                                                             guint i);

Returns the `i`-th feature of `features`.

`features` : | a GstCapsFeatures.
`i` : | index of the feature
Returns : | The `i`-th feature of `features`.

Since 1.2

### gst_caps_features_get_nth_id ()

    GQuark              gst_caps_features_get_nth_id        (const GstCapsFeatures *features,
                                                             guint i);

Returns the `i`-th feature of `features`.

`features` : | a GstCapsFeatures.
`i` : | index of the feature
Returns : | The `i`-th feature of `features`.

Since 1.2

### gst_caps_features_add ()

    void                gst_caps_features_add               (GstCapsFeatures *features,
                                                             const gchar *feature);

Adds `feature` to `features`.

`features` : | a GstCapsFeatures.
`feature` : | a feature.

Since 1.2

### gst_caps_features_add_id ()

    void                gst_caps_features_add_id            (GstCapsFeatures *features,
                                                             GQuark feature);

Adds `feature` to `features`.

`features` : | a GstCapsFeatures.
`feature` : | a feature.

Since 1.2

### gst_caps_features_remove ()

    void                gst_caps_features_remove            (GstCapsFeatures *features,
                                                             const gchar *feature);

Removes `feature` from `features`.

`features` : | a GstCapsFeatures.
`feature` : | a feature.

Since 1.2

### gst_caps_features_remove_id ()

    void                gst_caps_features_remove_id         (GstCapsFeatures *features,
                                                             GQuark feature);

Removes `feature` from `features`.

`features` : | a GstCapsFeatures.
`feature` : | a feature.

Since 1.2

## See Also

GstCaps