From: Wim Taymans Date: Sat, 2 May 2009 12:33:01 +0000 (+0200) Subject: gstobject: add gst_object_ref_sink X-Git-Tag: RELEASE-0.10.24~348 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=54401df78c138e1dcf90b984978dd785416d1f1a;p=platform%2Fupstream%2Fgstreamer.git gstobject: add gst_object_ref_sink Add the gst_object_ref_sink() method to match the glib one. API: GstObject::gst_object_ref_sink() --- 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