+2005-09-22 Andy Wingo <wingo@pobox.com>
+
+ * 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 <francis_labonte at hotmail dot com>
Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
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");
* 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;
}
/**
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");