Index: gst/gstminiobject.c =================================================================== RCS file: /cvs/gstreamer/gstreamer/gst/gstminiobject.c,v retrieving revision 1.31 diff -u -p -a -u -p -r1.31 gstminiobject.c --- gst/gstminiobject.c 27 Jun 2007 11:43:04 -0000 1.31 +++ gst/gstminiobject.c 28 Nov 2007 09:42:07 -0000 @@ -183,9 +183,14 @@ gst_mini_object_copy (const GstMiniObjec { GstMiniObjectClass *mo_class; + g_return_val_if_fail (GST_IS_MINI_OBJECT (mini_object), NULL); + mo_class = GST_MINI_OBJECT_GET_CLASS (mini_object); - return mo_class->copy (mini_object); + if (mo_class->copy) + return mo_class->copy (mini_object); + else + return NULL; } /** @@ -204,6 +209,8 @@ gst_mini_object_copy (const GstMiniObjec gboolean gst_mini_object_is_writable (const GstMiniObject * mini_object) { + g_return_val_if_fail (GST_IS_MINI_OBJECT (mini_object), FALSE); + return (GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) == 1) && ((mini_object->flags & GST_MINI_OBJECT_FLAG_READONLY) == 0); } @@ -225,6 +232,8 @@ gst_mini_object_make_writable (GstMiniOb { GstMiniObject *ret; + g_return_val_if_fail (GST_IS_MINI_OBJECT (mini_object), NULL); + if (gst_mini_object_is_writable (mini_object)) { ret = (GstMiniObject *) mini_object; } else { @@ -253,14 +262,12 @@ gst_mini_object_make_writable (GstMiniOb GstMiniObject * gst_mini_object_ref (GstMiniObject * mini_object) { - g_return_val_if_fail (mini_object != NULL, NULL); + g_return_val_if_fail (GST_IS_MINI_OBJECT (mini_object), NULL); /* we cannot assert that the refcount > 0 since a bufferalloc * function might resurect an 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), @@ -278,7 +285,8 @@ gst_mini_object_free (GstMiniObject * mi GstMiniObjectClass *mo_class; mo_class = GST_MINI_OBJECT_GET_CLASS (mini_object); - mo_class->finalize (mini_object); + if (mo_class->finalize) + mo_class->finalize (mini_object); /* if the refcount is still 0 we can really free the * object, else the finalize method recycled the object */ @@ -300,11 +308,10 @@ gst_mini_object_free (GstMiniObject * mi void gst_mini_object_unref (GstMiniObject * mini_object) { - g_return_if_fail (mini_object != NULL); + g_return_if_fail (GST_IS_MINI_OBJECT (mini_object)); 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, @@ -331,6 +338,10 @@ gst_mini_object_replace (GstMiniObject * { GstMiniObject *olddata_val; + g_return_if_fail (olddata != NULL); + g_return_if_fail (*olddata == NULL || GST_IS_MINI_OBJECT (*olddata)); + g_return_if_fail (newdata == NULL || GST_IS_MINI_OBJECT (newdata)); + #ifdef DEBUG_REFCOUNT GST_CAT_LOG (GST_CAT_REFCOUNTING, "replace %p (%d) with %p (%d)", *olddata, *olddata ? (*olddata)->refcount : 0, @@ -505,14 +516,14 @@ param_mini_object_validate (GParamSpec * { GstParamSpecMiniObject *ospec = GST_PARAM_SPEC_MINI_OBJECT (pspec); GstMiniObject *mini_object = value->data[0].v_pointer; - guint changed = 0; + gboolean changed = FALSE; if (mini_object && !g_value_type_compatible (G_OBJECT_TYPE (mini_object), G_PARAM_SPEC_VALUE_TYPE (ospec))) { gst_mini_object_unref (mini_object); value->data[0].v_pointer = NULL; - changed++; + changed = TRUE; } return changed; @@ -546,6 +557,7 @@ gst_param_spec_mini_object_get_type (voi param_mini_object_validate, /* value_validate */ param_mini_object_values_cmp, /* values_cmp */ }; + /* FIXME 0.11: Should really be GstParamSpecMiniObject */ type = g_param_type_register_static ("GParamSpecMiniObject", &pspec_info); } @@ -578,3 +590,4 @@ gst_param_spec_mini_object (const char *