[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