From: <tho...@ke...> - 2006-04-29 11:55:22
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: thomasvs Date: Sat Apr 29 2006 11:55:21 UTC Log message: * tests/check/elements/audioconvert.c: (verify_convert), (GST_START_TEST): when a test fails, give an indication of which it is Modified files: . : ChangeLog tests/check/elements: audioconvert.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2586&r2=1.2587 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/tests/check/elements/audioconvert.c.diff?r1=1.12&r2=1.13 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2586 retrieving revision 1.2587 diff -u -d -r1.2586 -r1.2587 --- ChangeLog 29 Apr 2006 01:10:33 -0000 1.2586 +++ ChangeLog 29 Apr 2006 11:55:08 -0000 1.2587 @@ -1,5 +1,11 @@ 2006-04-29 Thomas Vander Stichele <thomas at apestaart dot org> + * tests/check/elements/audioconvert.c: (verify_convert), + (GST_START_TEST): + when a test fails, give an indication of which it is + +2006-04-29 Thomas Vander Stichele <thomas at apestaart dot org> * gst-libs/gst/cdda/gstcddabasesrc.c: compile fix; strtol() needs <stdlib.h> @@ -50,19 +56,19 @@ * sys/ximage/ximagesink.c: * sys/xvimage/xvimagesink.c: * tests/check/libs/cddabasesrc.c: - make GstElementDetails const + make GstElementDetails const 2006-04-28 Stefan Kost <en...@us...> * gst/adder/gstadder.c: (gst_adder_setcaps), (gst_adder_src_event), (gst_adder_init): - send events from src-pad to all sink-pads fixes #338657 + send events from src-pad to all sink-pads fixes #338657 * ext/alsa/gstalsasink.c: (gst_alsasink_getcaps), (alsasink_parse_spec): - query witdh capabilities from alsa, fixes #338919 + query width capabilities from alsa, fixes #338919 2006-04-28 Wim Taymans <wi...@fl...> Index: audioconvert.c RCS file: /cvs/gstreamer/gst-plugins-base/tests/check/elements/audioconvert.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- audioconvert.c 28 Apr 2006 14:22:16 -0000 1.12 +++ audioconvert.c 29 Apr 2006 11:55:09 -0000 1.13 @@ -161,12 +161,13 @@ /* eats the refs to the caps */ static void -verify_convert (void *in, int inlength, +verify_convert (const gchar * which, void *in, int inlength, GstCaps * incaps, void *out, int outlength, GstCaps * outcaps) { GstBuffer *inbuffer, *outbuffer; GstElement *audioconvert; + GST_DEBUG ("verifying conversion %s", which); GST_DEBUG ("incaps: %" GST_PTR_FORMAT, incaps); GST_DEBUG ("outcaps: %" GST_PTR_FORMAT, outcaps); ASSERT_CAPS_REFCOUNT (incaps, "incaps", 1); @@ -195,7 +196,8 @@ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); fail_unless_equals_int (GST_BUFFER_SIZE (outbuffer), outlength); - fail_unless (memcmp (GST_BUFFER_DATA (outbuffer), out, outlength) == 0); + fail_unless (memcmp (GST_BUFFER_DATA (outbuffer), out, outlength) == 0, + "failed converting %s", which); buffers = g_list_remove (buffers, outbuffer); gst_buffer_unref (outbuffer); fail_unless (gst_element_set_state (audioconvert, @@ -209,8 +211,8 @@ } -#define RUN_CONVERSION(inarray, in_get_caps, outarray, out_get_caps) \ - verify_convert (inarray, sizeof (inarray), \ +#define RUN_CONVERSION(which, inarray, in_get_caps, outarray, out_get_caps) \ + verify_convert (which, inarray, sizeof (inarray), \ in_get_caps, outarray, sizeof (outarray), out_get_caps) GST_START_TEST (test_int16) @@ -220,7 +222,8 @@ gint16 in[] = { 16384, -256, 1024, 1024 }; gint16 out[] = { 8064, 1024 }; - RUN_CONVERSION (in, get_int_caps (2, "BYTE_ORDER", 16, 16, TRUE), + RUN_CONVERSION ("int16 stereo to mono", + in, get_int_caps (2, "BYTE_ORDER", 16, 16, TRUE), out, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE)); } /* mono to stereo */ @@ -228,7 +231,8 @@ gint16 in[] = { 512, 1024 }; gint16 out[] = { 512, 512, 1024, 1024 }; - RUN_CONVERSION (in, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE), + RUN_CONVERSION ("int16 mono to stereo", + in, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE), out, get_int_caps (2, "BYTE_ORDER", 16, 16, TRUE)); /* signed -> unsigned */ @@ -236,9 +240,11 @@ gint16 in[] = { 0, -32767, 32767, -32768 }; guint16 out[] = { 32768, 1, 65535, 0 }; + RUN_CONVERSION ("int16 signed to unsigned", out, get_int_caps (1, "BYTE_ORDER", 16, 16, FALSE)); - RUN_CONVERSION (out, get_int_caps (1, "BYTE_ORDER", 16, 16, FALSE), + RUN_CONVERSION ("int16 unsigned to signed", + out, get_int_caps (1, "BYTE_ORDER", 16, 16, FALSE), in, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE)); @@ -253,10 +259,12 @@ gint8 in[] = { 0, 1, 2, 127, -127 }; gint16 out[] = { 0, 256, 512, 32512, -32512 }; - RUN_CONVERSION (in, get_int_caps (1, "BYTE_ORDER", 8, 8, TRUE), + RUN_CONVERSION ("int 8bit to 16bit signed", + in, get_int_caps (1, "BYTE_ORDER", 8, 8, TRUE), out, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE) ); - RUN_CONVERSION (out, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE), + RUN_CONVERSION ("int 16bit signed to 8bit", + out, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE), in, get_int_caps (1, "BYTE_ORDER", 8, 8, TRUE) @@ -265,7 +273,8 @@ gint16 in[] = { 0, 255, 256, 257 }; gint8 out[] = { 0, 0, 1, 1 }; + RUN_CONVERSION ("16 bit to 8 signed", out, get_int_caps (1, "BYTE_ORDER", 8, 8, TRUE) @@ -281,9 +290,10 @@ outcaps = get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE); GST_DEBUG ("incaps: %" GST_PTR_FORMAT, incaps); GST_DEBUG ("outcaps: %" GST_PTR_FORMAT, outcaps); - RUN_CONVERSION (in, incaps, out, outcaps); - in, get_int_caps (1, "BYTE_ORDER", 8, 8, FALSE) + RUN_CONVERSION ("8 unsigned to 16 signed", in, incaps, out, outcaps); + RUN_CONVERSION ("16 signed to 8 unsigned", out, get_int_caps (1, + "BYTE_ORDER", 16, 16, TRUE), in, get_int_caps (1, "BYTE_ORDER", 8, + 8, FALSE) /* 8 <-> 24 signed */ @@ -292,11 +302,11 @@ gint8 in[] = { 0, 1, 127 }; guint8 out[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7f }; - out, get_int_caps (1, "BYTE_ORDER", 24, 24, TRUE) + RUN_CONVERSION ("8 to 24 signed", in, get_int_caps (1, "BYTE_ORDER", 8, 8, + TRUE), out, get_int_caps (1, "BYTE_ORDER", 24, 24, TRUE) - RUN_CONVERSION (out, get_int_caps (1, "BYTE_ORDER", 24, 24, TRUE), - in, get_int_caps (1, "BYTE_ORDER", 8, 8, TRUE) + RUN_CONVERSION ("24 signed to 8", out, get_int_caps (1, "BYTE_ORDER", 24, + 24, TRUE), in, get_int_caps (1, "BYTE_ORDER", 8, 8, TRUE) @@ -305,7 +315,7 @@ GST_START_TEST (test_float_conversion) - /* float32 <-> 16 signed */ + /* 32 float <-> 16 signed */ /* NOTE: if audioconvert was doing dithering we'd have a problem */ { gfloat in[] = { 0.0, 1.0, -1.0, 0.5, -0.5, 1.1, -1.1 }; @@ -314,8 +324,8 @@ /* only one direction conversion, the other direction does * not produce exactly the same as the input due to floating * point rounding errors etc. */ - RUN_CONVERSION (in, get_float_caps (1, "BYTE_ORDER", 32), - out, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE) + RUN_CONVERSION ("32 float to 16 signed", in, get_float_caps (1, + "BYTE_ORDER", 32), out, get_int_caps (1, "BYTE_ORDER", 16, 16, TRUE) |
From: <tho...@ke...> - 2006-04-29 13:10:13
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: thomasvs Date: Sat Apr 29 2006 13:10:04 UTC Log message: * tests/check/elements/audioconvert.c: (verify_convert), (GST_START_TEST): interpret the out[] buffer in the order the bytes are actually put in, which is LITTLE_ENDIAN, not BYTE_ORDER. Other tests should use BYTE_ORDER since the array is filled in with actual values Modified files: . : ChangeLog tests/check/elements: audioconvert.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2587&r2=1.2588 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/tests/check/elements/audioconvert.c.diff?r1=1.14&r2=1.15 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2587 retrieving revision 1.2588 diff -u -d -r1.2587 -r1.2588 --- ChangeLog 29 Apr 2006 11:55:08 -0000 1.2587 +++ ChangeLog 29 Apr 2006 13:09:52 -0000 1.2588 @@ -2,6 +2,15 @@ * tests/check/elements/audioconvert.c: (verify_convert), (GST_START_TEST): + interpret the out[] buffer in the order the bytes are actually + put in, which is LITTLE_ENDIAN, not BYTE_ORDER. + Other tests should use BYTE_ORDER since the array is filled in + with actual values + +2006-04-29 Thomas Vander Stichele <thomas at apestaart dot org> + * tests/check/elements/audioconvert.c: (verify_convert), + (GST_START_TEST): when a test fails, give an indication of which it is 2006-04-29 Thomas Vander Stichele <thomas at apestaart dot org> Index: audioconvert.c RCS file: /cvs/gstreamer/gst-plugins-base/tests/check/elements/audioconvert.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- audioconvert.c 29 Apr 2006 12:10:52 -0000 1.14 +++ audioconvert.c 29 Apr 2006 13:09:52 -0000 1.15 @@ -308,11 +308,13 @@ { gint8 in[] = { 0, 1, 127 }; guint8 out[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7f }; + /* out has the bytes in little-endian, so that's how they should be + * interpreted during conversion */ RUN_CONVERSION ("8 to 24 signed", in, get_int_caps (1, "BYTE_ORDER", 8, 8, - TRUE), out, get_int_caps (1, "BYTE_ORDER", 24, 24, TRUE) + TRUE), out, get_int_caps (1, "LITTLE_ENDIAN", 24, 24, TRUE) ); - RUN_CONVERSION ("24 signed to 8", out, get_int_caps (1, "BYTE_ORDER", 24, + RUN_CONVERSION ("24 signed to 8", out, get_int_caps (1, "LITTLE_ENDIAN", 24, 24, TRUE), in, get_int_caps (1, "BYTE_ORDER", 8, 8, TRUE) } |
From: <tho...@ke...> - 2006-05-10 18:16:36
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: thomasvs Date: Wed May 10 2006 18:16:35 UTC Log message: * tests/check/elements/multifdsink.c: (wait_bytes_served), (GST_START_TEST), (fail_unless_read), (multifdsink_suite): add two more tests, one doing streamheader Modified files: . : ChangeLog tests/check/elements: multifdsink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2616&r2=1.2617 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/tests/check/elements/multifdsink.c.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2616 retrieving revision 1.2617 diff -u -d -r1.2616 -r1.2617 --- ChangeLog 10 May 2006 16:34:06 -0000 1.2616 +++ ChangeLog 10 May 2006 18:16:23 -0000 1.2617 @@ -1,5 +1,11 @@ 2006-05-10 Thomas Vander Stichele <thomas at apestaart dot org> + * tests/check/elements/multifdsink.c: (wait_bytes_served), + (GST_START_TEST), (fail_unless_read), (multifdsink_suite): + add two more tests, one doing streamheader + +2006-05-10 Thomas Vander Stichele <thomas at apestaart dot org> * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_stop): clean up the bufqueue when shutting down * tests/check/Makefile.am: Index: multifdsink.c RCS file: /cvs/gstreamer/gst-plugins-base/tests/check/elements/multifdsink.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- multifdsink.c 10 May 2006 16:34:06 -0000 1.1 +++ multifdsink.c 10 May 2006 18:16:23 -0000 1.2 @@ -19,6 +19,10 @@ */ #include <unistd.h> +#include <sys/ioctl.h> +#ifdef HAVE_FIONREAD_IN_SYS_FILIO +#include <sys/filio.h> +#endif #include <gst/check/gstcheck.h> @@ -51,6 +55,16 @@ gst_check_teardown_element (multifdsink); } +static void +wait_bytes_served (GstElement * sink, guint64 bytes) +{ + guint64 bytes_served = 0; + while (bytes_served != bytes) { + g_object_get (sink, "bytes-served", &bytes_served, NULL); + } +} GST_START_TEST (test_no_clients) { GstElement *sink; @@ -70,6 +84,161 @@ GST_END_TEST; +GST_START_TEST (test_add_client) + GstElement *sink; + GstBuffer *buffer; + int pfd[2]; + gchar data[4]; + guint64 bytes_served; + sink = setup_multifdsink (); + fail_if (pipe (pfd) == -1); + ASSERT_SET_STATE (sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC); + /* add the client */ + g_signal_emit_by_name (sink, "add", pfd[1]); + buffer = gst_buffer_new_and_alloc (4); + memcpy (GST_BUFFER_DATA (buffer), "dead", 4); + fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK); + fail_if (read (pfd[0], data, 4) < 4); + fail_unless (strncmp (data, "dead", 4) == 0); + wait_bytes_served (sink, 4); + GST_DEBUG ("cleaning up multifdsink"); + ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); + cleanup_multifdsink (sink); +GST_END_TEST; +fail_unless_read (const char *msg, int fd, int size, const char *ref) + char data[size]; + int nbytes; + GST_DEBUG ("%s: reading %d bytes", msg, size); + nbytes = read (fd, data, size); + GST_DEBUG ("%s: read %d bytes", msg, nbytes); + fail_if (nbytes < size); + fail_unless (memcmp (data, ref, size) == 0, "data read differs from '%s'", + ref); +/* this test: + * - adds a first client + * - sets streamheader caps on the pad + * - pushes the IN_CAPS buffers + * - pushes a buffer + * - verifies that the client received all the data correctly + * - adds a second client + * - verifies that this second client receives the streamheader caps too + */ +GST_START_TEST (test_streamheader) + GstBuffer *hbuf1, *hbuf2, *buf; + GstCaps *caps; + GstStructure *structure; + int pfd1[2], pfd2[2]; + guint8 data[12]; + GValue array = { 0 }; + GValue value = { 0 }; + int avail; + fail_if (pipe (pfd1) == -1); + fail_if (pipe (pfd2) == -1); + /* add the first client */ + g_signal_emit_by_name (sink, "add", pfd1[1]); + /* create caps with streamheader, set the caps, and push the IN_CAPS + * buffers */ + hbuf1 = gst_buffer_new_and_alloc (4); + GST_BUFFER_FLAG_SET (hbuf1, GST_BUFFER_FLAG_IN_CAPS); + memcpy (GST_BUFFER_DATA (hbuf1), "babe", 4); + hbuf2 = gst_buffer_new_and_alloc (8); + GST_BUFFER_FLAG_SET (hbuf2, GST_BUFFER_FLAG_IN_CAPS); + memcpy (GST_BUFFER_DATA (hbuf2), "deadbeef", 8); + /* we want to keep them around for the tests */ + gst_buffer_ref (hbuf1); + gst_buffer_ref (hbuf2); + g_value_init (&array, GST_TYPE_ARRAY); + g_value_init (&value, GST_TYPE_BUFFER); + gst_value_set_buffer (&value, hbuf1); + gst_value_array_append_value (&array, &value); + g_value_unset (&value); + gst_value_set_buffer (&value, hbuf2); + caps = gst_caps_from_string ("application/x-gst-check"); + structure = gst_caps_get_structure (caps, 0); + gst_structure_set_value (structure, "streamheader", &array); + g_value_unset (&array); + fail_unless (gst_pad_push (mysrcpad, hbuf1) == GST_FLOW_OK); + fail_unless (gst_pad_push (mysrcpad, hbuf2) == GST_FLOW_OK); + /* verify this hasn't triggered a write yet */ + /* FIXME: possibly racy, since if it would write, we may not get it + * immediately ? */ + fail_if (ioctl (pfd1[0], FIONREAD, &avail) < 0); + fail_if (avail > 0); + /* push a non-IN_CAPS buffer, this should trigger the client receiving the + * first three buffers */ + buf = gst_buffer_new_and_alloc (4); + memcpy (GST_BUFFER_DATA (buf), "f00d", 4); + gst_pad_push (mysrcpad, buf); + fail_unless_read ("first client", pfd1[0], 4, "babe"); + fail_unless_read ("first client", pfd1[0], 8, "deadbeef"); + fail_unless_read ("first client", pfd1[0], 4, "f00d"); + wait_bytes_served (sink, 16); + /* now add the second client */ + g_signal_emit_by_name (sink, "add", pfd2[1]); + fail_if (ioctl (pfd2[0], FIONREAD, &avail) < 0); + /* now push another buffer, which will trigger streamheader for second + * client */ + memcpy (GST_BUFFER_DATA (buf), "deaf", 4); + fail_unless_read ("first client", pfd1[0], 4, "deaf"); + fail_unless_read ("second client", pfd2[0], 4, "babe"); + fail_unless_read ("second client", pfd2[0], 8, "deadbeef"); + /* we missed the f00d buffer */ + fail_unless_read ("second client", pfd2[0], 4, "deaf"); + wait_bytes_served (sink, 36); Suite * multifdsink_suite (void) @@ -78,6 +247,8 @@ suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_no_clients); + tcase_add_test (tc_chain, test_add_client); + tcase_add_test (tc_chain, test_streamheader); return s; |