caps: add ANY and EMPTY singletons

Add a singleton for ANY and EMPTY caps and make the GST_CAPS_ANY and
GST_CAPS_NONE point to them. This makes the API more consistent now
that the macro does not magically create a ref. It also solves some leaks in
places where the macro was used to register a padtemplate.
This commit is contained in:
Wim Taymans 2011-12-20 13:14:07 +01:00
parent 04e0912094
commit 8ff059ba59
2 changed files with 13 additions and 4 deletions

View file

@ -114,6 +114,8 @@ static gboolean gst_caps_from_string_inplace (GstCaps * caps,
const gchar * string);
GType _gst_caps_type = 0;
GstCaps *_gst_caps_any;
GstCaps *_gst_caps_empty;
GST_DEFINE_MINI_OBJECT_TYPE (GstCaps, gst_caps);
@ -122,6 +124,9 @@ _priv_gst_caps_initialize (void)
{
_gst_caps_type = gst_caps_get_type ();
_gst_caps_any = gst_caps_new_any ();
_gst_caps_empty = gst_caps_new_empty ();
g_value_register_transform_func (_gst_caps_type,
G_TYPE_STRING, gst_caps_transform_to_string);
}

View file

@ -83,16 +83,18 @@ typedef enum {
* GST_CAPS_ANY:
*
* Means that the element/pad can output 'anything'. Useful for elements
* that output unknown media, such as filesrc.
* that output unknown media, such as filesrc. This macro returns a singleton and
* should not be unreffed.
*/
#define GST_CAPS_ANY gst_caps_new_any()
#define GST_CAPS_ANY _gst_caps_any
/**
* GST_CAPS_NONE:
*
* The opposite of %GST_CAPS_ANY: it means that the pad/element outputs an
* undefined media type that can not be detected.
* undefined media type that can not be detected. This macro returns a singleton
* and should not be unreffed.
*/
#define GST_CAPS_NONE gst_caps_new_empty()
#define GST_CAPS_NONE _gst_caps_empty
/**
* GST_STATIC_CAPS_ANY:
@ -136,6 +138,8 @@ typedef enum {
typedef struct _GstCaps GstCaps;
typedef struct _GstStaticCaps GstStaticCaps;
extern GstCaps * _gst_caps_any;
extern GstCaps * _gst_caps_empty;
/**
* GST_CAPS_FLAGS:
* @caps: a #GstCaps.