capsfilter: fix refcounting problem

Make sure the metadata is writable before setting the caps on a buffer.
This commit is contained in:
Wim Taymans 2009-08-05 13:46:42 +02:00
parent 6cf64beb79
commit 04f3f096c3

View file

@ -306,9 +306,15 @@ gst_capsfilter_prepare_buf (GstBaseTransform * trans, GstBuffer * input,
/* FIXME : Move this behaviour to basetransform. The given caps are the ones /* FIXME : Move this behaviour to basetransform. The given caps are the ones
* of the source pad, therefore our outgoing buffers should always have * of the source pad, therefore our outgoing buffers should always have
* those caps. */ * those caps. */
gst_buffer_set_caps (input, caps); if (gst_buffer_is_metadata_writable (input)) {
gst_buffer_ref (input); *buf = input;
*buf = input; gst_buffer_set_caps (*buf, caps);
gst_buffer_ref (input);
} else {
GST_DEBUG_OBJECT (trans, "Creating sub-buffer and setting caps");
*buf = gst_buffer_create_sub (input, 0, GST_BUFFER_SIZE (input));
gst_buffer_set_caps (*buf, caps);
}
} else { } else {
/* Buffer has no caps. See if the output pad only supports fixed caps */ /* Buffer has no caps. See if the output pad only supports fixed caps */
GstCaps *out_caps; GstCaps *out_caps;