X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Fgstminiobject.h;h=fe0a1aafc409813ccaa5798d89a169b33f2d51d3;hb=20ba45324442193bdd6d0ca06063a3c6d29c37cd;hp=ce24f79e907cb101922e7062dbe297ab27402570;hpb=e1aeec6d775a777295669ccd0165bd477e476025;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/gstminiobject.h b/gst/gstminiobject.h index ce24f79..fe0a1aa 100644 --- a/gst/gstminiobject.h +++ b/gst/gstminiobject.h @@ -29,72 +29,158 @@ G_BEGIN_DECLS -#define GST_TYPE_MINI_OBJECT (gst_mini_object_get_type()) -#define GST_IS_MINI_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MINI_OBJECT)) -#define GST_IS_MINI_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MINI_OBJECT)) -#define GST_MINI_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_MINI_OBJECT, GstMiniObjectClass)) -#define GST_MINI_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MINI_OBJECT, GstMiniObject)) -#define GST_MINI_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MINI_OBJECT, GstMiniObjectClass)) -#define GST_MINI_OBJECT_CAST(obj) ((GstMiniObject*)(obj)) +#define GST_IS_MINI_OBJECT_TYPE(obj,type) ((obj) && GST_MINI_OBJECT_TYPE(obj) == (type)) +#define GST_MINI_OBJECT_CAST(obj) ((GstMiniObject*)(obj)) +#define GST_MINI_OBJECT_CONST_CAST(obj) ((const GstMiniObject*)(obj)) +#define GST_MINI_OBJECT(obj) (GST_MINI_OBJECT_CAST(obj)) typedef struct _GstMiniObject GstMiniObject; -typedef struct _GstMiniObjectClass GstMiniObjectClass; -typedef GstMiniObject * (*GstMiniObjectCopyFunction) (const GstMiniObject *); -typedef void (*GstMiniObjectFinalizeFunction) (GstMiniObject *); +/** + * GstMiniObjectCopyFunction: + * @obj: MiniObject to copy + * + * Function prototype for methods to create copies of instances. + * + * Returns: reference to cloned instance. + */ +typedef GstMiniObject * (*GstMiniObjectCopyFunction) (const GstMiniObject *obj); +/** + * GstMiniObjectDisposeFunction: + * @obj: MiniObject to dispose + * + * Function prototype for when a miniobject has lost its last refcount. + * Implementation of the mini object are allowed to revive the + * passed object by doing a gst_mini_object_ref(). If the object is not + * revived after the dispose function, the memory associated with the + * object is freed. + */ +typedef void (*GstMiniObjectDisposeFunction) (GstMiniObject *obj); +/** + * GstMiniObjectFreeFunction: + * @obj: MiniObject to free + * + * Virtual function prototype for methods to free ressources used by + * mini-objects. + */ +typedef void (*GstMiniObjectFreeFunction) (GstMiniObject *obj); -#define GST_MINI_OBJECT_FLAGS(obj) (GST_MINI_OBJECT(obj)->flags) -#define GST_MINI_OBJECT_FLAG_IS_SET(obj,flag) (GST_MINI_OBJECT_FLAGS(obj) & (flag)) +/** + * GST_MINI_OBJECT_FLAGS: + * @obj: MiniObject to return flags for. + * + * This macro returns the entire set of flags for the mini-object. + */ +#define GST_MINI_OBJECT_TYPE(obj) (GST_MINI_OBJECT_CAST(obj)->type) +/** + * GST_MINI_OBJECT_FLAGS: + * @obj: MiniObject to return flags for. + * + * This macro returns the entire set of flags for the mini-object. + */ +#define GST_MINI_OBJECT_FLAGS(obj) (GST_MINI_OBJECT_CAST(obj)->flags) +/** + * GST_MINI_OBJECT_FLAG_IS_SET: + * @obj: MiniObject to check for flags. + * @flag: Flag to check for + * + * This macro checks to see if the given flag is set. + */ +#define GST_MINI_OBJECT_FLAG_IS_SET(obj,flag) !!(GST_MINI_OBJECT_FLAGS (obj) & (flag)) +/** + * GST_MINI_OBJECT_FLAG_SET: + * @obj: MiniObject to set flag in. + * @flag: Flag to set, can by any number of bits in guint32. + * + * This macro sets the given bits. + */ #define GST_MINI_OBJECT_FLAG_SET(obj,flag) (GST_MINI_OBJECT_FLAGS (obj) |= (flag)) +/** + * GST_MINI_OBJECT_FLAG_UNSET: + * @obj: MiniObject to unset flag in. + * @flag: Flag to set, must be a single bit in guint32. + * + * This macro usets the given bits. + */ #define GST_MINI_OBJECT_FLAG_UNSET(obj,flag) (GST_MINI_OBJECT_FLAGS (obj) &= ~(flag)) -#define GST_VALUE_HOLDS_MINI_OBJECT(value) (G_VALUE_HOLDS(value, GST_TYPE_MINI_OBJECT)) - +/** + * GstMiniObjectFlags: + * @GST_MINI_OBJECT_FLAG_LAST: first flag that can be used by subclasses. + * + * Flags for the mini object + */ typedef enum { - GST_MINI_OBJECT_FLAG_READONLY = (1<<0), - GST_MINI_OBJECT_FLAG_STATIC = (1<<1), + /* padding */ GST_MINI_OBJECT_FLAG_LAST = (1<<4) } GstMiniObjectFlags; +/** + * GST_MINI_OBJECT_REFCOUNT: + * @obj: a #GstMiniObject + * + * Get access to the reference count field of the mini-object. + */ #define GST_MINI_OBJECT_REFCOUNT(obj) ((GST_MINI_OBJECT_CAST(obj))->refcount) +/** + * GST_MINI_OBJECT_REFCOUNT_VALUE: + * @obj: a #GstMiniObject + * + * Get the reference count value of the mini-object. + */ #define GST_MINI_OBJECT_REFCOUNT_VALUE(obj) (g_atomic_int_get (&(GST_MINI_OBJECT_CAST(obj))->refcount)) +/** + * GST_MINI_OBJECT_SIZE: + * @obj: a #GstMiniObject + * + * Get the allocated size of @obj. + */ +#define GST_MINI_OBJECT_SIZE(obj) ((GST_MINI_OBJECT_CAST(obj))->size) + +/** + * GstMiniObject: + * @instance: type instance + * @refcount: atomic refcount + * @flags: extra flags. + * @copy: a copy function + * @dispose: a dispose function + * @free: the free function + * + * Base class for refcounted lightweight objects. + * Ref Func: gst_mini_object_ref + * Unref Func: gst_mini_object_unref + * Set Value Func: g_value_set_boxed + * Get Value Func: g_value_get_boxed + */ struct _GstMiniObject { - GTypeInstance instance; - gint refcount; - guint flags; + GType type; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstMiniObjectClass { - GTypeClass type_class; + /*< public >*/ /* with COW */ + gint refcount; + guint flags; + gsize size; GstMiniObjectCopyFunction copy; - GstMiniObjectFinalizeFunction finalize; - - gpointer _gst_reserved[GST_PADDING]; + GstMiniObjectDisposeFunction dispose; + GstMiniObjectFreeFunction free; }; -GType gst_mini_object_get_type (void); - -GstMiniObject * gst_mini_object_new (GType type); -GstMiniObject * gst_mini_object_copy (const GstMiniObject *mini_object); -gboolean gst_mini_object_is_writable (const GstMiniObject *mini_object); -GstMiniObject * gst_mini_object_make_writable (GstMiniObject *mini_object); +GType gst_mini_object_register (const gchar *name); -GstMiniObject * gst_mini_object_ref (GstMiniObject *mini_object); -void gst_mini_object_unref (GstMiniObject *mini_object); +void gst_mini_object_init (GstMiniObject *mini_object, + GType type, gsize size); -void gst_mini_object_replace (GstMiniObject **olddata, GstMiniObject *newdata); +GstMiniObject* gst_mini_object_copy (const GstMiniObject *mini_object); +gboolean gst_mini_object_is_writable (const GstMiniObject *mini_object); +GstMiniObject* gst_mini_object_make_writable (GstMiniObject *mini_object); -GParamSpec * gst_param_spec_mini_object (const char *name, const char *nick, - const char *blurb, GType object_type, GParamFlags flags); +/* refcounting */ +GstMiniObject* gst_mini_object_ref (GstMiniObject *mini_object); +void gst_mini_object_unref (GstMiniObject *mini_object); -void gst_value_set_mini_object (GValue *value, GstMiniObject *mini_object); -void gst_value_take_mini_object (GValue *value, GstMiniObject *mini_object); -GstMiniObject * gst_value_get_mini_object (const GValue *value); +void gst_mini_object_replace (GstMiniObject **olddata, GstMiniObject *newdata); G_END_DECLS