"Fossies" - the Fresh Open Source Software Archive

Member "gst-plugins-good-1.20.3/tests/check/elements/audiochebband.c" (15 Jun 2022, 54192 Bytes) of package /linux/misc/gst-plugins-good-1.20.3.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "audiochebband.c" see the Fossies "Dox" file reference documentation.

    1 /* GStreamer
    2  *
    3  * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
    4  *
    5  * audiochebband.c: Unit test for the audiochebband element
    6  *
    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.
   11  * 
   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.
   16  * 
   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
   20  * 02110-1301 USA
   21  */
   22 
   23 #include <gst/gst.h>
   24 #include <gst/base/gstbasetransform.h>
   25 #include <gst/audio/audio.h>
   26 #include <gst/check/gstcheck.h>
   27 
   28 #include <math.h>
   29 
   30 /* For ease of programming we use globals to keep refs for our floating
   31  * src and sink pads we create; otherwise we always have to do get_pad,
   32  * get_peer, and then remove references in every test function */
   33 GstPad *mysrcpad, *mysinkpad;
   34 
   35 #define BUFFER_CAPS_STRING_32           \
   36     "audio/x-raw, "                     \
   37     "channels = (int) 1, "              \
   38     "rate = (int) 44100, "              \
   39     "layout = (string) interleaved, "   \
   40     "format = (string) " GST_AUDIO_NE(F32)
   41 
   42 #define BUFFER_CAPS_STRING_64           \
   43     "audio/x-raw, "                     \
   44     "channels = (int) 1, "              \
   45     "rate = (int) 44100, "              \
   46     "layout = (string) interleaved, "   \
   47     "format = (string) " GST_AUDIO_NE(F64)
   48 
   49 static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
   50     GST_PAD_SINK,
   51     GST_PAD_ALWAYS,
   52     GST_STATIC_CAPS ("audio/x-raw, "
   53         "channels = (int) 1, "
   54         "rate = (int) 44100, "
   55         "layout = (string) interleaved, "
   56         "format = (string) { "
   57         GST_AUDIO_NE (F32) ", " GST_AUDIO_NE (F64) " }"));
   58 static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
   59     GST_PAD_SRC,
   60     GST_PAD_ALWAYS,
   61     GST_STATIC_CAPS ("audio/x-raw, "
   62         "channels = (int) 1, "
   63         "rate = (int) 44100, "
   64         "layout = (string) interleaved, "
   65         "format = (string) { "
   66         GST_AUDIO_NE (F32) ", " GST_AUDIO_NE (F64) " }"));
   67 
   68 static GstElement *
   69 setup_audiochebband (void)
   70 {
   71   GstElement *audiochebband;
   72 
   73   GST_DEBUG ("setup_audiochebband");
   74   audiochebband = gst_check_setup_element ("audiochebband");
   75   mysrcpad = gst_check_setup_src_pad (audiochebband, &srctemplate);
   76   mysinkpad = gst_check_setup_sink_pad (audiochebband, &sinktemplate);
   77   gst_pad_set_active (mysrcpad, TRUE);
   78   gst_pad_set_active (mysinkpad, TRUE);
   79 
   80   return audiochebband;
   81 }
   82 
   83 static void
   84 cleanup_audiochebband (GstElement * audiochebband)
   85 {
   86   GST_DEBUG ("cleanup_audiochebband");
   87 
   88   g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
   89   g_list_free (buffers);
   90   buffers = NULL;
   91 
   92   gst_pad_set_active (mysrcpad, FALSE);
   93   gst_pad_set_active (mysinkpad, FALSE);
   94   gst_check_teardown_src_pad (audiochebband);
   95   gst_check_teardown_sink_pad (audiochebband);
   96   gst_check_teardown_element (audiochebband);
   97 }
   98 
   99 /* Test if data containing only one frequency component
  100  * at 0 is erased with bandpass mode and a 
  101  * 2000Hz frequency band around rate/4 */
  102 GST_START_TEST (test_type1_32_bp_0hz)
  103 {
  104   GstElement *audiochebband;
  105   GstBuffer *inbuffer, *outbuffer;
  106   GstCaps *caps;
  107   gfloat *in, *res, rms;
  108   gint i;
  109   GstMapInfo map;
  110 
  111   audiochebband = setup_audiochebband ();
  112   /* Set to bandpass */
  113   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
  114   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  115   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  116   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  117 
  118   fail_unless (gst_element_set_state (audiochebband,
  119           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  120       "could not set to playing");
  121 
  122   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  123       44100 / 4.0 - 1000, NULL);
  124   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  125       44100 / 4.0 + 1000, NULL);
  126   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
  127   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  128   in = (gfloat *) map.data;
  129   for (i = 0; i < 1024; i++)
  130     in[i] = 1.0;
  131   gst_buffer_unmap (inbuffer, &map);
  132 
  133   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
  134   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  135   gst_caps_unref (caps);
  136   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  137 
  138   /* pushing gives away my reference ... */
  139   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  140   /* ... and puts a new buffer on the global list */
  141   fail_unless_equals_int (g_list_length (buffers), 1);
  142   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  143 
  144   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  145   res = (gfloat *) map.data;
  146 
  147   rms = 0.0;
  148   for (i = 0; i < 1024; i++)
  149     rms += res[i] * res[i];
  150   rms = sqrt (rms / 1024.0);
  151   fail_unless (rms <= 0.1);
  152 
  153   gst_buffer_unmap (outbuffer, &map);
  154 
  155   /* cleanup */
  156   cleanup_audiochebband (audiochebband);
  157 }
  158 
  159 GST_END_TEST;
  160 
  161 /* Test if data containing only one frequency component
  162  * at band center is preserved with bandpass mode and a 
  163  * 2000Hz frequency band around rate/4 */
  164 GST_START_TEST (test_type1_32_bp_11025hz)
  165 {
  166   GstElement *audiochebband;
  167   GstBuffer *inbuffer, *outbuffer;
  168   GstCaps *caps;
  169   gfloat *in, *res, rms;
  170   gint i;
  171   GstMapInfo map;
  172 
  173   audiochebband = setup_audiochebband ();
  174   /* Set to bandpass */
  175   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
  176   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  177   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  178   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  179 
  180   fail_unless (gst_element_set_state (audiochebband,
  181           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  182       "could not set to playing");
  183 
  184   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  185       44100 / 4.0 - 1000, NULL);
  186   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  187       44100 / 4.0 + 1000, NULL);
  188   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
  189   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  190   in = (gfloat *) map.data;
  191   for (i = 0; i < 1024; i += 4) {
  192     in[i] = 0.0;
  193     in[i + 1] = 1.0;
  194     in[i + 2] = 0.0;
  195     in[i + 3] = -1.0;
  196   }
  197   gst_buffer_unmap (inbuffer, &map);
  198 
  199   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
  200   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  201   gst_caps_unref (caps);
  202   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  203 
  204   /* pushing gives away my reference ... */
  205   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  206   /* ... and puts a new buffer on the global list */
  207   fail_unless_equals_int (g_list_length (buffers), 1);
  208   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  209 
  210   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  211   res = (gfloat *) map.data;
  212 
  213   rms = 0.0;
  214   for (i = 0; i < 1024; i++)
  215     rms += res[i] * res[i];
  216   rms = sqrt (rms / 1024.0);
  217   fail_unless (rms >= 0.6);
  218 
  219   gst_buffer_unmap (outbuffer, &map);
  220 
  221   /* cleanup */
  222   cleanup_audiochebband (audiochebband);
  223 }
  224 
  225 GST_END_TEST;
  226 
  227 /* Test if data containing only one frequency component
  228  * at rate/2 is erased with bandpass mode and a 
  229  * 2000Hz frequency band around rate/4 */
  230 GST_START_TEST (test_type1_32_bp_22050hz)
  231 {
  232   GstElement *audiochebband;
  233   GstBuffer *inbuffer, *outbuffer;
  234   GstCaps *caps;
  235   gfloat *in, *res, rms;
  236   gint i;
  237   GstMapInfo map;
  238 
  239   audiochebband = setup_audiochebband ();
  240   /* Set to bandpass */
  241   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
  242   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  243   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  244   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  245 
  246   fail_unless (gst_element_set_state (audiochebband,
  247           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  248       "could not set to playing");
  249 
  250   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  251       44100 / 4.0 - 1000, NULL);
  252   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  253       44100 / 4.0 + 1000, NULL);
  254   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
  255   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  256   in = (gfloat *) map.data;
  257   for (i = 0; i < 1024; i += 2) {
  258     in[i] = 1.0;
  259     in[i + 1] = -1.0;
  260   }
  261   gst_buffer_unmap (inbuffer, &map);
  262 
  263   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
  264   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  265   gst_caps_unref (caps);
  266   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  267 
  268   /* pushing gives away my reference ... */
  269   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  270   /* ... and puts a new buffer on the global list */
  271   fail_unless_equals_int (g_list_length (buffers), 1);
  272   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  273 
  274   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  275   res = (gfloat *) map.data;
  276 
  277   rms = 0.0;
  278   for (i = 0; i < 1024; i++)
  279     rms += res[i] * res[i];
  280   rms = sqrt (rms / 1024.0);
  281   fail_unless (rms <= 0.1);
  282 
  283   gst_buffer_unmap (outbuffer, &map);
  284 
  285   /* cleanup */
  286   cleanup_audiochebband (audiochebband);
  287 }
  288 
  289 GST_END_TEST;
  290 
  291 /* Test if data containing only one frequency component
  292  * at 0 is preserved with bandreject mode and a 
  293  * 2000Hz frequency band around rate/4 */
  294 GST_START_TEST (test_type1_32_br_0hz)
  295 {
  296   GstElement *audiochebband;
  297   GstBuffer *inbuffer, *outbuffer;
  298   GstCaps *caps;
  299   gfloat *in, *res, rms;
  300   gint i;
  301   GstMapInfo map;
  302 
  303   audiochebband = setup_audiochebband ();
  304   /* Set to bandreject */
  305   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
  306   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  307   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  308   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  309 
  310   fail_unless (gst_element_set_state (audiochebband,
  311           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  312       "could not set to playing");
  313 
  314   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  315       44100 / 4.0 - 1000, NULL);
  316   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  317       44100 / 4.0 + 1000, NULL);
  318   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
  319   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  320   in = (gfloat *) map.data;
  321   for (i = 0; i < 1024; i++)
  322     in[i] = 1.0;
  323   gst_buffer_unmap (inbuffer, &map);
  324 
  325   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
  326   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  327   gst_caps_unref (caps);
  328   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  329 
  330   /* pushing gives away my reference ... */
  331   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  332   /* ... and puts a new buffer on the global list */
  333   fail_unless_equals_int (g_list_length (buffers), 1);
  334   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  335 
  336   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  337   res = (gfloat *) map.data;
  338 
  339   rms = 0.0;
  340   for (i = 0; i < 1024; i++)
  341     rms += res[i] * res[i];
  342   rms = sqrt (rms / 1024.0);
  343   fail_unless (rms >= 0.9);
  344 
  345   gst_buffer_unmap (outbuffer, &map);
  346 
  347   /* cleanup */
  348   cleanup_audiochebband (audiochebband);
  349 }
  350 
  351 GST_END_TEST;
  352 
  353 /* Test if data containing only one frequency component
  354  * at band center is erased with bandreject mode and a 
  355  * 2000Hz frequency band around rate/4 */
  356 GST_START_TEST (test_type1_32_br_11025hz)
  357 {
  358   GstElement *audiochebband;
  359   GstBuffer *inbuffer, *outbuffer;
  360   GstCaps *caps;
  361   gfloat *in, *res, rms;
  362   gint i;
  363   GstMapInfo map;
  364 
  365   audiochebband = setup_audiochebband ();
  366   /* Set to bandreject */
  367   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
  368   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  369   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  370   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  371 
  372   fail_unless (gst_element_set_state (audiochebband,
  373           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  374       "could not set to playing");
  375 
  376   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  377       44100 / 4.0 - 1000, NULL);
  378   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  379       44100 / 4.0 + 1000, NULL);
  380   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
  381   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  382   in = (gfloat *) map.data;
  383   for (i = 0; i < 1024; i += 4) {
  384     in[i] = 0.0;
  385     in[i + 1] = 1.0;
  386     in[i + 2] = 0.0;
  387     in[i + 3] = -1.0;
  388   }
  389   gst_buffer_unmap (inbuffer, &map);
  390 
  391   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
  392   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  393   gst_caps_unref (caps);
  394   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  395 
  396   /* pushing gives away my reference ... */
  397   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  398   /* ... and puts a new buffer on the global list */
  399   fail_unless_equals_int (g_list_length (buffers), 1);
  400   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  401 
  402   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  403   res = (gfloat *) map.data;
  404 
  405   rms = 0.0;
  406   for (i = 0; i < 1024; i++)
  407     rms += res[i] * res[i];
  408   rms = sqrt (rms / 1024.0);
  409   fail_unless (rms <= 0.1);
  410 
  411   gst_buffer_unmap (outbuffer, &map);
  412 
  413   /* cleanup */
  414   cleanup_audiochebband (audiochebband);
  415 }
  416 
  417 GST_END_TEST;
  418 
  419 /* Test if data containing only one frequency component
  420  * at rate/2 is preserved with bandreject mode and a 
  421  * 2000Hz frequency band around rate/4 */
  422 GST_START_TEST (test_type1_32_br_22050hz)
  423 {
  424   GstElement *audiochebband;
  425   GstBuffer *inbuffer, *outbuffer;
  426   GstCaps *caps;
  427   gfloat *in, *res, rms;
  428   gint i;
  429   GstMapInfo map;
  430 
  431   audiochebband = setup_audiochebband ();
  432   /* Set to bandreject */
  433   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
  434   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  435   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  436   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  437 
  438   fail_unless (gst_element_set_state (audiochebband,
  439           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  440       "could not set to playing");
  441 
  442   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  443       44100 / 4.0 - 1000, NULL);
  444   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  445       44100 / 4.0 + 1000, NULL);
  446   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
  447   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  448   in = (gfloat *) map.data;
  449   for (i = 0; i < 1024; i += 2) {
  450     in[i] = 1.0;
  451     in[i + 1] = -1.0;
  452   }
  453   gst_buffer_unmap (inbuffer, &map);
  454 
  455   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
  456   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  457   gst_caps_unref (caps);
  458   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  459 
  460   /* pushing gives away my reference ... */
  461   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  462   /* ... and puts a new buffer on the global list */
  463   fail_unless_equals_int (g_list_length (buffers), 1);
  464   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  465 
  466   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  467   res = (gfloat *) map.data;
  468 
  469   rms = 0.0;
  470   for (i = 0; i < 1024; i++)
  471     rms += res[i] * res[i];
  472   rms = sqrt (rms / 1024.0);
  473   fail_unless (rms >= 0.9);
  474 
  475   gst_buffer_unmap (outbuffer, &map);
  476 
  477   /* cleanup */
  478   cleanup_audiochebband (audiochebband);
  479 }
  480 
  481 GST_END_TEST;
  482 
  483 /* Test if data containing only one frequency component
  484  * at 0 is erased with bandpass mode and a 
  485  * 2000Hz frequency band around rate/4 */
  486 GST_START_TEST (test_type1_64_bp_0hz)
  487 {
  488   GstElement *audiochebband;
  489   GstBuffer *inbuffer, *outbuffer;
  490   GstCaps *caps;
  491   gdouble *in, *res, rms;
  492   gint i;
  493   GstMapInfo map;
  494 
  495   audiochebband = setup_audiochebband ();
  496   /* Set to bandpass */
  497   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
  498   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  499   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  500   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  501 
  502   fail_unless (gst_element_set_state (audiochebband,
  503           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  504       "could not set to playing");
  505 
  506   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  507       44100 / 4.0 - 1000, NULL);
  508   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  509       44100 / 4.0 + 1000, NULL);
  510   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
  511   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  512   in = (gdouble *) map.data;
  513   for (i = 0; i < 1024; i++)
  514     in[i] = 1.0;
  515   gst_buffer_unmap (inbuffer, &map);
  516 
  517   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
  518   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  519   gst_caps_unref (caps);
  520   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  521 
  522   /* pushing gives away my reference ... */
  523   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  524   /* ... and puts a new buffer on the global list */
  525   fail_unless_equals_int (g_list_length (buffers), 1);
  526   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  527 
  528   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  529   res = (gdouble *) map.data;
  530 
  531   rms = 0.0;
  532   for (i = 0; i < 1024; i++)
  533     rms += res[i] * res[i];
  534   rms = sqrt (rms / 1024.0);
  535   fail_unless (rms <= 0.1);
  536 
  537   gst_buffer_unmap (outbuffer, &map);
  538 
  539   /* cleanup */
  540   cleanup_audiochebband (audiochebband);
  541 }
  542 
  543 GST_END_TEST;
  544 
  545 /* Test if data containing only one frequency component
  546  * at band center is preserved with bandpass mode and a 
  547  * 2000Hz frequency band around rate/4 */
  548 GST_START_TEST (test_type1_64_bp_11025hz)
  549 {
  550   GstElement *audiochebband;
  551   GstBuffer *inbuffer, *outbuffer;
  552   GstCaps *caps;
  553   gdouble *in, *res, rms;
  554   gint i;
  555   GstMapInfo map;
  556 
  557   audiochebband = setup_audiochebband ();
  558   /* Set to bandpass */
  559   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
  560   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  561   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  562   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  563 
  564   fail_unless (gst_element_set_state (audiochebband,
  565           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  566       "could not set to playing");
  567 
  568   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  569       44100 / 4.0 - 1000, NULL);
  570   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  571       44100 / 4.0 + 1000, NULL);
  572   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
  573   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  574   in = (gdouble *) map.data;
  575   for (i = 0; i < 1024; i += 4) {
  576     in[i] = 0.0;
  577     in[i + 1] = 1.0;
  578     in[i + 2] = 0.0;
  579     in[i + 3] = -1.0;
  580   }
  581   gst_buffer_unmap (inbuffer, &map);
  582 
  583   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
  584   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  585   gst_caps_unref (caps);
  586   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  587 
  588   /* pushing gives away my reference ... */
  589   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  590   /* ... and puts a new buffer on the global list */
  591   fail_unless_equals_int (g_list_length (buffers), 1);
  592   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  593 
  594   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  595   res = (gdouble *) map.data;
  596 
  597   rms = 0.0;
  598   for (i = 0; i < 1024; i++)
  599     rms += res[i] * res[i];
  600   rms = sqrt (rms / 1024.0);
  601   fail_unless (rms >= 0.6);
  602 
  603   gst_buffer_unmap (outbuffer, &map);
  604 
  605   /* cleanup */
  606   cleanup_audiochebband (audiochebband);
  607 }
  608 
  609 GST_END_TEST;
  610 
  611 /* Test if data containing only one frequency component
  612  * at rate/2 is erased with bandpass mode and a 
  613  * 2000Hz frequency band around rate/4 */
  614 GST_START_TEST (test_type1_64_bp_22050hz)
  615 {
  616   GstElement *audiochebband;
  617   GstBuffer *inbuffer, *outbuffer;
  618   GstCaps *caps;
  619   gdouble *in, *res, rms;
  620   gint i;
  621   GstMapInfo map;
  622 
  623   audiochebband = setup_audiochebband ();
  624   /* Set to bandpass */
  625   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
  626   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  627   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  628   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  629 
  630   fail_unless (gst_element_set_state (audiochebband,
  631           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  632       "could not set to playing");
  633 
  634   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  635       44100 / 4.0 - 1000, NULL);
  636   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  637       44100 / 4.0 + 1000, NULL);
  638   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
  639   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  640   in = (gdouble *) map.data;
  641   for (i = 0; i < 1024; i += 2) {
  642     in[i] = 1.0;
  643     in[i + 1] = -1.0;
  644   }
  645   gst_buffer_unmap (inbuffer, &map);
  646 
  647   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
  648   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  649   gst_caps_unref (caps);
  650   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  651 
  652   /* pushing gives away my reference ... */
  653   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  654   /* ... and puts a new buffer on the global list */
  655   fail_unless_equals_int (g_list_length (buffers), 1);
  656   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  657 
  658   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  659   res = (gdouble *) map.data;
  660 
  661   rms = 0.0;
  662   for (i = 0; i < 1024; i++)
  663     rms += res[i] * res[i];
  664   rms = sqrt (rms / 1024.0);
  665   fail_unless (rms <= 0.1);
  666 
  667   gst_buffer_unmap (outbuffer, &map);
  668 
  669   /* cleanup */
  670   cleanup_audiochebband (audiochebband);
  671 }
  672 
  673 GST_END_TEST;
  674 
  675 /* Test if data containing only one frequency component
  676  * at 0 is preserved with bandreject mode and a 
  677  * 2000Hz frequency band around rate/4 */
  678 GST_START_TEST (test_type1_64_br_0hz)
  679 {
  680   GstElement *audiochebband;
  681   GstBuffer *inbuffer, *outbuffer;
  682   GstCaps *caps;
  683   gdouble *in, *res, rms;
  684   gint i;
  685   GstMapInfo map;
  686 
  687   audiochebband = setup_audiochebband ();
  688   /* Set to bandreject */
  689   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
  690   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  691   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  692   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  693 
  694   fail_unless (gst_element_set_state (audiochebband,
  695           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  696       "could not set to playing");
  697 
  698   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  699       44100 / 4.0 - 1000, NULL);
  700   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  701       44100 / 4.0 + 1000, NULL);
  702   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
  703   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  704   in = (gdouble *) map.data;
  705   for (i = 0; i < 1024; i++)
  706     in[i] = 1.0;
  707   gst_buffer_unmap (inbuffer, &map);
  708 
  709   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
  710   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  711   gst_caps_unref (caps);
  712   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  713 
  714   /* pushing gives away my reference ... */
  715   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  716   /* ... and puts a new buffer on the global list */
  717   fail_unless_equals_int (g_list_length (buffers), 1);
  718   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  719 
  720   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  721   res = (gdouble *) map.data;
  722 
  723   rms = 0.0;
  724   for (i = 0; i < 1024; i++)
  725     rms += res[i] * res[i];
  726   rms = sqrt (rms / 1024.0);
  727   fail_unless (rms >= 0.9);
  728 
  729   gst_buffer_unmap (outbuffer, &map);
  730 
  731   /* cleanup */
  732   cleanup_audiochebband (audiochebband);
  733 }
  734 
  735 GST_END_TEST;
  736 
  737 /* Test if data containing only one frequency component
  738  * at band center is erased with bandreject mode and a 
  739  * 2000Hz frequency band around rate/4 */
  740 GST_START_TEST (test_type1_64_br_11025hz)
  741 {
  742   GstElement *audiochebband;
  743   GstBuffer *inbuffer, *outbuffer;
  744   GstCaps *caps;
  745   gdouble *in, *res, rms;
  746   gint i;
  747   GstMapInfo map;
  748 
  749   audiochebband = setup_audiochebband ();
  750   /* Set to bandreject */
  751   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
  752   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  753   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  754   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  755 
  756   fail_unless (gst_element_set_state (audiochebband,
  757           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  758       "could not set to playing");
  759 
  760   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  761       44100 / 4.0 - 1000, NULL);
  762   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  763       44100 / 4.0 + 1000, NULL);
  764   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
  765   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  766   in = (gdouble *) map.data;
  767   for (i = 0; i < 1024; i += 4) {
  768     in[i] = 0.0;
  769     in[i + 1] = 1.0;
  770     in[i + 2] = 0.0;
  771     in[i + 3] = -1.0;
  772   }
  773   gst_buffer_unmap (inbuffer, &map);
  774 
  775   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
  776   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  777   gst_caps_unref (caps);
  778   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  779 
  780   /* pushing gives away my reference ... */
  781   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  782   /* ... and puts a new buffer on the global list */
  783   fail_unless_equals_int (g_list_length (buffers), 1);
  784   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  785 
  786   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  787   res = (gdouble *) map.data;
  788 
  789   rms = 0.0;
  790   for (i = 0; i < 1024; i++)
  791     rms += res[i] * res[i];
  792   rms = sqrt (rms / 1024.0);
  793   fail_unless (rms <= 0.1);
  794 
  795   gst_buffer_unmap (outbuffer, &map);
  796 
  797   /* cleanup */
  798   cleanup_audiochebband (audiochebband);
  799 }
  800 
  801 GST_END_TEST;
  802 
  803 /* Test if data containing only one frequency component
  804  * at rate/2 is preserved with bandreject mode and a 
  805  * 2000Hz frequency band around rate/4 */
  806 GST_START_TEST (test_type1_64_br_22050hz)
  807 {
  808   GstElement *audiochebband;
  809   GstBuffer *inbuffer, *outbuffer;
  810   GstCaps *caps;
  811   gdouble *in, *res, rms;
  812   gint i;
  813   GstMapInfo map;
  814 
  815   audiochebband = setup_audiochebband ();
  816   /* Set to bandreject */
  817   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
  818   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  819   g_object_set (G_OBJECT (audiochebband), "type", 1, NULL);
  820   g_object_set (G_OBJECT (audiochebband), "ripple", 0.25, NULL);
  821 
  822   fail_unless (gst_element_set_state (audiochebband,
  823           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  824       "could not set to playing");
  825 
  826   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  827       44100 / 4.0 - 1000, NULL);
  828   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  829       44100 / 4.0 + 1000, NULL);
  830   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
  831   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  832   in = (gdouble *) map.data;
  833   for (i = 0; i < 1024; i += 2) {
  834     in[i] = 1.0;
  835     in[i + 1] = -1.0;
  836   }
  837   gst_buffer_unmap (inbuffer, &map);
  838 
  839   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
  840   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  841   gst_caps_unref (caps);
  842   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  843 
  844   /* pushing gives away my reference ... */
  845   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  846   /* ... and puts a new buffer on the global list */
  847   fail_unless_equals_int (g_list_length (buffers), 1);
  848   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  849 
  850   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  851   res = (gdouble *) map.data;
  852 
  853   rms = 0.0;
  854   for (i = 0; i < 1024; i++)
  855     rms += res[i] * res[i];
  856   rms = sqrt (rms / 1024.0);
  857   fail_unless (rms >= 0.9);
  858 
  859   gst_buffer_unmap (outbuffer, &map);
  860 
  861   /* cleanup */
  862   cleanup_audiochebband (audiochebband);
  863 }
  864 
  865 GST_END_TEST;
  866 
  867 /* Test if data containing only one frequency component
  868  * at 0 is erased with bandpass mode and a 
  869  * 2000Hz frequency band around rate/4 */
  870 GST_START_TEST (test_type2_32_bp_0hz)
  871 {
  872   GstElement *audiochebband;
  873   GstBuffer *inbuffer, *outbuffer;
  874   GstCaps *caps;
  875   gfloat *in, *res, rms;
  876   gint i;
  877   GstMapInfo map;
  878 
  879   audiochebband = setup_audiochebband ();
  880   /* Set to bandpass */
  881   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
  882   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  883   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
  884   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
  885 
  886   fail_unless (gst_element_set_state (audiochebband,
  887           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  888       "could not set to playing");
  889 
  890   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  891       44100 / 4.0 - 1000, NULL);
  892   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  893       44100 / 4.0 + 1000, NULL);
  894   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
  895   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  896   in = (gfloat *) map.data;
  897   for (i = 0; i < 1024; i++)
  898     in[i] = 1.0;
  899   gst_buffer_unmap (inbuffer, &map);
  900 
  901   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
  902   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  903   gst_caps_unref (caps);
  904   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  905 
  906   /* pushing gives away my reference ... */
  907   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  908   /* ... and puts a new buffer on the global list */
  909   fail_unless_equals_int (g_list_length (buffers), 1);
  910   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  911 
  912   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  913   res = (gfloat *) map.data;
  914 
  915   rms = 0.0;
  916   for (i = 0; i < 1024; i++)
  917     rms += res[i] * res[i];
  918   rms = sqrt (rms / 1024.0);
  919   fail_unless (rms <= 0.1);
  920 
  921   gst_buffer_unmap (outbuffer, &map);
  922 
  923   /* cleanup */
  924   cleanup_audiochebband (audiochebband);
  925 }
  926 
  927 GST_END_TEST;
  928 
  929 /* Test if data containing only one frequency component
  930  * at band center is preserved with bandpass mode and a 
  931  * 2000Hz frequency band around rate/4 */
  932 GST_START_TEST (test_type2_32_bp_11025hz)
  933 {
  934   GstElement *audiochebband;
  935   GstBuffer *inbuffer, *outbuffer;
  936   GstCaps *caps;
  937   gfloat *in, *res, rms;
  938   gint i;
  939   GstMapInfo map;
  940 
  941   audiochebband = setup_audiochebband ();
  942   /* Set to bandpass */
  943   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
  944   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
  945   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
  946   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
  947 
  948   fail_unless (gst_element_set_state (audiochebband,
  949           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
  950       "could not set to playing");
  951 
  952   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
  953       44100 / 4.0 - 1000, NULL);
  954   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
  955       44100 / 4.0 + 1000, NULL);
  956   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
  957   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
  958   in = (gfloat *) map.data;
  959   for (i = 0; i < 1024; i += 4) {
  960     in[i] = 0.0;
  961     in[i + 1] = 1.0;
  962     in[i + 2] = 0.0;
  963     in[i + 3] = -1.0;
  964   }
  965   gst_buffer_unmap (inbuffer, &map);
  966 
  967   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
  968   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
  969   gst_caps_unref (caps);
  970   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
  971 
  972   /* pushing gives away my reference ... */
  973   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
  974   /* ... and puts a new buffer on the global list */
  975   fail_unless_equals_int (g_list_length (buffers), 1);
  976   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
  977 
  978   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
  979   res = (gfloat *) map.data;
  980 
  981   rms = 0.0;
  982   for (i = 0; i < 1024; i++)
  983     rms += res[i] * res[i];
  984   rms = sqrt (rms / 1024.0);
  985   fail_unless (rms >= 0.6);
  986 
  987   gst_buffer_unmap (outbuffer, &map);
  988 
  989   /* cleanup */
  990   cleanup_audiochebband (audiochebband);
  991 }
  992 
  993 GST_END_TEST;
  994 
  995 /* Test if data containing only one frequency component
  996  * at rate/2 is erased with bandpass mode and a 
  997  * 2000Hz frequency band around rate/4 */
  998 GST_START_TEST (test_type2_32_bp_22050hz)
  999 {
 1000   GstElement *audiochebband;
 1001   GstBuffer *inbuffer, *outbuffer;
 1002   GstCaps *caps;
 1003   gfloat *in, *res, rms;
 1004   gint i;
 1005   GstMapInfo map;
 1006 
 1007   audiochebband = setup_audiochebband ();
 1008   /* Set to bandpass */
 1009   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
 1010   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1011   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1012   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1013 
 1014   fail_unless (gst_element_set_state (audiochebband,
 1015           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1016       "could not set to playing");
 1017 
 1018   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1019       44100 / 4.0 - 1000, NULL);
 1020   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1021       44100 / 4.0 + 1000, NULL);
 1022   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
 1023   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1024   in = (gfloat *) map.data;
 1025   for (i = 0; i < 1024; i += 2) {
 1026     in[i] = 1.0;
 1027     in[i + 1] = -1.0;
 1028   }
 1029   gst_buffer_unmap (inbuffer, &map);
 1030 
 1031   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
 1032   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1033   gst_caps_unref (caps);
 1034   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1035 
 1036   /* pushing gives away my reference ... */
 1037   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1038   /* ... and puts a new buffer on the global list */
 1039   fail_unless_equals_int (g_list_length (buffers), 1);
 1040   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1041 
 1042   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1043   res = (gfloat *) map.data;
 1044 
 1045   rms = 0.0;
 1046   for (i = 0; i < 1024; i++)
 1047     rms += res[i] * res[i];
 1048   rms = sqrt (rms / 1024.0);
 1049   fail_unless (rms <= 0.1);
 1050 
 1051   gst_buffer_unmap (outbuffer, &map);
 1052 
 1053   /* cleanup */
 1054   cleanup_audiochebband (audiochebband);
 1055 }
 1056 
 1057 GST_END_TEST;
 1058 
 1059 /* Test if data containing only one frequency component
 1060  * at 0 is preserved with bandreject mode and a 
 1061  * 2000Hz frequency band around rate/4 */
 1062 GST_START_TEST (test_type2_32_br_0hz)
 1063 {
 1064   GstElement *audiochebband;
 1065   GstBuffer *inbuffer, *outbuffer;
 1066   GstCaps *caps;
 1067   gfloat *in, *res, rms;
 1068   gint i;
 1069   GstMapInfo map;
 1070 
 1071   audiochebband = setup_audiochebband ();
 1072   /* Set to bandreject */
 1073   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
 1074   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1075   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1076   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1077 
 1078   fail_unless (gst_element_set_state (audiochebband,
 1079           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1080       "could not set to playing");
 1081 
 1082   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1083       44100 / 4.0 - 1000, NULL);
 1084   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1085       44100 / 4.0 + 1000, NULL);
 1086   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
 1087   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1088   in = (gfloat *) map.data;
 1089   for (i = 0; i < 1024; i++)
 1090     in[i] = 1.0;
 1091   gst_buffer_unmap (inbuffer, &map);
 1092 
 1093   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
 1094   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1095   gst_caps_unref (caps);
 1096   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1097 
 1098   /* pushing gives away my reference ... */
 1099   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1100   /* ... and puts a new buffer on the global list */
 1101   fail_unless_equals_int (g_list_length (buffers), 1);
 1102   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1103 
 1104   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1105   res = (gfloat *) map.data;
 1106 
 1107   rms = 0.0;
 1108   for (i = 0; i < 1024; i++)
 1109     rms += res[i] * res[i];
 1110   rms = sqrt (rms / 1024.0);
 1111   fail_unless (rms >= 0.9);
 1112 
 1113   gst_buffer_unmap (outbuffer, &map);
 1114 
 1115   /* cleanup */
 1116   cleanup_audiochebband (audiochebband);
 1117 }
 1118 
 1119 GST_END_TEST;
 1120 
 1121 /* Test if data containing only one frequency component
 1122  * at band center is erased with bandreject mode and a 
 1123  * 2000Hz frequency band around rate/4 */
 1124 GST_START_TEST (test_type2_32_br_11025hz)
 1125 {
 1126   GstElement *audiochebband;
 1127   GstBuffer *inbuffer, *outbuffer;
 1128   GstCaps *caps;
 1129   gfloat *in, *res, rms;
 1130   gint i;
 1131   GstMapInfo map;
 1132 
 1133   audiochebband = setup_audiochebband ();
 1134   /* Set to bandreject */
 1135   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
 1136   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1137   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1138   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1139 
 1140   fail_unless (gst_element_set_state (audiochebband,
 1141           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1142       "could not set to playing");
 1143 
 1144   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1145       44100 / 4.0 - 1000, NULL);
 1146   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1147       44100 / 4.0 + 1000, NULL);
 1148   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
 1149   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1150   in = (gfloat *) map.data;
 1151   for (i = 0; i < 1024; i += 4) {
 1152     in[i] = 0.0;
 1153     in[i + 1] = 1.0;
 1154     in[i + 2] = 0.0;
 1155     in[i + 3] = -1.0;
 1156   }
 1157   gst_buffer_unmap (inbuffer, &map);
 1158 
 1159   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
 1160   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1161   gst_caps_unref (caps);
 1162   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1163 
 1164   /* pushing gives away my reference ... */
 1165   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1166   /* ... and puts a new buffer on the global list */
 1167   fail_unless_equals_int (g_list_length (buffers), 1);
 1168   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1169 
 1170   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1171   res = (gfloat *) map.data;
 1172 
 1173   rms = 0.0;
 1174   for (i = 0; i < 1024; i++)
 1175     rms += res[i] * res[i];
 1176   rms = sqrt (rms / 1024.0);
 1177   fail_unless (rms <= 0.1);
 1178 
 1179   gst_buffer_unmap (outbuffer, &map);
 1180 
 1181   /* cleanup */
 1182   cleanup_audiochebband (audiochebband);
 1183 }
 1184 
 1185 GST_END_TEST;
 1186 
 1187 /* Test if data containing only one frequency component
 1188  * at rate/2 is preserved with bandreject mode and a 
 1189  * 2000Hz frequency band around rate/4 */
 1190 GST_START_TEST (test_type2_32_br_22050hz)
 1191 {
 1192   GstElement *audiochebband;
 1193   GstBuffer *inbuffer, *outbuffer;
 1194   GstCaps *caps;
 1195   gfloat *in, *res, rms;
 1196   gint i;
 1197   GstMapInfo map;
 1198 
 1199   audiochebband = setup_audiochebband ();
 1200   /* Set to bandreject */
 1201   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
 1202   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1203   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1204   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1205 
 1206   fail_unless (gst_element_set_state (audiochebband,
 1207           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1208       "could not set to playing");
 1209 
 1210   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1211       44100 / 4.0 - 1000, NULL);
 1212   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1213       44100 / 4.0 + 1000, NULL);
 1214   inbuffer = gst_buffer_new_allocate (NULL, 1024 * sizeof (gfloat), NULL);
 1215   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1216   in = (gfloat *) map.data;
 1217   for (i = 0; i < 1024; i += 2) {
 1218     in[i] = 1.0;
 1219     in[i + 1] = -1.0;
 1220   }
 1221   gst_buffer_unmap (inbuffer, &map);
 1222 
 1223   caps = gst_caps_from_string (BUFFER_CAPS_STRING_32);
 1224   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1225   gst_caps_unref (caps);
 1226   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1227 
 1228   /* pushing gives away my reference ... */
 1229   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1230   /* ... and puts a new buffer on the global list */
 1231   fail_unless_equals_int (g_list_length (buffers), 1);
 1232   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1233 
 1234   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1235   res = (gfloat *) map.data;
 1236 
 1237   rms = 0.0;
 1238   for (i = 0; i < 1024; i++)
 1239     rms += res[i] * res[i];
 1240   rms = sqrt (rms / 1024.0);
 1241   fail_unless (rms >= 0.9);
 1242 
 1243   gst_buffer_unmap (outbuffer, &map);
 1244 
 1245   /* cleanup */
 1246   cleanup_audiochebband (audiochebband);
 1247 }
 1248 
 1249 GST_END_TEST;
 1250 
 1251 /* Test if data containing only one frequency component
 1252  * at 0 is erased with bandpass mode and a 
 1253  * 2000Hz frequency band around rate/4 */
 1254 GST_START_TEST (test_type2_64_bp_0hz)
 1255 {
 1256   GstElement *audiochebband;
 1257   GstBuffer *inbuffer, *outbuffer;
 1258   GstCaps *caps;
 1259   gdouble *in, *res, rms;
 1260   gint i;
 1261   GstMapInfo map;
 1262 
 1263   audiochebband = setup_audiochebband ();
 1264   /* Set to bandpass */
 1265   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
 1266   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1267   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1268   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1269 
 1270   fail_unless (gst_element_set_state (audiochebband,
 1271           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1272       "could not set to playing");
 1273 
 1274   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1275       44100 / 4.0 - 1000, NULL);
 1276   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1277       44100 / 4.0 + 1000, NULL);
 1278   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
 1279   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1280   in = (gdouble *) map.data;
 1281   for (i = 0; i < 1024; i++)
 1282     in[i] = 1.0;
 1283   gst_buffer_unmap (inbuffer, &map);
 1284 
 1285   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
 1286   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1287   gst_caps_unref (caps);
 1288   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1289 
 1290   /* pushing gives away my reference ... */
 1291   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1292   /* ... and puts a new buffer on the global list */
 1293   fail_unless_equals_int (g_list_length (buffers), 1);
 1294   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1295 
 1296   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1297   res = (gdouble *) map.data;
 1298 
 1299   rms = 0.0;
 1300   for (i = 0; i < 1024; i++)
 1301     rms += res[i] * res[i];
 1302   rms = sqrt (rms / 1024.0);
 1303   fail_unless (rms <= 0.1);
 1304 
 1305   gst_buffer_unmap (outbuffer, &map);
 1306 
 1307   /* cleanup */
 1308   cleanup_audiochebband (audiochebband);
 1309 }
 1310 
 1311 GST_END_TEST;
 1312 
 1313 /* Test if data containing only one frequency component
 1314  * at band center is preserved with bandpass mode and a 
 1315  * 2000Hz frequency band around rate/4 */
 1316 GST_START_TEST (test_type2_64_bp_11025hz)
 1317 {
 1318   GstElement *audiochebband;
 1319   GstBuffer *inbuffer, *outbuffer;
 1320   GstCaps *caps;
 1321   gdouble *in, *res, rms;
 1322   gint i;
 1323   GstMapInfo map;
 1324 
 1325   audiochebband = setup_audiochebband ();
 1326   /* Set to bandpass */
 1327   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
 1328   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1329   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1330   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1331 
 1332   fail_unless (gst_element_set_state (audiochebband,
 1333           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1334       "could not set to playing");
 1335 
 1336   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1337       44100 / 4.0 - 1000, NULL);
 1338   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1339       44100 / 4.0 + 1000, NULL);
 1340   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
 1341   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1342   in = (gdouble *) map.data;
 1343   for (i = 0; i < 1024; i += 4) {
 1344     in[i] = 0.0;
 1345     in[i + 1] = 1.0;
 1346     in[i + 2] = 0.0;
 1347     in[i + 3] = -1.0;
 1348   }
 1349   gst_buffer_unmap (inbuffer, &map);
 1350 
 1351   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
 1352   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1353   gst_caps_unref (caps);
 1354   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1355 
 1356   /* pushing gives away my reference ... */
 1357   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1358   /* ... and puts a new buffer on the global list */
 1359   fail_unless_equals_int (g_list_length (buffers), 1);
 1360   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1361 
 1362   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1363   res = (gdouble *) map.data;
 1364 
 1365   rms = 0.0;
 1366   for (i = 0; i < 1024; i++)
 1367     rms += res[i] * res[i];
 1368   rms = sqrt (rms / 1024.0);
 1369   fail_unless (rms >= 0.6);
 1370 
 1371   gst_buffer_unmap (outbuffer, &map);
 1372 
 1373   /* cleanup */
 1374   cleanup_audiochebband (audiochebband);
 1375 }
 1376 
 1377 GST_END_TEST;
 1378 
 1379 /* Test if data containing only one frequency component
 1380  * at rate/2 is erased with bandpass mode and a 
 1381  * 2000Hz frequency band around rate/4 */
 1382 GST_START_TEST (test_type2_64_bp_22050hz)
 1383 {
 1384   GstElement *audiochebband;
 1385   GstBuffer *inbuffer, *outbuffer;
 1386   GstCaps *caps;
 1387   gdouble *in, *res, rms;
 1388   gint i;
 1389   GstMapInfo map;
 1390 
 1391   audiochebband = setup_audiochebband ();
 1392   /* Set to bandpass */
 1393   g_object_set (G_OBJECT (audiochebband), "mode", 0, NULL);
 1394   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1395   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1396   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1397 
 1398   fail_unless (gst_element_set_state (audiochebband,
 1399           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1400       "could not set to playing");
 1401 
 1402   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1403       44100 / 4.0 - 1000, NULL);
 1404   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1405       44100 / 4.0 + 1000, NULL);
 1406   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
 1407   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1408   in = (gdouble *) map.data;
 1409   for (i = 0; i < 1024; i += 2) {
 1410     in[i] = 1.0;
 1411     in[i + 1] = -1.0;
 1412   }
 1413   gst_buffer_unmap (inbuffer, &map);
 1414 
 1415   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
 1416   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1417   gst_caps_unref (caps);
 1418   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1419 
 1420   /* pushing gives away my reference ... */
 1421   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1422   /* ... and puts a new buffer on the global list */
 1423   fail_unless_equals_int (g_list_length (buffers), 1);
 1424   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1425 
 1426   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1427   res = (gdouble *) map.data;
 1428 
 1429   rms = 0.0;
 1430   for (i = 0; i < 1024; i++)
 1431     rms += res[i] * res[i];
 1432   rms = sqrt (rms / 1024.0);
 1433   fail_unless (rms <= 0.1);
 1434 
 1435   gst_buffer_unmap (outbuffer, &map);
 1436 
 1437   /* cleanup */
 1438   cleanup_audiochebband (audiochebband);
 1439 }
 1440 
 1441 GST_END_TEST;
 1442 
 1443 /* Test if data containing only one frequency component
 1444  * at 0 is preserved with bandreject mode and a 
 1445  * 2000Hz frequency band around rate/4 */
 1446 GST_START_TEST (test_type2_64_br_0hz)
 1447 {
 1448   GstElement *audiochebband;
 1449   GstBuffer *inbuffer, *outbuffer;
 1450   GstCaps *caps;
 1451   gdouble *in, *res, rms;
 1452   gint i;
 1453   GstMapInfo map;
 1454 
 1455   audiochebband = setup_audiochebband ();
 1456   /* Set to bandreject */
 1457   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
 1458   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1459   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1460   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1461 
 1462   fail_unless (gst_element_set_state (audiochebband,
 1463           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1464       "could not set to playing");
 1465 
 1466   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1467       44100 / 4.0 - 1000, NULL);
 1468   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1469       44100 / 4.0 + 1000, NULL);
 1470   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
 1471   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1472   in = (gdouble *) map.data;
 1473   for (i = 0; i < 1024; i++)
 1474     in[i] = 1.0;
 1475   gst_buffer_unmap (inbuffer, &map);
 1476 
 1477   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
 1478   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1479   gst_caps_unref (caps);
 1480   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1481 
 1482   /* pushing gives away my reference ... */
 1483   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1484   /* ... and puts a new buffer on the global list */
 1485   fail_unless_equals_int (g_list_length (buffers), 1);
 1486   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1487 
 1488   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1489   res = (gdouble *) map.data;
 1490 
 1491   rms = 0.0;
 1492   for (i = 0; i < 1024; i++)
 1493     rms += res[i] * res[i];
 1494   rms = sqrt (rms / 1024.0);
 1495   fail_unless (rms >= 0.9);
 1496 
 1497   gst_buffer_unmap (outbuffer, &map);
 1498 
 1499   /* cleanup */
 1500   cleanup_audiochebband (audiochebband);
 1501 }
 1502 
 1503 GST_END_TEST;
 1504 
 1505 /* Test if data containing only one frequency component
 1506  * at band center is erased with bandreject mode and a 
 1507  * 2000Hz frequency band around rate/4 */
 1508 GST_START_TEST (test_type2_64_br_11025hz)
 1509 {
 1510   GstElement *audiochebband;
 1511   GstBuffer *inbuffer, *outbuffer;
 1512   GstCaps *caps;
 1513   gdouble *in, *res, rms;
 1514   gint i;
 1515   GstMapInfo map;
 1516 
 1517   audiochebband = setup_audiochebband ();
 1518   /* Set to bandreject */
 1519   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
 1520   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1521   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1522   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1523 
 1524   fail_unless (gst_element_set_state (audiochebband,
 1525           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1526       "could not set to playing");
 1527 
 1528   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1529       44100 / 4.0 - 1000, NULL);
 1530   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1531       44100 / 4.0 + 1000, NULL);
 1532   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
 1533   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1534   in = (gdouble *) map.data;
 1535   for (i = 0; i < 1024; i += 4) {
 1536     in[i] = 0.0;
 1537     in[i + 1] = 1.0;
 1538     in[i + 2] = 0.0;
 1539     in[i + 3] = -1.0;
 1540   }
 1541   gst_buffer_unmap (inbuffer, &map);
 1542 
 1543   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
 1544   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1545   gst_caps_unref (caps);
 1546   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1547 
 1548   /* pushing gives away my reference ... */
 1549   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1550   /* ... and puts a new buffer on the global list */
 1551   fail_unless_equals_int (g_list_length (buffers), 1);
 1552   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1553 
 1554   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1555   res = (gdouble *) map.data;
 1556 
 1557   rms = 0.0;
 1558   for (i = 0; i < 1024; i++)
 1559     rms += res[i] * res[i];
 1560   rms = sqrt (rms / 1024.0);
 1561   fail_unless (rms <= 0.1);
 1562 
 1563   gst_buffer_unmap (outbuffer, &map);
 1564 
 1565   /* cleanup */
 1566   cleanup_audiochebband (audiochebband);
 1567 }
 1568 
 1569 GST_END_TEST;
 1570 
 1571 /* Test if data containing only one frequency component
 1572  * at rate/2 is preserved with bandreject mode and a 
 1573  * 2000Hz frequency band around rate/4 */
 1574 GST_START_TEST (test_type2_64_br_22050hz)
 1575 {
 1576   GstElement *audiochebband;
 1577   GstBuffer *inbuffer, *outbuffer;
 1578   GstCaps *caps;
 1579   gdouble *in, *res, rms;
 1580   gint i;
 1581   GstMapInfo map;
 1582 
 1583   audiochebband = setup_audiochebband ();
 1584   /* Set to bandreject */
 1585   g_object_set (G_OBJECT (audiochebband), "mode", 1, NULL);
 1586   g_object_set (G_OBJECT (audiochebband), "poles", 8, NULL);
 1587   g_object_set (G_OBJECT (audiochebband), "type", 2, NULL);
 1588   g_object_set (G_OBJECT (audiochebband), "ripple", 40.0, NULL);
 1589 
 1590   fail_unless (gst_element_set_state (audiochebband,
 1591           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
 1592       "could not set to playing");
 1593 
 1594   g_object_set (G_OBJECT (audiochebband), "lower-frequency",
 1595       44100 / 4.0 - 1000, NULL);
 1596   g_object_set (G_OBJECT (audiochebband), "upper-frequency",
 1597       44100 / 4.0 + 1000, NULL);
 1598   inbuffer = gst_buffer_new_and_alloc (1024 * sizeof (gdouble));
 1599   gst_buffer_map (inbuffer, &map, GST_MAP_WRITE);
 1600   in = (gdouble *) map.data;
 1601   for (i = 0; i < 1024; i += 2) {
 1602     in[i] = 1.0;
 1603     in[i + 1] = -1.0;
 1604   }
 1605   gst_buffer_unmap (inbuffer, &map);
 1606 
 1607   caps = gst_caps_from_string (BUFFER_CAPS_STRING_64);
 1608   gst_check_setup_events (mysrcpad, audiochebband, caps, GST_FORMAT_TIME);
 1609   gst_caps_unref (caps);
 1610   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 1611 
 1612   /* pushing gives away my reference ... */
 1613   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
 1614   /* ... and puts a new buffer on the global list */
 1615   fail_unless_equals_int (g_list_length (buffers), 1);
 1616   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
 1617 
 1618   gst_buffer_map (outbuffer, &map, GST_MAP_READ);
 1619   res = (gdouble *) map.data;
 1620 
 1621   rms = 0.0;
 1622   for (i = 0; i < 1024; i++)
 1623     rms += res[i] * res[i];
 1624   rms = sqrt (rms / 1024.0);
 1625   fail_unless (rms >= 0.9);
 1626 
 1627   gst_buffer_unmap (outbuffer, &map);
 1628 
 1629   /* cleanup */
 1630   cleanup_audiochebband (audiochebband);
 1631 }
 1632 
 1633 GST_END_TEST;
 1634 
 1635 static Suite *
 1636 audiochebband_suite (void)
 1637 {
 1638   Suite *s = suite_create ("audiochebband");
 1639   TCase *tc_chain = tcase_create ("general");
 1640 
 1641   suite_add_tcase (s, tc_chain);
 1642   tcase_add_test (tc_chain, test_type1_32_bp_0hz);
 1643   tcase_add_test (tc_chain, test_type1_32_bp_11025hz);
 1644   tcase_add_test (tc_chain, test_type1_32_bp_22050hz);
 1645   tcase_add_test (tc_chain, test_type1_32_br_0hz);
 1646   tcase_add_test (tc_chain, test_type1_32_br_11025hz);
 1647   tcase_add_test (tc_chain, test_type1_32_br_22050hz);
 1648   tcase_add_test (tc_chain, test_type1_64_bp_0hz);
 1649   tcase_add_test (tc_chain, test_type1_64_bp_11025hz);
 1650   tcase_add_test (tc_chain, test_type1_64_bp_22050hz);
 1651   tcase_add_test (tc_chain, test_type1_64_br_0hz);
 1652   tcase_add_test (tc_chain, test_type1_64_br_11025hz);
 1653   tcase_add_test (tc_chain, test_type1_64_br_22050hz);
 1654   tcase_add_test (tc_chain, test_type2_32_bp_0hz);
 1655   tcase_add_test (tc_chain, test_type2_32_bp_11025hz);
 1656   tcase_add_test (tc_chain, test_type2_32_bp_22050hz);
 1657   tcase_add_test (tc_chain, test_type2_32_br_0hz);
 1658   tcase_add_test (tc_chain, test_type2_32_br_11025hz);
 1659   tcase_add_test (tc_chain, test_type2_32_br_22050hz);
 1660   tcase_add_test (tc_chain, test_type2_64_bp_0hz);
 1661   tcase_add_test (tc_chain, test_type2_64_bp_11025hz);
 1662   tcase_add_test (tc_chain, test_type2_64_bp_22050hz);
 1663   tcase_add_test (tc_chain, test_type2_64_br_0hz);
 1664   tcase_add_test (tc_chain, test_type2_64_br_11025hz);
 1665   tcase_add_test (tc_chain, test_type2_64_br_22050hz);
 1666 
 1667   return s;
 1668 }
 1669 
 1670 GST_CHECK_MAIN (audiochebband);