Blame gst/gstobject.h

Packit f546b1
/* GStreamer
Packit f546b1
 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
Packit f546b1
 *                    2000 Wim Taymans <wtay@chello.be>
Packit f546b1
 *                    2005 Wim Taymans <wim@fluendo.com>
Packit f546b1
 *
Packit f546b1
 * gstobject.h: Header for base GstObject
Packit f546b1
 *
Packit f546b1
 * This library is free software; you can redistribute it and/or
Packit f546b1
 * modify it under the terms of the GNU Library General Public
Packit f546b1
 * License as published by the Free Software Foundation; either
Packit f546b1
 * version 2 of the License, or (at your option) any later version.
Packit f546b1
 *
Packit f546b1
 * This library is distributed in the hope that it will be useful,
Packit f546b1
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit f546b1
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit f546b1
 * Library General Public License for more details.
Packit f546b1
 *
Packit f546b1
 * You should have received a copy of the GNU Library General Public
Packit f546b1
 * License along with this library; if not, write to the
Packit f546b1
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Packit f546b1
 * Boston, MA 02110-1301, USA.
Packit f546b1
 */
Packit f546b1
Packit f546b1
#ifndef __GST_OBJECT_H__
Packit f546b1
#define __GST_OBJECT_H__
Packit f546b1
Packit f546b1
#include <gst/gstconfig.h>
Packit f546b1
Packit f546b1
#include <glib-object.h>
Packit f546b1
Packit f546b1
G_BEGIN_DECLS
Packit f546b1
Packit f546b1
#define GST_TYPE_OBJECT			(gst_object_get_type ())
Packit f546b1
#define GST_IS_OBJECT(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_OBJECT))
Packit f546b1
#define GST_IS_OBJECT_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_OBJECT))
Packit f546b1
#define GST_OBJECT_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_OBJECT, GstObjectClass))
Packit f546b1
#define GST_OBJECT(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_OBJECT, GstObject))
Packit f546b1
#define GST_OBJECT_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_OBJECT, GstObjectClass))
Packit f546b1
#define GST_OBJECT_CAST(obj)            ((GstObject*)(obj))
Packit f546b1
#define GST_OBJECT_CLASS_CAST(klass)    ((GstObjectClass*)(klass))
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GstObjectFlags:
Packit f546b1
 * @GST_OBJECT_FLAG_MAY_BE_LEAKED: the object is expected to stay alive even
Packit f546b1
 * after gst_deinit() has been called and so should be ignored by leak
Packit f546b1
 * detection tools. (Since 1.10)
Packit f546b1
 * @GST_OBJECT_FLAG_LAST: subclasses can add additional flags starting from this flag
Packit f546b1
 *
Packit f546b1
 * The standard flags that an gstobject may have.
Packit f546b1
 */
Packit f546b1
typedef enum
Packit f546b1
{
Packit f546b1
  GST_OBJECT_FLAG_MAY_BE_LEAKED = (1 << 0),
Packit f546b1
  /* padding */
Packit f546b1
  GST_OBJECT_FLAG_LAST = (1<<4)
Packit f546b1
} GstObjectFlags;
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_REFCOUNT:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 *
Packit f546b1
 * Get access to the reference count field of the object.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_REFCOUNT(obj)                (((GObject*)(obj))->ref_count)
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_REFCOUNT_VALUE:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 *
Packit f546b1
 * Get the reference count value of the object.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_REFCOUNT_VALUE(obj)          g_atomic_int_get ((gint *) &GST_OBJECT_REFCOUNT(obj))
Packit f546b1
Packit f546b1
/* we do a GST_OBJECT_CAST to avoid type checking, better call these
Packit f546b1
 * function with a valid object! */
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_GET_LOCK:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 *
Packit f546b1
 * Acquire a reference to the mutex of this object.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_GET_LOCK(obj)               (&GST_OBJECT_CAST(obj)->lock)
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_LOCK:
Packit f546b1
 * @obj: a #GstObject to lock
Packit f546b1
 *
Packit f546b1
 * This macro will obtain a lock on the object, making serialization possible.
Packit f546b1
 * It blocks until the lock can be obtained.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_LOCK(obj)                   g_mutex_lock(GST_OBJECT_GET_LOCK(obj))
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_TRYLOCK:
Packit f546b1
 * @obj: a #GstObject.
Packit f546b1
 *
Packit f546b1
 * This macro will try to obtain a lock on the object, but will return with
