From: Wim Taymans Date: Wed, 5 Aug 2009 11:46:42 +0000 (+0200) Subject: capsfilter: fix refcounting problem X-Git-Tag: RELEASE-0.10.25~148 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=04f3f096c36a97961d52dd9b2042c810e297215b;p=platform%2Fupstream%2Fgstreamer.git capsfilter: fix refcounting problem Make sure the metadata is writable before setting the caps on a buffer. --- diff --git a/plugins/elements/gstcapsfilter.c b/plugins/elements/gstcapsfilter.c index 1a02b84..9d7a81a 100644 --- a/plugins/elements/gstcapsfilter.c +++ b/plugins/elements/gstcapsfilter.c @@ -306,9 +306,15 @@ gst_capsfilter_prepare_buf (GstBaseTransform * trans, GstBuffer * input, /* FIXME : Move this behaviour to basetransform. The given caps are the ones * of the source pad, therefore our outgoing buffers should always have * those caps. */ - gst_buffer_set_caps (input, caps); - gst_buffer_ref (input); - *buf = input; + if (gst_buffer_is_metadata_writable (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 { /* Buffer has no caps. See if the output pad only supports fixed caps */ GstCaps *out_caps;