From 683ed4dc0ca84428abd3c71687e8bdc11e27dce4 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Mon, 10 Apr 2006 15:48:55 +0000 Subject: ext/annodex/gstcmmlenc.c: Use copies of header buffers for caps to avoid circular refcounting problems (as in theorad... Original commit message from CVS: * ext/annodex/gstcmmlenc.c: (gst_cmml_enc_set_header_on_caps): Use copies of header buffers for caps to avoid circular refcounting problems (as in theoradec, vorbisdec). * tests/check/elements/cmmldec.c: (GST_START_TEST): Fix a typo in test that meant it was testing the wrong thing. * tests/check/elements/cmmlenc.c: (check_headers): Fix refcount checks now that we use buffer-copies for caps. --- ext/annodex/gstcmmlenc.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'ext') diff --git a/ext/annodex/gstcmmlenc.c b/ext/annodex/gstcmmlenc.c index fdbbd96d..3ec87f4f 100644 --- a/ext/annodex/gstcmmlenc.c +++ b/ext/annodex/gstcmmlenc.c @@ -315,6 +315,7 @@ gst_cmml_enc_set_header_on_caps (GstCmmlEnc * enc, GstCaps * caps, GValue array = { 0 }; GValue value = { 0 }; GstStructure *structure; + GstBuffer *buffer; caps = gst_caps_make_writable (caps); structure = gst_caps_get_structure (caps, 0); @@ -322,12 +323,21 @@ gst_cmml_enc_set_header_on_caps (GstCmmlEnc * enc, GstCaps * caps, g_value_init (&array, GST_TYPE_ARRAY); g_value_init (&value, GST_TYPE_BUFFER); - gst_value_set_buffer (&value, ident); + /* Make copies of header buffers to avoid circular references */ + buffer = gst_buffer_copy (ident); + gst_value_set_buffer (&value, buffer); gst_value_array_append_value (&array, &value); - gst_value_set_buffer (&value, preamble); + gst_buffer_unref (buffer); + + buffer = gst_buffer_copy (preamble); + gst_value_set_buffer (&value, buffer); gst_value_array_append_value (&array, &value); - gst_value_set_buffer (&value, head); + gst_buffer_unref (buffer); + + buffer = gst_buffer_copy (head); + gst_value_set_buffer (&value, buffer); gst_value_array_append_value (&array, &value); + gst_buffer_unref (buffer); GST_BUFFER_FLAG_SET (ident, GST_BUFFER_FLAG_IN_CAPS); GST_BUFFER_FLAG_SET (preamble, GST_BUFFER_FLAG_IN_CAPS); -- cgit