diff --git a/ChangeLog b/ChangeLog index 5d05019855..e0a2c32c2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-09-22 Andy Wingo + + * gst/gstbuffer.c (gst_buffer_get_caps): Like all our _get + accessors returning refcounted objects, return a ref. + + * check/gst/gstbuffer.c (GST_START_TEST): Use refcount-idempotent + accessor for caps. IDEMPOTENCE. Oh yes. + 2005-09-21 Francis Labonte Reviewed by: Tim-Philipp Müller diff --git a/check/gst/gstbuffer.c b/check/gst/gstbuffer.c index 57912147f0..eee5e182fb 100644 --- a/check/gst/gstbuffer.c +++ b/check/gst/gstbuffer.c @@ -31,12 +31,12 @@ GST_START_TEST (test_caps) caps = gst_caps_from_string ("audio/x-raw-int"); ASSERT_CAPS_REFCOUNT (caps, "caps", 1); - fail_unless (gst_buffer_get_caps (buffer) == NULL); + fail_unless (GST_BUFFER_CAPS (buffer) == NULL); gst_buffer_set_caps (buffer, caps); ASSERT_CAPS_REFCOUNT (caps, "caps", 2); - fail_unless (gst_buffer_get_caps (buffer) == caps); + fail_unless (GST_BUFFER_CAPS (buffer) == caps); ASSERT_CAPS_REFCOUNT (caps, "caps", 2); caps2 = gst_caps_from_string ("audio/x-raw-float"); diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c index 34887df49a..ad7e73173a 100644 --- a/gst/gstbuffer.c +++ b/gst/gstbuffer.c @@ -274,21 +274,24 @@ gst_buffer_new_and_alloc (guint size) * is not media type attached to this buffer or when the media * type is the same as the previous received buffer. * - * This function does not increment the refcount of the caps. The - * caps pointer will therefore remain valid until the buffer is - * unreffed. - * - * Returns: the #GstCaps, or NULL if there was an error or there - * were no caps on this buffer. + * Returns: a reference to the #GstCaps, or NULL if there were no caps on this + * buffer. */ /* FIXME can we make this threadsafe without a lock on the buffer? * We can use compare and swap and atomic reads. */ GstCaps * gst_buffer_get_caps (GstBuffer * buffer) { + GstCaps *ret; + g_return_val_if_fail (buffer != NULL, NULL); - return GST_BUFFER_CAPS (buffer); + ret = GST_BUFFER_CAPS (buffer); + + if (ret) + gst_caps_ref (ret); + + return ret; } /** diff --git a/tests/check/gst/gstbuffer.c b/tests/check/gst/gstbuffer.c index 57912147f0..eee5e182fb 100644 --- a/tests/check/gst/gstbuffer.c +++ b/tests/check/gst/gstbuffer.c @@ -31,12 +31,12 @@ GST_START_TEST (test_caps) caps = gst_caps_from_string ("audio/x-raw-int"); ASSERT_CAPS_REFCOUNT (caps, "caps", 1); - fail_unless (gst_buffer_get_caps (buffer) == NULL); + fail_unless (GST_BUFFER_CAPS (buffer) == NULL); gst_buffer_set_caps (buffer, caps); ASSERT_CAPS_REFCOUNT (caps, "caps", 2); - fail_unless (gst_buffer_get_caps (buffer) == caps); + fail_unless (GST_BUFFER_CAPS (buffer) == caps); ASSERT_CAPS_REFCOUNT (caps, "caps", 2); caps2 = gst_caps_from_string ("audio/x-raw-float");