3 * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
5 * audiocheblimit.c: Unit test for the audiocheblimit element
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public License
9 * as published by the Free Software Foundation; either version 2.1 of
10 * the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24 #include <gst/base/gstbasetransform.h>
25 #include <gst/check/gstcheck.h>
29 /* For ease of programming we use globals to keep refs for our floating
30 * src and sink pads we create; otherwise we always have to do get_pad,
31 * get_peer, and then remove references in every test function */
32 GstPad *mysrcpad, *mysinkpad;
34 #define BUFFER_CAPS_STRING_32 \
35 "audio/x-raw-float, " \
36 "channels = (int) 1, " \
37 "rate = (int) 44100, " \
38 "endianness = (int) BYTE_ORDER, " \
41 #define BUFFER_CAPS_STRING_64 \
42 "audio/x-raw-float, " \
43 "channels = (int) 1, " \
44 "rate = (int) 44100, " \
45 "endianness = (int) BYTE_ORDER, " \
48 static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
51 GST_STATIC_CAPS ("audio/x-raw-float, "
52 "channels = (int) 1, "
53 "rate = (int) 44100, "
54 "endianness = (int) BYTE_ORDER, " "width = (int) { 32, 64 }")
56 static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
59 GST_STATIC_CAPS ("audio/x-raw-float, "
60 "channels = (int) 1, "
61 "rate = (int) 44100, "
62 "endianness = (int) BYTE_ORDER, " "width = (int) { 32, 64 }")
66 setup_audiocheblimit (void)
68 GstElement *audiocheblimit;
70 GST_DEBUG ("setup_audiocheblimit");
71 audiocheblimit = gst_check_setup_element ("audiocheblimit");
72 mysrcpad = gst_check_setup_src_pad (audiocheblimit, &srctemplate, NULL);
73 mysinkpad = gst_check_setup_sink_pad (audiocheblimit, &sinktemplate, NULL);
74 gst_pad_set_active (mysrcpad, TRUE);
75 gst_pad_set_active (mysinkpad, TRUE);
77 return audiocheblimit;
81 cleanup_audiocheblimit (GstElement * audiocheblimit)
83 GST_DEBUG ("cleanup_audiocheblimit");
85 g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
86 g_list_free (buffers);
89 gst_pad_set_active (mysrcpad, FALSE);
90 gst_pad_set_active (mysinkpad, FALSE);
91 gst_check_teardown_src_pad (audiocheblimit);
92 gst_check_teardown_sink_pad (audiocheblimit);
93 gst_check_teardown_element (audiocheblimit);
96 /* Test if data containing only one frequency component
97 * at 0 is preserved with lowpass mode and a cutoff
99 GST_START_TEST (test_type1_32_lp_0hz)
101 GstElement *audiocheblimit;
102 GstBuffer *inbuffer, *outbuffer;
104 gfloat *in, *res, rms;
107 audiocheblimit = setup_audiocheblimit ();
109 g_object_set (G_OBJECT (audiocheblimit), "mode", 0, NULL);
110 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
111 g_object_set (G_OBJECT (audiocheblimit), "type", 1, NULL);
112 g_object_set (G_OBJECT (audiocheblimit), "ripple", 0.25, NULL);
114 fail_unless (gst_element_set_state (audiocheblimit,
115 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
116 "could not set to playing");
118 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
119 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gfloat));
120 in = (gfloat *) GST_BUFFER_DATA (inbuffer);
121 for (i = 0; i < 128; i++)
124 caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
125 gst_buffer_set_caps (inbuffer, caps);
126 gst_caps_unref (caps);
127 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
129 /* pushing gives away my reference ... */
130 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
131 /* ... and puts a new buffer on the global list */
132 fail_unless_equals_int (g_list_length (buffers), 1);
133 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
135 res = (gfloat *) GST_BUFFER_DATA (outbuffer);
138 for (i = 0; i < 128; i++)
139 rms += res[i] * res[i];
140 rms = sqrt (rms / 128.0);
141 fail_unless (rms >= 0.9);
144 cleanup_audiocheblimit (audiocheblimit);
149 /* Test if data containing only one frequency component
150 * at rate/2 is erased with lowpass mode and a cutoff
152 GST_START_TEST (test_type1_32_lp_22050hz)
154 GstElement *audiocheblimit;
155 GstBuffer *inbuffer, *outbuffer;
157 gfloat *in, *res, rms;
160 audiocheblimit = setup_audiocheblimit ();
162 g_object_set (G_OBJECT (audiocheblimit), "mode", 0, NULL);
163 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
164 g_object_set (G_OBJECT (audiocheblimit), "type", 1, NULL);
165 g_object_set (G_OBJECT (audiocheblimit), "ripple", 0.25, NULL);
167 fail_unless (gst_element_set_state (audiocheblimit,
168 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
169 "could not set to playing");
171 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
172 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gfloat));
173 in = (gfloat *) GST_BUFFER_DATA (inbuffer);
174 for (i = 0; i < 128; i += 2) {
179 caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
180 gst_buffer_set_caps (inbuffer, caps);
181 gst_caps_unref (caps);
182 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
184 /* pushing gives away my reference ... */
185 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
186 /* ... and puts a new buffer on the global list */
187 fail_unless_equals_int (g_list_length (buffers), 1);
188 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
190 res = (gfloat *) GST_BUFFER_DATA (outbuffer);
193 for (i = 0; i < 128; i++)
194 rms += res[i] * res[i];
195 rms = sqrt (rms / 128.0);
196 fail_unless (rms <= 0.1);
199 cleanup_audiocheblimit (audiocheblimit);
204 /* Test if data containing only one frequency component
205 * at 0 is erased with highpass mode and a cutoff
207 GST_START_TEST (test_type1_32_hp_0hz)
209 GstElement *audiocheblimit;
210 GstBuffer *inbuffer, *outbuffer;
212 gfloat *in, *res, rms;
215 audiocheblimit = setup_audiocheblimit ();
216 /* Set to highpass */
217 g_object_set (G_OBJECT (audiocheblimit), "mode", 1, NULL);
218 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
219 g_object_set (G_OBJECT (audiocheblimit), "type", 1, NULL);
220 g_object_set (G_OBJECT (audiocheblimit), "ripple", 0.25, NULL);
222 fail_unless (gst_element_set_state (audiocheblimit,
223 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
224 "could not set to playing");
226 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
227 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gfloat));
228 in = (gfloat *) GST_BUFFER_DATA (inbuffer);
229 for (i = 0; i < 128; i++)
232 caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
233 gst_buffer_set_caps (inbuffer, caps);
234 gst_caps_unref (caps);
235 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
237 /* pushing gives away my reference ... */
238 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
239 /* ... and puts a new buffer on the global list */
240 fail_unless_equals_int (g_list_length (buffers), 1);
241 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
243 res = (gfloat *) GST_BUFFER_DATA (outbuffer);
246 for (i = 0; i < 128; i++)
247 rms += res[i] * res[i];
248 rms = sqrt (rms / 128.0);
249 fail_unless (rms <= 0.1);
252 cleanup_audiocheblimit (audiocheblimit);
257 /* Test if data containing only one frequency component
258 * at rate/2 is preserved with highpass mode and a cutoff
260 GST_START_TEST (test_type1_32_hp_22050hz)
262 GstElement *audiocheblimit;
263 GstBuffer *inbuffer, *outbuffer;
265 gfloat *in, *res, rms;
268 audiocheblimit = setup_audiocheblimit ();
269 /* Set to highpass */
270 g_object_set (G_OBJECT (audiocheblimit), "mode", 1, NULL);
271 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
272 g_object_set (G_OBJECT (audiocheblimit), "type", 1, NULL);
273 g_object_set (G_OBJECT (audiocheblimit), "ripple", 0.25, NULL);
275 fail_unless (gst_element_set_state (audiocheblimit,
276 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
277 "could not set to playing");
279 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
280 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gfloat));
281 in = (gfloat *) GST_BUFFER_DATA (inbuffer);
282 for (i = 0; i < 128; i += 2) {
287 caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
288 gst_buffer_set_caps (inbuffer, caps);
289 gst_caps_unref (caps);
290 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
292 /* pushing gives away my reference ... */
293 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
294 /* ... and puts a new buffer on the global list */
295 fail_unless_equals_int (g_list_length (buffers), 1);
296 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
298 res = (gfloat *) GST_BUFFER_DATA (outbuffer);
301 for (i = 0; i < 128; i++)
302 rms += res[i] * res[i];
303 rms = sqrt (rms / 128.0);
304 fail_unless (rms >= 0.9);
307 cleanup_audiocheblimit (audiocheblimit);
312 /* Test if data containing only one frequency component
313 * at 0 is preserved with lowpass mode and a cutoff
315 GST_START_TEST (test_type1_64_lp_0hz)
317 GstElement *audiocheblimit;
318 GstBuffer *inbuffer, *outbuffer;
320 gdouble *in, *res, rms;
323 audiocheblimit = setup_audiocheblimit ();
325 g_object_set (G_OBJECT (audiocheblimit), "mode", 0, NULL);
326 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
327 g_object_set (G_OBJECT (audiocheblimit), "type", 1, NULL);
328 g_object_set (G_OBJECT (audiocheblimit), "ripple", 0.25, NULL);
330 fail_unless (gst_element_set_state (audiocheblimit,
331 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
332 "could not set to playing");
334 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
335 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
336 in = (gdouble *) GST_BUFFER_DATA (inbuffer);
337 for (i = 0; i < 128; i++)
340 caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
341 gst_buffer_set_caps (inbuffer, caps);
342 gst_caps_unref (caps);
343 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
345 /* pushing gives away my reference ... */
346 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
347 /* ... and puts a new buffer on the global list */
348 fail_unless_equals_int (g_list_length (buffers), 1);
349 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
351 res = (gdouble *) GST_BUFFER_DATA (outbuffer);
354 for (i = 0; i < 128; i++)
355 rms += res[i] * res[i];
356 rms = sqrt (rms / 128.0);
357 fail_unless (rms >= 0.9);
360 cleanup_audiocheblimit (audiocheblimit);
365 /* Test if data containing only one frequency component
366 * at rate/2 is erased with lowpass mode and a cutoff
368 GST_START_TEST (test_type1_64_lp_22050hz)
370 GstElement *audiocheblimit;
371 GstBuffer *inbuffer, *outbuffer;
373 gdouble *in, *res, rms;
376 audiocheblimit = setup_audiocheblimit ();
378 g_object_set (G_OBJECT (audiocheblimit), "mode", 0, NULL);
379 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
380 g_object_set (G_OBJECT (audiocheblimit), "type", 1, NULL);
381 g_object_set (G_OBJECT (audiocheblimit), "ripple", 0.25, NULL);
383 fail_unless (gst_element_set_state (audiocheblimit,
384 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
385 "could not set to playing");
387 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
388 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
389 in = (gdouble *) GST_BUFFER_DATA (inbuffer);
390 for (i = 0; i < 128; i += 2) {
395 caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
396 gst_buffer_set_caps (inbuffer, caps);
397 gst_caps_unref (caps);
398 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
400 /* pushing gives away my reference ... */
401 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
402 /* ... and puts a new buffer on the global list */
403 fail_unless_equals_int (g_list_length (buffers), 1);
404 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
406 res = (gdouble *) GST_BUFFER_DATA (outbuffer);
409 for (i = 0; i < 128; i++)
410 rms += res[i] * res[i];
411 rms = sqrt (rms / 128.0);
412 fail_unless (rms <= 0.1);
415 cleanup_audiocheblimit (audiocheblimit);
420 /* Test if data containing only one frequency component
421 * at 0 is erased with highpass mode and a cutoff
423 GST_START_TEST (test_type1_64_hp_0hz)
425 GstElement *audiocheblimit;
426 GstBuffer *inbuffer, *outbuffer;
428 gdouble *in, *res, rms;
431 audiocheblimit = setup_audiocheblimit ();
432 /* Set to highpass */
433 g_object_set (G_OBJECT (audiocheblimit), "mode", 1, NULL);
434 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
435 g_object_set (G_OBJECT (audiocheblimit), "type", 1, NULL);
436 g_object_set (G_OBJECT (audiocheblimit), "ripple", 0.25, NULL);
438 fail_unless (gst_element_set_state (audiocheblimit,
439 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
440 "could not set to playing");
442 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
443 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
444 in = (gdouble *) GST_BUFFER_DATA (inbuffer);
445 for (i = 0; i < 128; i++)
448 caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
449 gst_buffer_set_caps (inbuffer, caps);
450 gst_caps_unref (caps);
451 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
453 /* pushing gives away my reference ... */
454 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
455 /* ... and puts a new buffer on the global list */
456 fail_unless_equals_int (g_list_length (buffers), 1);
457 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
459 res = (gdouble *) GST_BUFFER_DATA (outbuffer);
462 for (i = 0; i < 128; i++)
463 rms += res[i] * res[i];
464 rms = sqrt (rms / 128.0);
465 fail_unless (rms <= 0.1);
468 cleanup_audiocheblimit (audiocheblimit);
473 /* Test if data containing only one frequency component
474 * at rate/2 is preserved with highpass mode and a cutoff
476 GST_START_TEST (test_type1_64_hp_22050hz)
478 GstElement *audiocheblimit;
479 GstBuffer *inbuffer, *outbuffer;
481 gdouble *in, *res, rms;
484 audiocheblimit = setup_audiocheblimit ();
485 /* Set to highpass */
486 g_object_set (G_OBJECT (audiocheblimit), "mode", 1, NULL);
487 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
488 g_object_set (G_OBJECT (audiocheblimit), "type", 1, NULL);
489 g_object_set (G_OBJECT (audiocheblimit), "ripple", 0.25, NULL);
491 fail_unless (gst_element_set_state (audiocheblimit,
492 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
493 "could not set to playing");
495 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
496 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
497 in = (gdouble *) GST_BUFFER_DATA (inbuffer);
498 for (i = 0; i < 128; i += 2) {
503 caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
504 gst_buffer_set_caps (inbuffer, caps);
505 gst_caps_unref (caps);
506 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
508 /* pushing gives away my reference ... */
509 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
510 /* ... and puts a new buffer on the global list */
511 fail_unless_equals_int (g_list_length (buffers), 1);
512 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
514 res = (gdouble *) GST_BUFFER_DATA (outbuffer);
517 for (i = 0; i < 128; i++)
518 rms += res[i] * res[i];
519 rms = sqrt (rms / 128.0);
520 fail_unless (rms >= 0.9);
523 cleanup_audiocheblimit (audiocheblimit);
528 /* Test if data containing only one frequency component
529 * at 0 is preserved with lowpass mode and a cutoff
531 GST_START_TEST (test_type2_32_lp_0hz)
533 GstElement *audiocheblimit;
534 GstBuffer *inbuffer, *outbuffer;
536 gfloat *in, *res, rms;
539 audiocheblimit = setup_audiocheblimit ();
541 g_object_set (G_OBJECT (audiocheblimit), "mode", 0, NULL);
542 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
543 g_object_set (G_OBJECT (audiocheblimit), "type", 2, NULL);
544 g_object_set (G_OBJECT (audiocheblimit), "ripple", 40.0, NULL);
546 fail_unless (gst_element_set_state (audiocheblimit,
547 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
548 "could not set to playing");
550 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
551 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gfloat));
552 in = (gfloat *) GST_BUFFER_DATA (inbuffer);
553 for (i = 0; i < 128; i++)
556 caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
557 gst_buffer_set_caps (inbuffer, caps);
558 gst_caps_unref (caps);
559 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
561 /* pushing gives away my reference ... */
562 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
563 /* ... and puts a new buffer on the global list */
564 fail_unless_equals_int (g_list_length (buffers), 1);
565 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
567 res = (gfloat *) GST_BUFFER_DATA (outbuffer);
570 for (i = 0; i < 128; i++)
571 rms += res[i] * res[i];
572 rms = sqrt (rms / 128.0);
573 fail_unless (rms >= 0.9);
576 cleanup_audiocheblimit (audiocheblimit);
581 /* Test if data containing only one frequency component
582 * at rate/2 is erased with lowpass mode and a cutoff
584 GST_START_TEST (test_type2_32_lp_22050hz)
586 GstElement *audiocheblimit;
587 GstBuffer *inbuffer, *outbuffer;
589 gfloat *in, *res, rms;
592 audiocheblimit = setup_audiocheblimit ();
594 g_object_set (G_OBJECT (audiocheblimit), "mode", 0, NULL);
595 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
596 g_object_set (G_OBJECT (audiocheblimit), "type", 2, NULL);
597 g_object_set (G_OBJECT (audiocheblimit), "ripple", 40.0, NULL);
599 fail_unless (gst_element_set_state (audiocheblimit,
600 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
601 "could not set to playing");
603 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
604 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gfloat));
605 in = (gfloat *) GST_BUFFER_DATA (inbuffer);
606 for (i = 0; i < 128; i += 2) {
611 caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
612 gst_buffer_set_caps (inbuffer, caps);
613 gst_caps_unref (caps);
614 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
616 /* pushing gives away my reference ... */
617 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
618 /* ... and puts a new buffer on the global list */
619 fail_unless_equals_int (g_list_length (buffers), 1);
620 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
622 res = (gfloat *) GST_BUFFER_DATA (outbuffer);
625 for (i = 0; i < 128; i++)
626 rms += res[i] * res[i];
627 rms = sqrt (rms / 128.0);
628 fail_unless (rms <= 0.1);
631 cleanup_audiocheblimit (audiocheblimit);
636 /* Test if data containing only one frequency component
637 * at 0 is erased with highpass mode and a cutoff
639 GST_START_TEST (test_type2_32_hp_0hz)
641 GstElement *audiocheblimit;
642 GstBuffer *inbuffer, *outbuffer;
644 gfloat *in, *res, rms;
647 audiocheblimit = setup_audiocheblimit ();
648 /* Set to highpass */
649 g_object_set (G_OBJECT (audiocheblimit), "mode", 1, NULL);
650 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
651 g_object_set (G_OBJECT (audiocheblimit), "type", 2, NULL);
652 g_object_set (G_OBJECT (audiocheblimit), "ripple", 40.0, NULL);
654 fail_unless (gst_element_set_state (audiocheblimit,
655 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
656 "could not set to playing");
658 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
659 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gfloat));
660 in = (gfloat *) GST_BUFFER_DATA (inbuffer);
661 for (i = 0; i < 128; i++)
664 caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
665 gst_buffer_set_caps (inbuffer, caps);
666 gst_caps_unref (caps);
667 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
669 /* pushing gives away my reference ... */
670 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
671 /* ... and puts a new buffer on the global list */
672 fail_unless_equals_int (g_list_length (buffers), 1);
673 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
675 res = (gfloat *) GST_BUFFER_DATA (outbuffer);
678 for (i = 0; i < 128; i++)
679 rms += res[i] * res[i];
680 rms = sqrt (rms / 128.0);
681 fail_unless (rms <= 0.1);
684 cleanup_audiocheblimit (audiocheblimit);
689 /* Test if data containing only one frequency component
690 * at rate/2 is preserved with highpass mode and a cutoff
692 GST_START_TEST (test_type2_32_hp_22050hz)
694 GstElement *audiocheblimit;
695 GstBuffer *inbuffer, *outbuffer;
697 gfloat *in, *res, rms;
700 audiocheblimit = setup_audiocheblimit ();
701 /* Set to highpass */
702 g_object_set (G_OBJECT (audiocheblimit), "mode", 1, NULL);
703 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
704 g_object_set (G_OBJECT (audiocheblimit), "type", 2, NULL);
705 g_object_set (G_OBJECT (audiocheblimit), "ripple", 40.0, NULL);
707 fail_unless (gst_element_set_state (audiocheblimit,
708 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
709 "could not set to playing");
711 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
712 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gfloat));
713 in = (gfloat *) GST_BUFFER_DATA (inbuffer);
714 for (i = 0; i < 128; i += 2) {
719 caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
720 gst_buffer_set_caps (inbuffer, caps);
721 gst_caps_unref (caps);
722 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
724 /* pushing gives away my reference ... */
725 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
726 /* ... and puts a new buffer on the global list */
727 fail_unless_equals_int (g_list_length (buffers), 1);
728 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
730 res = (gfloat *) GST_BUFFER_DATA (outbuffer);
733 for (i = 0; i < 128; i++)
734 rms += res[i] * res[i];
735 rms = sqrt (rms / 128.0);
736 fail_unless (rms >= 0.9);
739 cleanup_audiocheblimit (audiocheblimit);
744 /* Test if data containing only one frequency component
745 * at 0 is preserved with lowpass mode and a cutoff
747 GST_START_TEST (test_type2_64_lp_0hz)
749 GstElement *audiocheblimit;
750 GstBuffer *inbuffer, *outbuffer;
752 gdouble *in, *res, rms;
755 audiocheblimit = setup_audiocheblimit ();
757 g_object_set (G_OBJECT (audiocheblimit), "mode", 0, NULL);
758 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
759 g_object_set (G_OBJECT (audiocheblimit), "type", 2, NULL);
760 g_object_set (G_OBJECT (audiocheblimit), "ripple", 40.0, NULL);
762 fail_unless (gst_element_set_state (audiocheblimit,
763 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
764 "could not set to playing");
766 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
767 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
768 in = (gdouble *) GST_BUFFER_DATA (inbuffer);
769 for (i = 0; i < 128; i++)
772 caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
773 gst_buffer_set_caps (inbuffer, caps);
774 gst_caps_unref (caps);
775 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
777 /* pushing gives away my reference ... */
778 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
779 /* ... and puts a new buffer on the global list */
780 fail_unless_equals_int (g_list_length (buffers), 1);
781 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
783 res = (gdouble *) GST_BUFFER_DATA (outbuffer);
786 for (i = 0; i < 128; i++)
787 rms += res[i] * res[i];
788 rms = sqrt (rms / 128.0);
789 fail_unless (rms >= 0.9);
792 cleanup_audiocheblimit (audiocheblimit);
797 /* Test if data containing only one frequency component
798 * at rate/2 is erased with lowpass mode and a cutoff
800 GST_START_TEST (test_type2_64_lp_22050hz)
802 GstElement *audiocheblimit;
803 GstBuffer *inbuffer, *outbuffer;
805 gdouble *in, *res, rms;
808 audiocheblimit = setup_audiocheblimit ();
810 g_object_set (G_OBJECT (audiocheblimit), "mode", 0, NULL);
811 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
812 g_object_set (G_OBJECT (audiocheblimit), "type", 2, NULL);
813 g_object_set (G_OBJECT (audiocheblimit), "ripple", 40.0, NULL);
815 fail_unless (gst_element_set_state (audiocheblimit,
816 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
817 "could not set to playing");
819 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
820 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
821 in = (gdouble *) GST_BUFFER_DATA (inbuffer);
822 for (i = 0; i < 128; i += 2) {
827 caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
828 gst_buffer_set_caps (inbuffer, caps);
829 gst_caps_unref (caps);
830 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
832 /* pushing gives away my reference ... */
833 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
834 /* ... and puts a new buffer on the global list */
835 fail_unless_equals_int (g_list_length (buffers), 1);
836 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
838 res = (gdouble *) GST_BUFFER_DATA (outbuffer);
841 for (i = 0; i < 128; i++)
842 rms += res[i] * res[i];
843 rms = sqrt (rms / 128.0);
844 fail_unless (rms <= 0.1);
847 cleanup_audiocheblimit (audiocheblimit);
852 /* Test if data containing only one frequency component
853 * at 0 is erased with highpass mode and a cutoff
855 GST_START_TEST (test_type2_64_hp_0hz)
857 GstElement *audiocheblimit;
858 GstBuffer *inbuffer, *outbuffer;
860 gdouble *in, *res, rms;
863 audiocheblimit = setup_audiocheblimit ();
864 /* Set to highpass */
865 g_object_set (G_OBJECT (audiocheblimit), "mode", 1, NULL);
866 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
867 g_object_set (G_OBJECT (audiocheblimit), "type", 2, NULL);
868 g_object_set (G_OBJECT (audiocheblimit), "ripple", 40.0, NULL);
870 fail_unless (gst_element_set_state (audiocheblimit,
871 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
872 "could not set to playing");
874 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
875 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
876 in = (gdouble *) GST_BUFFER_DATA (inbuffer);
877 for (i = 0; i < 128; i++)
880 caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
881 gst_buffer_set_caps (inbuffer, caps);
882 gst_caps_unref (caps);
883 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
885 /* pushing gives away my reference ... */
886 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
887 /* ... and puts a new buffer on the global list */
888 fail_unless_equals_int (g_list_length (buffers), 1);
889 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
891 res = (gdouble *) GST_BUFFER_DATA (outbuffer);
894 for (i = 0; i < 128; i++)
895 rms += res[i] * res[i];
896 rms = sqrt (rms / 128.0);
897 fail_unless (rms <= 0.1);
900 cleanup_audiocheblimit (audiocheblimit);
905 /* Test if data containing only one frequency component
906 * at rate/2 is preserved with highpass mode and a cutoff
908 GST_START_TEST (test_type2_64_hp_22050hz)
910 GstElement *audiocheblimit;
911 GstBuffer *inbuffer, *outbuffer;
913 gdouble *in, *res, rms;
916 audiocheblimit = setup_audiocheblimit ();
917 /* Set to highpass */
918 g_object_set (G_OBJECT (audiocheblimit), "mode", 1, NULL);
919 g_object_set (G_OBJECT (audiocheblimit), "poles", 8, NULL);
920 g_object_set (G_OBJECT (audiocheblimit), "type", 2, NULL);
921 g_object_set (G_OBJECT (audiocheblimit), "ripple", 40.0, NULL);
923 fail_unless (gst_element_set_state (audiocheblimit,
924 GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
925 "could not set to playing");
927 g_object_set (G_OBJECT (audiocheblimit), "cutoff", 44100 / 4.0, NULL);
928 inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
929 in = (gdouble *) GST_BUFFER_DATA (inbuffer);
930 for (i = 0; i < 128; i += 2) {
935 caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
936 gst_buffer_set_caps (inbuffer, caps);
937 gst_caps_unref (caps);
938 ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
940 /* pushing gives away my reference ... */
941 fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
942 /* ... and puts a new buffer on the global list */
943 fail_unless_equals_int (g_list_length (buffers), 1);
944 fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
946 res = (gdouble *) GST_BUFFER_DATA (outbuffer);
949 for (i = 0; i < 128; i++)
950 rms += res[i] * res[i];
951 rms = sqrt (rms / 128.0);
952 fail_unless (rms >= 0.9);
955 cleanup_audiocheblimit (audiocheblimit);
962 audiocheblimit_suite (void)
964 Suite *s = suite_create ("audiocheblimit");
965 TCase *tc_chain = tcase_create ("general");
967 suite_add_tcase (s, tc_chain);
968 tcase_add_test (tc_chain, test_type1_32_lp_0hz);
969 tcase_add_test (tc_chain, test_type1_32_lp_22050hz);
970 tcase_add_test (tc_chain, test_type1_32_hp_0hz);
971 tcase_add_test (tc_chain, test_type1_32_hp_22050hz);
972 tcase_add_test (tc_chain, test_type1_64_lp_0hz);
973 tcase_add_test (tc_chain, test_type1_64_lp_22050hz);
974 tcase_add_test (tc_chain, test_type1_64_hp_0hz);
975 tcase_add_test (tc_chain, test_type1_64_hp_22050hz);
976 tcase_add_test (tc_chain, test_type2_32_lp_0hz);
977 tcase_add_test (tc_chain, test_type2_32_lp_22050hz);
978 tcase_add_test (tc_chain, test_type2_32_hp_0hz);
979 tcase_add_test (tc_chain, test_type2_32_hp_22050hz);
980 tcase_add_test (tc_chain, test_type2_64_lp_0hz);
981 tcase_add_test (tc_chain, test_type2_64_lp_22050hz);
982 tcase_add_test (tc_chain, test_type2_64_hp_0hz);
983 tcase_add_test (tc_chain, test_type2_64_hp_22050hz);
988 main (int argc, char **argv)
992 Suite *s = audiocheblimit_suite ();
993 SRunner *sr = srunner_create (s);
995 gst_check_init (&argc, &argv);
997 srunner_run_all (sr, CK_NORMAL);
998 nf = srunner_ntests_failed (sr);