Packit f546b1
 * %FALSE if it can't get it immediately.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_TRYLOCK(obj)                g_mutex_trylock(GST_OBJECT_GET_LOCK(obj))
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_UNLOCK:
Packit f546b1
 * @obj: a #GstObject to unlock.
Packit f546b1
 *
Packit f546b1
 * This macro releases a lock on the object.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_UNLOCK(obj)                 g_mutex_unlock(GST_OBJECT_GET_LOCK(obj))
Packit f546b1
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_NAME:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 *
Packit f546b1
 * Get the name of this object. This is not thread-safe by default
Packit f546b1
 * (i.e. you will have to make sure the object lock is taken yourself).
Packit f546b1
 * If in doubt use gst_object_get_name() instead.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_NAME(obj)            (GST_OBJECT_CAST(obj)->name)
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_PARENT:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 *
Packit f546b1
 * Get the parent of this object. This is not thread-safe by default
Packit f546b1
 * (i.e. you will have to make sure the object lock is taken yourself).
Packit f546b1
 * If in doubt use gst_object_get_parent() instead.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_PARENT(obj)          (GST_OBJECT_CAST(obj)->parent)
Packit f546b1
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_FLAGS:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 *
Packit f546b1
 * This macro returns the entire set of flags for the object.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_FLAGS(obj)                  (GST_OBJECT_CAST (obj)->flags)
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_FLAG_IS_SET:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 * @flag: Flag to check for
Packit f546b1
 *
Packit f546b1
 * This macro checks to see if the given flag is set.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_FLAG_IS_SET(obj,flag)       ((GST_OBJECT_FLAGS (obj) & (flag)) == (flag))
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_FLAG_SET:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 * @flag: Flag to set
Packit f546b1
 *
Packit f546b1
 * This macro sets the given bits.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_FLAG_SET(obj,flag)          (GST_OBJECT_FLAGS (obj) |= (flag))
Packit f546b1
/**
Packit f546b1
 * GST_OBJECT_FLAG_UNSET:
Packit f546b1
 * @obj: a #GstObject
Packit f546b1
 * @flag: Flag to set
Packit f546b1
 *
Packit f546b1
 * This macro unsets the given bits.
Packit f546b1
 */
Packit f546b1
#define GST_OBJECT_FLAG_UNSET(obj,flag)        (GST_OBJECT_FLAGS (obj) &= ~(flag))
Packit f546b1
Packit f546b1
typedef struct _GstObject GstObject;
Packit f546b1
typedef struct _GstObjectClass GstObjectClass;
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GstObject:
Packit f546b1
 * @lock: object LOCK
Packit f546b1
 * @name: The name of the object
Packit f546b1
 * @parent: this object's parent, weak ref
Packit f546b1
 * @flags: flags for this object
Packit f546b1
 *
Packit f546b1
 * GStreamer base object class.
Packit f546b1
 */
Packit f546b1
struct _GstObject {
Packit f546b1
  GInitiallyUnowned object;
Packit f546b1
Packit f546b1
  /*< public >*/ /* with LOCK */
Packit f546b1
  GMutex         lock;        /* object LOCK */
Packit f546b1
  gchar         *name;        /* object name */
Packit f546b1
  GstObject     *parent;      /* this object's parent, weak ref */
Packit f546b1
  guint32        flags;
Packit f546b1
Packit f546b1
  /*< private >*/
Packit f546b1
  GList         *control_bindings;  /* List of GstControlBinding */
Packit f546b1
  guint64        control_rate;
Packit f546b1
  guint64        last_sync;
Packit f546b1
Packit f546b1
  gpointer _gst_reserved;
Packit f546b1
};
Packit f546b1
Packit f546b1
/**
Packit f546b1
 * GstObjectClass:
Packit f546b1
 * @parent_class: parent
Packit f546b1
 * @path_string_separator: separator used by gst_object_get_path_string()
Packit f546b1
 * @deep_notify: default signal handler
Packit f546b1
 *
Packit f546b1
 * GStreamer base object class.
Packit f546b1
 */
