"Fossies" - the Fresh Open Source Software Archive 
Member "gst-plugins-good-1.20.3/tests/check/elements/audioiirfilter.c" (15 Jun 2022, 5049 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 "audioiirfilter.c" see the
Fossies "Dox" file reference documentation.
1 /* GStreamer
2 *
3 * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
4 *
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.
9 *
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.
14 *
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
18 * 02110-1301 USA
19 */
20
21 /* FIXME 0.11: suppress warnings for deprecated API such as GValueArray
22 * with newer GLib versions (>= 2.31.0) */
23 #define GLIB_DISABLE_DEPRECATION_WARNINGS
24
25 #include <gst/gst.h>
26 #include <gst/check/gstcheck.h>
27
28 static gboolean have_eos = FALSE;
29
30 static gboolean
31 on_message (GstBus * bus, GstMessage * message, gpointer user_data)
32 {
33 GMainLoop *loop = (GMainLoop *) user_data;
34
35 switch (GST_MESSAGE_TYPE (message)) {
36 case GST_MESSAGE_ERROR:
37 case GST_MESSAGE_WARNING:
38 g_assert_not_reached ();
39 g_main_loop_quit (loop);
40 break;
41
42 case GST_MESSAGE_EOS:
43 have_eos = TRUE;
44 g_main_loop_quit (loop);
45 break;
46 default:
47 break;
48 }
49
50 return TRUE;
51 }
52
53 static void
54 on_rate_changed (GstElement * element, gint rate, gpointer user_data)
55 {
56 GValueArray *va;
57 GValue v = { 0, };
58
59 fail_unless (rate > 0);
60
61 va = g_value_array_new (6);
62
63 g_value_init (&v, G_TYPE_DOUBLE);
64 g_value_set_double (&v, 0.0);
65 g_value_array_append (va, &v);
66 g_value_reset (&v);
67 g_value_set_double (&v, 0.0);
68 g_value_array_append (va, &v);
69 g_value_reset (&v);
70 g_value_set_double (&v, 0.0);
71 g_value_array_append (va, &v);
72 g_value_reset (&v);
73 g_value_set_double (&v, 0.0);
74 g_value_array_append (va, &v);
75 g_value_reset (&v);
76 g_value_set_double (&v, 0.0);
77 g_value_array_append (va, &v);
78 g_value_reset (&v);
79 g_value_set_double (&v, 1.0);
80 g_value_array_append (va, &v);
81 g_value_reset (&v);
82
83 g_object_set (G_OBJECT (element), "b", va, NULL);
84
85 g_value_array_free (va);
86
87 va = g_value_array_new (6);
88
89 g_value_set_double (&v, 1.0);
90 g_value_array_append (va, &v);
91 g_value_reset (&v);
92
93 g_object_set (G_OBJECT (element), "a", va, NULL);
94
95 g_value_array_free (va);
96 }
97
98 static gboolean have_data = FALSE;
99
100 static void
101 on_handoff (GstElement * object, GstBuffer * buffer, GstPad * pad,
102 gpointer user_data)
103 {
104 if (!have_data) {
105 GstMapInfo map;
106 gfloat *data;
107
108 fail_unless (gst_buffer_map (buffer, &map, GST_MAP_READ));
109 data = (gfloat *) map.data;
110
111 fail_unless (map.size > 5 * sizeof (gdouble));
112 fail_unless (data[0] == 0.0);
113 fail_unless (data[1] == 0.0);
114 fail_unless (data[2] == 0.0);
115 fail_unless (data[3] == 0.0);
116 fail_unless (data[4] == 0.0);
117 fail_unless (data[5] != 0.0);
118
119 gst_buffer_unmap (buffer, &map);
120 have_data = TRUE;
121 }
122 }
123
124 GST_START_TEST (test_pipeline)
125 {
126 GstElement *pipeline, *src, *filter, *sink;
127 GstBus *bus;
128 GMainLoop *loop;
129
130 have_data = FALSE;
131 have_eos = FALSE;
132
133 pipeline = gst_element_factory_make ("pipeline", NULL);
134 fail_unless (pipeline != NULL);
135
136 src = gst_element_factory_make ("audiotestsrc", NULL);
137 fail_unless (src != NULL);
138 g_object_set (G_OBJECT (src), "num-buffers", 1000, NULL);
139
140 filter = gst_element_factory_make ("audioiirfilter", NULL);
141 fail_unless (filter != NULL);
142 g_signal_connect (G_OBJECT (filter), "rate-changed",
143 G_CALLBACK (on_rate_changed), NULL);
144
145 sink = gst_element_factory_make ("fakesink", NULL);
146 fail_unless (sink != NULL);
147 g_object_set (G_OBJECT (sink), "signal-handoffs", TRUE, NULL);
148 g_signal_connect (G_OBJECT (sink), "handoff", G_CALLBACK (on_handoff), NULL);
149
150 gst_bin_add_many (GST_BIN (pipeline), src, filter, sink, NULL);
151 fail_unless (gst_element_link_many (src, filter, sink, NULL));
152
153 loop = g_main_loop_new (NULL, FALSE);
154
155 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
156 gst_bus_add_signal_watch (bus);
157 g_signal_connect (G_OBJECT (bus), "message", G_CALLBACK (on_message), loop);
158
159 fail_if (gst_element_set_state (pipeline,
160 GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE);
161
162 g_main_loop_run (loop);
163
164 fail_unless (have_data);
165 fail_unless (have_eos);
166
167 fail_unless (gst_element_set_state (pipeline,
168 GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS);
169
170 gst_bus_remove_signal_watch (bus);
171 gst_object_unref (GST_OBJECT (bus));
172 g_main_loop_unref (loop);
173 gst_object_unref (pipeline);
174 }
175
176 GST_END_TEST;
177
178 static Suite *
179 audioiirfilter_suite (void)
180 {
181 Suite *s = suite_create ("audioiirfilter");
182 TCase *tc_chain = tcase_create ("general");
183
184 suite_add_tcase (s, tc_chain);
185 tcase_add_test (tc_chain, test_pipeline);
186
187 return s;
188 }
189
190 GST_CHECK_MAIN (audioiirfilter);