[gst-cvs] gstreamer: gstobject: add gst_object_ref_sink
Wim Taymans
wtay at kemper.freedesktop.org
Mon May 11 13:36:50 PDT 2009
Module: gstreamer
Branch: master
Commit: 54401df78c138e1dcf90b984978dd785416d1f1a
URL: http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=54401df78c138e1dcf90b984978dd785416d1f1a
Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date: Sat May 2 14:33:01 2009 +0200
gstobject: add gst_object_ref_sink
Add the gst_object_ref_sink() method to match the glib one.
API: GstObject::gst_object_ref_sink()
---
docs/gst/gstreamer-sections.txt | 1 +
gst/gstobject.c | 33 +++++++++++++++++++++++++++++++++
gst/gstobject.h | 1 +
win32/common/libgstreamer.def | 1 +
4 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt
index eb28680..789ef4f 100644
--- a/docs/gst/gstreamer-sections.txt
+++ b/docs/gst/gstreamer-sections.txt
@@ -1214,6 +1214,7 @@ gst_object_save_thyself
gst_object_restore_thyself
gst_object_ref
gst_object_unref
+gst_object_ref_sink
gst_object_sink
gst_object_replace
gst_object_get_path_string
diff --git a/gst/gstobject.c b/gst/gstobject.c
index 701c3eb..ef0a86b 100644
--- a/gst/gstobject.c
+++ b/gst/gstobject.c
@@ -327,6 +327,39 @@ gst_object_unref (gpointer object)
}
/**
+ * gst_object_ref_sink:
+ * @object: a #GstObject to sink
+ *
+ * Increase the reference count of @object, and possibly remove the floating
+ * reference, if @object has a floating reference.
+ *
+ * In other words, if the object is floating, then this call "assumes ownership"
+ * of the floating reference, converting it to a normal reference by clearing
+ * the floating flag while leaving the reference count unchanged. If the object
+ * is not floating, then this call adds a new normal reference increasing the
+ * reference count by one.
+ *
+ * MT safe. This function grabs and releases @object lock.
+ *
+ * Since: 0.10.24
+ */
+void
+gst_object_ref_sink (gpointer object)
+{
+ g_return_if_fail (GST_IS_OBJECT (object));
+
+ GST_OBJECT_LOCK (object);
+ if (G_LIKELY (GST_OBJECT_IS_FLOATING (object))) {
+ GST_CAT_LOG_OBJECT (GST_CAT_REFCOUNTING, object, "unsetting floating flag");
+ GST_OBJECT_FLAG_UNSET (object, GST_OBJECT_FLOATING);
+ GST_OBJECT_UNLOCK (object);
+ } else {
+ GST_OBJECT_UNLOCK (object);
+ gst_object_ref (object);
+ }
+}
+
+/**
* gst_object_sink:
* @object: a #GstObject to sink
*
diff --git a/gst/gstobject.h b/gst/gstobject.h
index f49a727..5d7a50b 100644
--- a/gst/gstobject.h
+++ b/gst/gstobject.h
@@ -290,6 +290,7 @@ void gst_object_default_deep_notify (GObject *object, GstObject *ori
/* refcounting + life cycle */
gpointer gst_object_ref (gpointer object);
void gst_object_unref (gpointer object);
+void gst_object_ref_sink (gpointer object);
void gst_object_sink (gpointer object);
/* replace object pointer */
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index 0840222..339f2e6 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -511,6 +511,7 @@ EXPORTS
gst_object_get_type
gst_object_has_ancestor
gst_object_ref
+ gst_object_ref_sink
gst_object_replace
gst_object_restore_thyself
gst_object_save_thyself
More information about the Gstreamer-commits
mailing list