Packit f546b1
struct _GstObjectClass {
Packit f546b1
  GInitiallyUnownedClass parent_class;
Packit f546b1
Packit f546b1
  const gchar	*path_string_separator;
Packit f546b1
Packit f546b1
  /* signals */
Packit f546b1
  void          (*deep_notify)      (GstObject * object, GstObject * orig, GParamSpec * pspec);
Packit f546b1
Packit f546b1
  /*< public >*/
Packit f546b1
  /* virtual methods for subclasses */
Packit f546b1
Packit f546b1
  /*< private >*/
Packit f546b1
  gpointer _gst_reserved[GST_PADDING];
Packit f546b1
};
Packit f546b1
Packit f546b1
/* normal GObject stuff */
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
GType		gst_object_get_type		(void);
Packit f546b1
Packit f546b1
/* name routines */
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean	gst_object_set_name		(GstObject *object, const gchar *name);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gchar*		gst_object_get_name		(GstObject *object);
Packit f546b1
Packit f546b1
/* parentage routines */
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean	gst_object_set_parent		(GstObject *object, GstObject *parent);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
GstObject*	gst_object_get_parent		(GstObject *object);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
void		gst_object_unparent		(GstObject *object);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean	gst_object_has_as_parent		(GstObject *object, GstObject *parent);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean	gst_object_has_as_ancestor	(GstObject *object, GstObject *ancestor);
Packit f546b1
Packit f546b1
GST_DEPRECATED_FOR(gst_object_has_as_ancestor)
Packit f546b1
gboolean	gst_object_has_ancestor		(GstObject *object, GstObject *ancestor);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
void            gst_object_default_deep_notify  (GObject *object, GstObject *orig,
Packit f546b1
                                                 GParamSpec *pspec, gchar **excluded_props);
Packit f546b1
Packit f546b1
/* refcounting + life cycle */
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gpointer	gst_object_ref			(gpointer object);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
void		gst_object_unref		(gpointer object);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gpointer        gst_object_ref_sink		(gpointer object);
Packit f546b1
Packit f546b1
/* replace object pointer */
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean        gst_object_replace		(GstObject **oldobj, GstObject *newobj);
Packit f546b1
Packit f546b1
/* printing out the 'path' of the object */
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gchar *		gst_object_get_path_string	(GstObject *object);
Packit f546b1
Packit f546b1
/* misc utils */
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean	gst_object_check_uniqueness	(GList *list, const gchar *name);
Packit f546b1
Packit f546b1
/* controller functions */
Packit f546b1
#include <gst/gstcontrolbinding.h>
Packit f546b1
#include <gst/gstcontrolsource.h>
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
GstClockTime    gst_object_suggest_next_sync      (GstObject * object);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean        gst_object_sync_values            (GstObject * object, GstClockTime timestamp);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean        gst_object_has_active_control_bindings   (GstObject *object);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
void            gst_object_set_control_bindings_disabled (GstObject *object, gboolean disabled);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
void            gst_object_set_control_binding_disabled  (GstObject *object,
Packit f546b1
                                                          const gchar * property_name,
Packit f546b1
                                                          gboolean disabled);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean        gst_object_add_control_binding    (GstObject * object, GstControlBinding * binding);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
GstControlBinding *
Packit f546b1
                gst_object_get_control_binding    (GstObject *object, const gchar * property_name);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
gboolean        gst_object_remove_control_binding (GstObject * object, GstControlBinding * binding);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
GValue *        gst_object_get_value              (GstObject * object, const gchar * property_name,
Packit f546b1
                                                   GstClockTime timestamp);
Packit f546b1
GST_API
Packit f546b1
gboolean        gst_object_get_value_array        (GstObject * object, const gchar * property_name,
Packit f546b1
                                                   GstClockTime timestamp, GstClockTime interval,
Packit f546b1
                                                   guint n_values, gpointer values);
Packit f546b1
GST_API
Packit f546b1
gboolean        gst_object_get_g_value_array      (GstObject * object, const gchar * property_name,
Packit f546b1
                                                   GstClockTime timestamp, GstClockTime interval,
Packit f546b1
                                                   guint n_values, GValue *values);
Packit f546b1
GST_API
Packit f546b1
GstClockTime    gst_object_get_control_rate       (GstObject * object);
Packit f546b1
Packit f546b1
GST_API
Packit f546b1
void            gst_object_set_control_rate       (GstObject * object, GstClockTime control_rate);
Packit f546b1
Packit f546b1
#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
Packit f546b1
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstObject, gst_object_unref)
Packit f546b1
#endif
Packit f546b1
Packit f546b1
G_END_DECLS
Packit f546b1
Packit f546b1
#endif /* __GST_OBJECT_H__ */
Packit f546b1