From 6d8e6c9bb0ffd82a91daf4f7f851cfa5bdfacdaf Mon Sep 17 00:00:00 2001 From: Sebastian Dröge Date: Fri, 30 Mar 2007 04:50:11 +0000 Subject: ext/wavpack/: Don't play audioconvert. As wavpack wants/outputs all samples with width==32 and depth=[1,32] accept th... Original commit message from CVS: * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_reset), (gst_wavpack_dec_init), (gst_wavpack_dec_sink_set_caps), (gst_wavpack_dec_clip_outgoing_buffer), (gst_wavpack_dec_post_tags), (gst_wavpack_dec_chain): * ext/wavpack/gstwavpackdec.h: * ext/wavpack/gstwavpackenc.c: (gst_wavpack_enc_reset), (gst_wavpack_enc_sink_set_caps), (gst_wavpack_enc_set_wp_config), (gst_wavpack_enc_chain): * ext/wavpack/gstwavpackenc.h: * ext/wavpack/gstwavpackparse.c: Don't play audioconvert. As wavpack wants/outputs all samples with width==32 and depth=[1,32] accept this and let audioconvert convert to accepted formats instead of doing it in the element for n*8 depths. This also adds support for non-n*8 depths and prevents some useless memory allocations. Fixes #421598 Also add a workaround for bug #421542 in wavpackenc for now... * tests/check/elements/wavpackdec.c: (GST_START_TEST): * tests/check/elements/wavpackenc.c: (GST_START_TEST): * tests/check/elements/wavpackparse.c: (GST_START_TEST): Consider the change above in the unit tests and test if the correct caps are accepted and set. Also check for GST_BUFFER_OFFSET_END in the wavpackparse unit test. * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_init), (gst_wavpack_dec_sink_set_caps): Set caps on the src pad as soon as possible. * ext/wavpack/gstwavpackdec.h: * ext/wavpack/gstwavpackcommon.h: * ext/wavpack/gstwavpackenc.h: * ext/wavpack/gstwavpackparse.h: Fix indention. gst-indent is now called by cicl. --- tests/check/elements/wavpackdec.c | 16 +++++++++++----- tests/check/elements/wavpackenc.c | 19 ++++++++++++++----- tests/check/elements/wavpackparse.c | 8 +++++++- 3 files changed, 32 insertions(+), 11 deletions(-) (limited to 'tests') diff --git a/tests/check/elements/wavpackdec.c b/tests/check/elements/wavpackdec.c index b058a5e2..812944cf 100644 --- a/tests/check/elements/wavpackdec.c +++ b/tests/check/elements/wavpackdec.c @@ -51,7 +51,13 @@ guint8 test_frame[] = { static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS_ANY); + GST_STATIC_CAPS ("audio/x-raw-int, " + "width = (int) 32, " + "depth = (int) 16, " + "channels = (int) 1, " + "rate = (int) 44100, " + "endianness = (int) BYTE_ORDER, " "signed = (boolean) true") + ); static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, @@ -117,11 +123,11 @@ GST_START_TEST (test_decode_frame) outbuffer = GST_BUFFER (buffers->data); fail_if (outbuffer == NULL); - /* uncompressed data should be 51200 bytes */ - fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), 51200); + /* uncompressed data should be 102400 bytes */ + fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), 102400); - /* and all 51200 bytes must be 0, i.e. silence */ - for (i = 0; i < 51200; i++) + /* and all 102400 bytes must be 0, i.e. silence */ + for (i = 0; i < 102400; i++) fail_unless_equals_int (GST_BUFFER_DATA (outbuffer)[i], 0); ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); diff --git a/tests/check/elements/wavpackenc.c b/tests/check/elements/wavpackenc.c index 3ac3ea3f..a22d2ac8 100644 --- a/tests/check/elements/wavpackenc.c +++ b/tests/check/elements/wavpackenc.c @@ -31,7 +31,7 @@ static GstPad *mysrcpad, *mysinkpad; static GstBus *bus; #define RAW_CAPS_STRING "audio/x-raw-int, " \ - "width = (int) 16, " \ + "width = (int) 32, " \ "depth = (int) 16, " \ "channels = (int) 1, " \ "rate = (int) 44100, " \ @@ -47,11 +47,20 @@ static GstBus *bus; static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS_ANY); + GST_STATIC_CAPS ("audio/x-wavpack, " + "width = (int) 16, " + "channels = (int) 1, " + "rate = (int) 44100, " "framed = (boolean) true")); + static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS_ANY); + GST_STATIC_CAPS ("audio/x-raw-int, " + "width = (int) 32, " + "depth = (int) 16, " + "channels = (int) 1, " + "rate = (int) 44100, " + "endianness = (int) BYTE_ORDER, " "signed = (boolean) true")); GstElement * setup_wavpackenc () @@ -126,8 +135,8 @@ GST_START_TEST (test_encode_silence) fail_unless_equals_int (GST_BUFFER_TIMESTAMP (outbuffer), 0); fail_unless_equals_int (GST_BUFFER_OFFSET (outbuffer), 0); - fail_unless_equals_int (GST_BUFFER_DURATION (outbuffer), 11337868); - fail_unless_equals_int (GST_BUFFER_OFFSET_END (outbuffer), 500); + fail_unless_equals_int (GST_BUFFER_DURATION (outbuffer), 5668934); + fail_unless_equals_int (GST_BUFFER_OFFSET_END (outbuffer), 250); fail_unless (memcmp (GST_BUFFER_DATA (outbuffer), "wvpk", 4) == 0, "Failed to encode to valid Wavpack frames"); diff --git a/tests/check/elements/wavpackparse.c b/tests/check/elements/wavpackparse.c index 80cef399..7a3b8cc1 100644 --- a/tests/check/elements/wavpackparse.c +++ b/tests/check/elements/wavpackparse.c @@ -59,7 +59,11 @@ guint8 test_file[] = { static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS_ANY); + GST_STATIC_CAPS ("audio/x-wavpack, " + "width = (int) 16, " + "channels = (int) 1, " + "rate = (int) 44100, " "framed = (boolean) TRUE")); + static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, @@ -175,11 +179,13 @@ GST_START_TEST (test_parsing_valid_frames) case 0:{ fail_unless_equals_int (GST_BUFFER_TIMESTAMP (outbuffer), 0); fail_unless_equals_int (GST_BUFFER_OFFSET (outbuffer), 0); + fail_unless_equals_int (GST_BUFFER_OFFSET_END (outbuffer), 25600); break; } case 1:{ fail_unless_equals_int (GST_BUFFER_TIMESTAMP (outbuffer), 580498866); fail_unless_equals_int (GST_BUFFER_OFFSET (outbuffer), 25600); + fail_unless_equals_int (GST_BUFFER_OFFSET_END (outbuffer), 51200); break; } } -- cgit