3 * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public License
7 * as published by the Free Software Foundation; either version 2.1 of
8 * the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 #include <gst/check/gstcheck.h>
24 static gboolean have_eos = FALSE;
27 on_message (GstBus * bus, GstMessage * message, gpointer user_data)
29 GMainLoop *loop = (GMainLoop *) user_data;
31 switch (GST_MESSAGE_TYPE (message)) {
32 case GST_MESSAGE_ERROR:
33 case GST_MESSAGE_WARNING:
34 g_assert_not_reached ();
35 g_main_loop_quit (loop);
40 g_main_loop_quit (loop);
50 on_rate_changed (GstElement * element, gint rate, gpointer user_data)
55 fail_unless (rate > 0);
57 va = g_value_array_new (6);
59 g_value_init (&v, G_TYPE_DOUBLE);
60 g_value_set_double (&v, 0.0);
61 g_value_array_append (va, &v);
63 g_value_set_double (&v, 0.0);
64 g_value_array_append (va, &v);
66 g_value_set_double (&v, 0.0);
67 g_value_array_append (va, &v);
69 g_value_set_double (&v, 0.0);
70 g_value_array_append (va, &v);
72 g_value_set_double (&v, 0.0);
73 g_value_array_append (va, &v);
75 g_value_set_double (&v, 1.0);
76 g_value_array_append (va, &v);
79 g_object_set (G_OBJECT (element), "a", va, NULL);
81 g_value_array_free (va);
83 va = g_value_array_new (6);
85 g_value_set_double (&v, 0.0);
86 g_value_array_append (va, &v);
89 g_object_set (G_OBJECT (element), "b", va, NULL);
91 g_value_array_free (va);
94 static gboolean have_data = FALSE;
97 on_handoff (GstElement * object, GstBuffer * buffer, GstPad * pad,
101 gdouble *data = (gdouble *) GST_BUFFER_DATA (buffer);
103 fail_unless (GST_BUFFER_SIZE (buffer) > 5 * sizeof (gdouble));
104 fail_unless (data[0] == 0.0);
105 fail_unless (data[1] == 0.0);
106 fail_unless (data[2] == 0.0);
107 fail_unless (data[3] == 0.0);
108 fail_unless (data[4] == 0.0);
109 fail_unless (data[5] != 0.0);
114 GST_START_TEST (test_pipeline)
116 GstElement *pipeline, *src, *filter, *sink;
123 pipeline = gst_element_factory_make ("pipeline", NULL);
124 fail_unless (pipeline != NULL);
126 src = gst_element_factory_make ("audiotestsrc", NULL);
127 fail_unless (src != NULL);
128 g_object_set (G_OBJECT (src), "num-buffers", 1000, NULL);
130 filter = gst_element_factory_make ("audioiirfilter", NULL);
131 fail_unless (filter != NULL);
132 g_signal_connect (G_OBJECT (filter), "rate-changed",
133 G_CALLBACK (on_rate_changed), NULL);
135 sink = gst_element_factory_make ("fakesink", NULL);
136 fail_unless (sink != NULL);
137 g_object_set (G_OBJECT (sink), "signal-handoffs", TRUE, NULL);
138 g_signal_connect (G_OBJECT (sink), "handoff", G_CALLBACK (on_handoff), NULL);
140 gst_bin_add_many (GST_BIN (pipeline), src, filter, sink, NULL);
141 fail_unless (gst_element_link_many (src, filter, sink, NULL));
143 loop = g_main_loop_new (NULL, FALSE);
145 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
146 gst_bus_add_signal_watch (bus);
147 g_signal_connect (G_OBJECT (bus), "message", G_CALLBACK (on_message), loop);
148 gst_object_unref (GST_OBJECT (bus));
150 fail_if (gst_element_set_state (pipeline,
151 GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE);
153 g_main_loop_run (loop);
155 fail_unless (have_data);
156 fail_unless (have_eos);
158 fail_unless (gst_element_set_state (pipeline,
159 GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS);
161 g_main_loop_unref (loop);
162 gst_object_unref (pipeline);
168 audioiirfilter_suite (void)
170 Suite *s = suite_create ("audioiirfilter");
171 TCase *tc_chain = tcase_create ("general");
173 suite_add_tcase (s, tc_chain);
174 tcase_add_test (tc_chain, test_pipeline);
179 GST_CHECK_MAIN (audioiirfilter);