diff options
author | Michael Smith <msmith@xiph.org> | 2006-04-10 15:48:55 +0000 |
---|---|---|
committer | Michael Smith <msmith@xiph.org> | 2006-04-10 15:48:55 +0000 |
commit | 683ed4dc0ca84428abd3c71687e8bdc11e27dce4 (patch) | |
tree | fcdb7affca659b543d37b91d84d015bb98ebaef6 | |
parent | 2fb7648fbe7a94a12f846204faa705a428f5cf89 (diff) |
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.
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | ext/annodex/gstcmmlenc.c | 16 | ||||
-rw-r--r-- | tests/check/elements/cmmldec.c | 2 | ||||
-rw-r--r-- | tests/check/elements/cmmlenc.c | 6 |
4 files changed, 29 insertions, 7 deletions
@@ -1,3 +1,15 @@ +2006-04-10 Michael Smith <msmith@fluendo.com> + + * 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. + 2006-04-10 Tim-Philipp Müller <tim at centricular dot net> * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init), 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); diff --git a/tests/check/elements/cmmldec.c b/tests/check/elements/cmmldec.c index 57219576..0b87a3ff 100644 --- a/tests/check/elements/cmmldec.c +++ b/tests/check/elements/cmmldec.c @@ -312,7 +312,7 @@ GST_START_TEST (test_tags) fail_unless (tag_val != NULL); tag = g_value_get_object (tag_val); - fail_unless (tags != NULL); + fail_unless (tag != NULL); g_object_get (tag, "title", &title, "base-uri", &base, "meta", &meta, NULL); fail_unless_equals_string ("The Research Hunter", title); diff --git a/tests/check/elements/cmmlenc.c b/tests/check/elements/cmmlenc.c index ca664805..b3ed4f0a 100644 --- a/tests/check/elements/cmmlenc.c +++ b/tests/check/elements/cmmlenc.c @@ -220,15 +220,15 @@ check_headers () fail_unless_equals_int (g_list_length (current_buf), 3); /* check the ident header */ - check_output_buffer_is_equal ("cmml-ident-buffer", IDENT_HEADER, 2); + check_output_buffer_is_equal ("cmml-ident-buffer", IDENT_HEADER, 1); /* check the cmml processing instruction */ current_buf = current_buf->next; - check_output_buffer_is_equal ("cmml-preamble-buffer", PREAMBLE_ENCODED, 2); + check_output_buffer_is_equal ("cmml-preamble-buffer", PREAMBLE_ENCODED, 1); /* check the encoded head tag */ current_buf = current_buf->next; - check_output_buffer_is_equal ("head-tag-buffer", HEAD_TAG_ENCODED, 2); + check_output_buffer_is_equal ("head-tag-buffer", HEAD_TAG_ENCODED, 1); } static void |