static gboolean data_probe (GstPad * pad, GstMiniObject * obj, gpointer data) { n_data_probes++; GST_DEBUG ("data probe %d", n_data_probes); g_assert (GST_IS_MINI_OBJECT (obj)); g_assert (data == SPECIAL_POINTER (0)); return TRUE; }
static gboolean data_probe_once (GstPad * pad, GstMiniObject * obj, guint * data) { n_data_probes_once++; g_assert (GST_IS_MINI_OBJECT (obj)); gst_pad_remove_data_probe (pad, *data); return TRUE; }
/** * gst_value_set_mini_object: * @value: a valid #GValue of %GST_TYPE_MINI_OBJECT derived type * @mini_object: mini object value to set * * Set the contents of a %GST_TYPE_MINI_OBJECT derived #GValue to * @mini_object. * The caller retains ownership of the reference. */ void gst_value_set_mini_object (GValue * value, GstMiniObject * mini_object) { gpointer *pointer_p; g_return_if_fail (GST_VALUE_HOLDS_MINI_OBJECT (value)); g_return_if_fail (mini_object == NULL || GST_IS_MINI_OBJECT (mini_object)); pointer_p = &value->data[0].v_pointer; gst_mini_object_replace ((GstMiniObject **) pointer_p, mini_object); }
static void my_foo_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstMiniObject *mini_obj; g_assert (prop_id == PROP_BUFFER); mini_obj = gst_value_get_mini_object (value); g_assert (GST_IS_MINI_OBJECT (mini_obj)); g_assert (GST_IS_BUFFER (mini_obj)); #if 0 /* gst_value_dup_mini_object() does not exist yet */ mini_obj = gst_value_dup_mini_object (value); g_assert (GST_IS_MINI_OBJECT (mini_obj)); g_assert (GST_IS_BUFFER (mini_obj)); gst_mini_object_unref (mini_obj); #endif }
/** * gst_value_take_mini_object: * @value: a valid #GValue of %GST_TYPE_MINI_OBJECT derived type * @mini_object: mini object value to take * * Set the contents of a %GST_TYPE_MINI_OBJECT derived #GValue to * @mini_object. * Takes over the ownership of the caller's reference to @mini_object; * the caller doesn't have to unref it any more. */ void gst_value_take_mini_object (GValue * value, GstMiniObject * mini_object) { gpointer *pointer_p; g_return_if_fail (GST_VALUE_HOLDS_MINI_OBJECT (value)); g_return_if_fail (mini_object == NULL || GST_IS_MINI_OBJECT (mini_object)); pointer_p = &value->data[0].v_pointer; /* takes additional refcount */ gst_mini_object_replace ((GstMiniObject **) pointer_p, mini_object); /* remove additional refcount */ if (mini_object) gst_mini_object_unref (mini_object); }
/** * gst_mini_object_unref: * @mini_object: the mini-object * * Decreases the reference count of the mini-object, possibly freeing * the mini-object. */ void gst_mini_object_unref (GstMiniObject * mini_object) { g_return_if_fail (mini_object != NULL); g_return_if_fail (mini_object->refcount > 0); #ifdef DEBUG_REFCOUNT g_return_if_fail (GST_IS_MINI_OBJECT (mini_object)); GST_CAT_LOG (GST_CAT_REFCOUNTING, "%p unref %d->%d", mini_object, GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object), GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) - 1); #endif if (G_UNLIKELY (g_atomic_int_dec_and_test (&mini_object->refcount))) { gst_mini_object_free (mini_object); } }
/** * gst_mini_object_ref: * @mini_object: the mini-object * * Increase the reference count of the mini-object. * * Note that the refcount affects the writeability * of @mini-object, see gst_mini_object_is_writable(). It is * important to note that keeping additional references to * GstMiniObject instances can potentially increase the number * of memcpy operations in a pipeline, especially if the miniobject * is a #GstBuffer. * * Returns: the mini-object. */ GstMiniObject * gst_mini_object_ref (GstMiniObject * mini_object) { g_return_val_if_fail (mini_object != NULL, NULL); /* we can't assert that the refcount > 0 since the _free functions * increments the refcount from 0 to 1 again to allow resurecting * the object g_return_val_if_fail (mini_object->refcount > 0, NULL); */ #ifdef DEBUG_REFCOUNT g_return_val_if_fail (GST_IS_MINI_OBJECT (mini_object), NULL); GST_CAT_LOG (GST_CAT_REFCOUNTING, "%p ref %d->%d", mini_object, GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object), GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) + 1); #endif g_atomic_int_inc (&mini_object->refcount); return mini_object; }