Added gst-plugins-base-subtitles0.10-0.10.34 for Meego Harmattan 1.2
[mafwsubrenderer] / gst-plugins-base-subtitles0.10 / tests / check / elements / gdppay.c
1 /* GStreamer
2  *
3  * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
20
21 #include <string.h>
22 #include <unistd.h>
23
24 #include <gst/check/gstcheck.h>
25 #include <gst/dataprotocol/dataprotocol.h>
26
27 /* For ease of programming we use globals to keep refs for our floating
28  * src and sink pads we create; otherwise we always have to do get_pad,
29  * get_peer, and then remove references in every test function */
30 static GstPad *mysrcpad, *myshsrcpad, *mysinkpad;
31
32 #define AUDIO_CAPS_TEMPLATE_STRING \
33   "audio/x-raw-int, " \
34     "rate = (int) [ 1, MAX ], " \
35     "channels = (int) [ 1, 8 ], " \
36     "endianness = (int) BYTE_ORDER, " \
37     "width = (int) {8, 16}, " \
38     "depth = (int) {8, 16}, " \
39     "signed = (boolean) true"
40
41 #define AUDIO_CAPS_STRING \
42   "audio/x-raw-int, " \
43     "rate = (int) 1000, " \
44     "channels = (int) 2, " \
45     "endianness = (int) BYTE_ORDER, " \
46     "width = (int) 16, " \
47     "depth = (int) 16, " \
48     "signed = (boolean) true"
49
50
51 static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
52     GST_PAD_SINK,
53     GST_PAD_ALWAYS,
54     GST_STATIC_CAPS ("application/x-gdp")
55     );
56 static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
57     GST_PAD_SRC,
58     GST_PAD_ALWAYS,
59     GST_STATIC_CAPS (AUDIO_CAPS_TEMPLATE_STRING)
60     );
61
62 /* takes over reference for outcaps */
63 static GstElement *
64 setup_gdppay (void)
65 {
66   GstElement *gdppay;
67
68   GST_DEBUG ("setup_gdppay");
69   gdppay = gst_check_setup_element ("gdppay");
70   mysrcpad = gst_check_setup_src_pad (gdppay, &srctemplate, NULL);
71   mysinkpad = gst_check_setup_sink_pad (gdppay, &sinktemplate, NULL);
72   gst_pad_set_active (mysrcpad, TRUE);
73   gst_pad_set_active (mysinkpad, TRUE);
74
75   return gdppay;
76 }
77
78 static void
79 cleanup_gdppay (GstElement * gdppay)
80 {
81   GST_DEBUG ("cleanup_gdppay");
82
83   if (mysrcpad)
84     gst_pad_set_active (mysrcpad, FALSE);
85   if (myshsrcpad)
86     gst_pad_set_active (myshsrcpad, FALSE);
87   gst_pad_set_active (mysinkpad, FALSE);
88   gst_check_teardown_src_pad (gdppay);
89   gst_check_teardown_sink_pad (gdppay);
90   gst_check_teardown_element (gdppay);
91   mysrcpad = NULL;
92   myshsrcpad = NULL;
93 }
94
95 GST_START_TEST (test_audio)
96 {
97   GstCaps *caps;
98   GstElement *gdppay;
99   GstBuffer *inbuffer, *outbuffer;
100   GstEvent *event;
101   gchar *caps_string;
102   gint length;
103
104   gdppay = setup_gdppay ();
105
106   fail_unless (gst_element_set_state (gdppay,
107           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
108       "could not set to playing");
109
110   GST_DEBUG ("new segment");
111   event =
112       gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME, 0, GST_SECOND, 0);
113   fail_unless (gst_pad_push_event (mysrcpad, event));
114
115   /* no buffer should be pushed yet, waiting for caps */
116   fail_unless_equals_int (g_list_length (buffers), 0);
117
118   GST_DEBUG ("first buffer");
119   inbuffer = gst_buffer_new_and_alloc (4);
120   caps = gst_caps_from_string (AUDIO_CAPS_STRING);
121   gst_buffer_set_caps (inbuffer, caps);
122   caps_string = gst_caps_to_string (caps);
123
124   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
125
126   /* pushing gives away my reference */
127   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
128
129   /* we should have three buffers now */
130   fail_unless_equals_int (g_list_length (buffers), 3);
131
132   /* first buffer is the serialized new_segment event;
133    * the element also holds a ref to it */
134   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
135   buffers = g_list_remove (buffers, outbuffer);
136   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
137   gst_buffer_unref (outbuffer);
138
139   /* second buffer is the serialized caps;
140    * the element also holds a ref to it */
141   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
142   buffers = g_list_remove (buffers, outbuffer);
143   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
144   length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1);
145   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
146   gst_buffer_unref (outbuffer);
147
148   /* the third buffer is the GDP buffer for our pushed buffer */
149   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
150   buffers = g_list_remove (buffers, outbuffer);
151   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
152   length = GST_DP_HEADER_LENGTH + 4;
153   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
154   gst_buffer_unref (outbuffer);
155
156   /* second buffer */
157   GST_DEBUG ("second buffer");
158   inbuffer = gst_buffer_new_and_alloc (4);
159   gst_buffer_set_caps (inbuffer, caps);
160
161   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
162
163   /* pushing gives away my reference */
164   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
165
166   fail_unless_equals_int (g_list_length (buffers), 1);
167   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
168   buffers = g_list_remove (buffers, outbuffer);
169   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
170
171   /* the third output buffer is data */
172   length = GST_DP_HEADER_LENGTH + 4;
173   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
174   gst_buffer_unref (outbuffer);
175
176   /* a third buffer without caps set explicitly; should work */
177   GST_DEBUG ("Creating third buffer, no caps set");
178   inbuffer = gst_buffer_new_and_alloc (4);
179
180   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
181
182   /* pushing gives away my reference */
183   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
184
185   fail_unless_equals_int (g_list_length (buffers), 1);
186   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
187   buffers = g_list_remove (buffers, outbuffer);
188   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
189
190   /* the fourth output buffer is data */
191   length = GST_DP_HEADER_LENGTH + 4;
192   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
193   gst_buffer_unref (outbuffer);
194
195
196   fail_unless (gst_element_set_state (gdppay,
197           GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
198
199   gst_caps_unref (caps);
200   g_free (caps_string);
201   g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
202   g_list_free (buffers);
203   buffers = NULL;
204   ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
205   cleanup_gdppay (gdppay);
206 }
207
208 GST_END_TEST;
209
210 static GstStaticPadTemplate shsrctemplate = GST_STATIC_PAD_TEMPLATE ("src",
211     GST_PAD_SRC,
212     GST_PAD_ALWAYS,
213     GST_STATIC_CAPS ("application/x-gst-test-streamheader")
214     );
215
216
217 static GstElement *
218 setup_gdppay_streamheader (void)
219 {
220   GstElement *gdppay;
221
222   GST_DEBUG ("setup_gdppay");
223   gdppay = gst_check_setup_element ("gdppay");
224   myshsrcpad = gst_check_setup_src_pad (gdppay, &shsrctemplate, NULL);
225   mysinkpad = gst_check_setup_sink_pad (gdppay, &sinktemplate, NULL);
226   gst_pad_set_active (myshsrcpad, TRUE);
227   gst_pad_set_active (mysinkpad, TRUE);
228
229   return gdppay;
230 }
231
232 /* this test serializes a stream that already has a streamheader of its own.
233  * the streamheader should then be serialized and put on the GDP stream's
234  * streamheader */
235 GST_START_TEST (test_streamheader)
236 {
237   GstCaps *caps, *sinkcaps;
238   GstElement *gdppay;
239   GstBuffer *inbuffer, *outbuffer, *shbuffer;
240   GstEvent *event;
241   gchar *caps_string;
242   gint length;
243   GstStructure *structure;
244   GValue array = { 0 };
245   GValue value = { 0 };
246   const GValue *sh;
247   GArray *shbuffers;
248
249
250   gdppay = setup_gdppay_streamheader ();
251
252   fail_unless (gst_element_set_state (gdppay,
253           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
254       "could not set to playing");
255
256   GST_DEBUG ("new segment");
257   event =
258       gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME, 0, GST_SECOND, 0);
259   fail_unless (gst_pad_push_event (myshsrcpad, event));
260
261   /* no buffer should be pushed yet, still waiting for caps */
262   fail_unless_equals_int (g_list_length (buffers), 0);
263
264   GST_DEBUG ("first buffer");
265   inbuffer = gst_buffer_new_and_alloc (4);
266   memcpy (GST_BUFFER_DATA (inbuffer), "head", 4);
267   caps = gst_caps_from_string ("application/x-gst-test-streamheader");
268   structure = gst_caps_get_structure (caps, 0);
269   GST_BUFFER_FLAG_SET (inbuffer, GST_BUFFER_FLAG_IN_CAPS);
270   g_value_init (&array, GST_TYPE_ARRAY);
271   g_value_init (&value, GST_TYPE_BUFFER);
272   shbuffer = gst_buffer_copy (inbuffer);
273   gst_value_set_buffer (&value, shbuffer);
274   gst_buffer_unref (shbuffer);
275   gst_value_array_append_value (&array, &value);
276   g_value_unset (&value);
277   gst_structure_set_value (structure, "streamheader", &array);
278   g_value_unset (&array);
279   caps_string = gst_caps_to_string (caps);
280
281   gst_buffer_set_caps (inbuffer, caps);
282   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
283
284   /* pushing gives away my reference */
285   fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK);
286
287   /* we should have three buffers now */
288   fail_unless_equals_int (g_list_length (buffers), 3);
289
290   /* our sink pad should now have GDP caps with a streamheader that includes
291    * GDP wrappings of our streamheader */
292   sinkcaps = gst_pad_get_negotiated_caps (mysinkpad);
293   structure = gst_caps_get_structure (sinkcaps, 0);
294   fail_unless_equals_string ((gchar *) gst_structure_get_name (structure),
295       "application/x-gdp");
296   fail_unless (gst_structure_has_field (structure, "streamheader"));
297   sh = gst_structure_get_value (structure, "streamheader");
298   fail_unless (G_VALUE_TYPE (sh) == GST_TYPE_ARRAY);
299   shbuffers = g_value_peek_pointer (sh);
300   /* a serialized new_segment, a serialized caps, and serialization of our
301    * incoming streamheader */
302   fail_unless_equals_int (shbuffers->len, 3);
303
304   gst_caps_unref (sinkcaps);
305
306   /* first buffer is the serialized new_segment event;
307    * the element also holds a ref to it */
308   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
309   buffers = g_list_remove (buffers, outbuffer);
310   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
311   gst_buffer_unref (outbuffer);
312
313   /* second buffer is the serialized caps;
314    * the element also holds a ref to it */
315   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
316   buffers = g_list_remove (buffers, outbuffer);
317   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
318   length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1);
319   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
320   gst_buffer_unref (outbuffer);
321
322   /* the third buffer is the GDP buffer for our pushed buffer */
323   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
324   buffers = g_list_remove (buffers, outbuffer);
325   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
326   length = GST_DP_HEADER_LENGTH + 4;
327   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
328   gst_buffer_unref (outbuffer);
329
330   /* second buffer */
331   GST_DEBUG ("second buffer");
332   inbuffer = gst_buffer_new_and_alloc (4);
333   gst_buffer_set_caps (inbuffer, caps);
334
335   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
336
337   /* pushing gives away my reference */
338   fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK);
339
340   fail_unless_equals_int (g_list_length (buffers), 1);
341   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
342   buffers = g_list_remove (buffers, outbuffer);
343   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
344
345   /* the third output buffer is data */
346   length = GST_DP_HEADER_LENGTH + 4;
347   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
348   gst_buffer_unref (outbuffer);
349
350   /* a third buffer without caps set explicitly; should work */
351   GST_DEBUG ("Creating third buffer, no caps set");
352   inbuffer = gst_buffer_new_and_alloc (4);
353
354   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
355
356   /* pushing gives away my reference */
357   fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK);
358
359   fail_unless_equals_int (g_list_length (buffers), 1);
360   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
361   buffers = g_list_remove (buffers, outbuffer);
362   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
363
364   /* the fourth output buffer is data */
365   length = GST_DP_HEADER_LENGTH + 4;
366   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
367   gst_buffer_unref (outbuffer);
368
369
370   fail_unless (gst_element_set_state (gdppay,
371           GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
372
373   gst_caps_unref (caps);
374   g_free (caps_string);
375   g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
376   g_list_free (buffers);
377   buffers = NULL;
378   ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
379   cleanup_gdppay (gdppay);
380 }
381
382 GST_END_TEST;
383
384
385 GST_START_TEST (test_first_no_caps)
386 {
387   GstElement *gdppay;
388   GstBuffer *inbuffer;
389
390   gdppay = setup_gdppay ();
391
392   fail_unless (gst_element_set_state (gdppay,
393           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
394       "could not set to playing");
395
396   GST_DEBUG ("first buffer");
397   inbuffer = gst_buffer_new_and_alloc (4);
398   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
399
400   /* pushing should trigger an error */
401   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_NOT_NEGOTIATED);
402
403   fail_unless_equals_int (g_list_length (buffers), 0);
404
405   fail_unless (gst_element_set_state (gdppay,
406           GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
407
408   g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
409   g_list_free (buffers);
410   buffers = NULL;
411   ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
412   cleanup_gdppay (gdppay);
413 }
414
415 GST_END_TEST;
416
417 /* element should still work if no new_segment is sent before the first
418  * buffer */
419 GST_START_TEST (test_first_no_new_segment)
420 {
421   GstElement *gdppay;
422   GstBuffer *inbuffer;
423   GstCaps *caps;
424
425   gdppay = setup_gdppay ();
426
427   fail_unless (gst_element_set_state (gdppay,
428           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
429       "could not set to playing");
430
431   GST_DEBUG ("first buffer");
432   inbuffer = gst_buffer_new_and_alloc (4);
433   caps = gst_caps_from_string (AUDIO_CAPS_STRING);
434   gst_buffer_set_caps (inbuffer, caps);
435   gst_caps_unref (caps);
436
437   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
438
439   /* pushing gives away my reference */
440   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
441
442   /* we should have three buffers now;
443    * one for an "invented" new segment, one for GDP caps, and one with our
444    * buffer */
445   fail_unless_equals_int (g_list_length (buffers), 3);
446
447   fail_unless (gst_element_set_state (gdppay,
448           GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
449
450   g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
451   g_list_free (buffers);
452   buffers = NULL;
453   ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
454   cleanup_gdppay (gdppay);
455 }
456
457 GST_END_TEST;
458
459 GST_START_TEST (test_crc)
460 {
461   GstCaps *caps;
462   GstElement *gdppay;
463   GstBuffer *inbuffer, *outbuffer;
464   GstEvent *event;
465   gchar *caps_string;
466   gint length;
467   guint16 crc_calculated, crc_read;
468
469   gdppay = setup_gdppay ();
470   g_object_set (gdppay, "crc-header", TRUE, NULL);
471
472   fail_unless (gst_element_set_state (gdppay,
473           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
474       "could not set to playing");
475
476   GST_DEBUG ("new segment");
477   event =
478       gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME, 0, GST_SECOND, 0);
479   fail_unless (gst_pad_push_event (mysrcpad, event));
480
481   /* no buffer should be pushed yet, waiting for caps */
482   fail_unless_equals_int (g_list_length (buffers), 0);
483
484   GST_DEBUG ("first buffer");
485   inbuffer = gst_buffer_new_and_alloc (4);
486   caps = gst_caps_from_string (AUDIO_CAPS_STRING);
487   gst_buffer_set_caps (inbuffer, caps);
488   caps_string = gst_caps_to_string (caps);
489
490   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
491
492   /* pushing gives away my reference */
493   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
494
495   /* we should have three buffers now */
496   fail_unless_equals_int (g_list_length (buffers), 3);
497
498   /* first buffer is the serialized new_segment event;
499    * the element also holds a ref to it */
500   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
501   buffers = g_list_remove (buffers, outbuffer);
502   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
503
504   /* verify the header checksum */
505   /* CRC's start at 58 in the header */
506   crc_calculated = gst_dp_crc (GST_BUFFER_DATA (outbuffer), 58);
507   crc_read = GST_READ_UINT16_BE (GST_BUFFER_DATA (outbuffer) + 58);
508   fail_unless_equals_int (crc_calculated, crc_read);
509
510   /* change a byte in the header and verify that the checksum now fails */
511   GST_BUFFER_DATA (outbuffer)[0] = 0xff;
512   crc_calculated = gst_dp_crc (GST_BUFFER_DATA (outbuffer), 58);
513   fail_if (crc_calculated == crc_read,
514       "Introducing a byte error in the header should make the checksum fail");
515
516   gst_buffer_unref (outbuffer);
517
518   /* second buffer is the serialized caps;
519    * the element also holds a ref to it */
520   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
521   buffers = g_list_remove (buffers, outbuffer);
522   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
523   length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1);
524   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
525   gst_buffer_unref (outbuffer);
526
527   /* the third buffer is the GDP buffer for our pushed buffer */
528   fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
529   buffers = g_list_remove (buffers, outbuffer);
530   ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
531   length = GST_DP_HEADER_LENGTH + 4;
532   fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), length);
533   gst_buffer_unref (outbuffer);
534
535   fail_unless (gst_element_set_state (gdppay,
536           GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
537
538   gst_caps_unref (caps);
539   g_free (caps_string);
540   g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
541   g_list_free (buffers);
542   buffers = NULL;
543   ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
544   cleanup_gdppay (gdppay);
545 }
546
547 GST_END_TEST;
548
549
550 static Suite *
551 gdppay_suite (void)
552 {
553   Suite *s = suite_create ("gdppay");
554   TCase *tc_chain = tcase_create ("general");
555
556   suite_add_tcase (s, tc_chain);
557   tcase_add_test (tc_chain, test_audio);
558   tcase_add_test (tc_chain, test_first_no_caps);
559   tcase_add_test (tc_chain, test_first_no_new_segment);
560   tcase_add_test (tc_chain, test_streamheader);
561   tcase_add_test (tc_chain, test_crc);
562
563   return s;
564 }
565
566 GST_CHECK_MAIN (gdppay);