mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 22:36:33 +00:00
add more conversion tests
Original commit message from CVS: add more conversion tests
This commit is contained in:
parent
2042b4f2d9
commit
3f478d73e9
2 changed files with 124 additions and 16 deletions
|
@ -112,20 +112,20 @@ cleanup_audioconvert (GstElement * audioconvert)
|
||||||
}
|
}
|
||||||
|
|
||||||
GstCaps *
|
GstCaps *
|
||||||
get_int_caps (guint rate, guint channels, gchar * endianness, guint width,
|
get_int_caps (guint channels, gchar * endianness, guint width,
|
||||||
guint depth, gboolean signedness)
|
guint depth, gboolean signedness)
|
||||||
{
|
{
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
gchar *string;
|
gchar *string;
|
||||||
|
|
||||||
string = g_strdup_printf ("audio/x-raw-int, "
|
string = g_strdup_printf ("audio/x-raw-int, "
|
||||||
"rate = (int) %d, "
|
"rate = (int) 44100, "
|
||||||
"channels = (int) %d, "
|
"channels = (int) %d, "
|
||||||
"endianness = (int) %s, "
|
"endianness = (int) %s, "
|
||||||
"width = (int) %d, "
|
"width = (int) %d, "
|
||||||
"depth = (int) %d, "
|
"depth = (int) %d, "
|
||||||
"signed = (boolean) %s ",
|
"signed = (boolean) %s ",
|
||||||
rate, channels, endianness, width, depth, signedness ? "true" : "false");
|
channels, endianness, width, depth, signedness ? "true" : "false");
|
||||||
GST_DEBUG ("creating caps from %s", string);
|
GST_DEBUG ("creating caps from %s", string);
|
||||||
caps = gst_caps_from_string (string);
|
caps = gst_caps_from_string (string);
|
||||||
fail_unless (caps != NULL);
|
fail_unless (caps != NULL);
|
||||||
|
@ -170,7 +170,8 @@ G_STMT_START { \
|
||||||
audioconvert = setup_audioconvert (outcaps); \
|
audioconvert = setup_audioconvert (outcaps); \
|
||||||
\
|
\
|
||||||
incaps = in_get_caps; \
|
incaps = in_get_caps; \
|
||||||
verify_convert (audioconvert, in, sizeof (in), out, sizeof (out), \
|
verify_convert (audioconvert, inarray, sizeof (inarray), \
|
||||||
|
outarray, sizeof (outarray), \
|
||||||
incaps); \
|
incaps); \
|
||||||
\
|
\
|
||||||
/* cleanup */ \
|
/* cleanup */ \
|
||||||
|
@ -184,21 +185,73 @@ GST_START_TEST (test_int16)
|
||||||
gint16 in[] = { 16384, -256, 1024, 1024 };
|
gint16 in[] = { 16384, -256, 1024, 1024 };
|
||||||
gint16 out[] = { 8064, 1024 };
|
gint16 out[] = { 8064, 1024 };
|
||||||
|
|
||||||
RUN_CONVERSION (in, get_int_caps (44100, 2, "LITTLE_ENDIAN", 16, 16, TRUE),
|
RUN_CONVERSION (in, get_int_caps (2, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
out, get_int_caps (44100, 1, "LITTLE_ENDIAN", 16, 16, TRUE));
|
out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE));
|
||||||
}
|
}
|
||||||
/* mono to stereo */
|
/* mono to stereo */
|
||||||
{
|
{
|
||||||
gint16 in[] = { 512, 1024 };
|
gint16 in[] = { 512, 1024 };
|
||||||
gint16 out[] = { 512, 512, 1024, 1024 };
|
gint16 out[] = { 512, 512, 1024, 1024 };
|
||||||
|
|
||||||
RUN_CONVERSION (in, get_int_caps (44100, 1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
out, get_int_caps (44100, 2, "LITTLE_ENDIAN", 16, 16, TRUE));
|
out, get_int_caps (2, "LITTLE_ENDIAN", 16, 16, TRUE));
|
||||||
|
}
|
||||||
|
/* signed -> unsigned */
|
||||||
|
{
|
||||||
|
gint16 in[] = { 0, -32767, 32767, -32768 };
|
||||||
|
guint16 out[] = { 32768, 1, 65535, 0 };
|
||||||
|
|
||||||
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
|
out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, FALSE));
|
||||||
|
RUN_CONVERSION (out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, FALSE),
|
||||||
|
in, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
GST_START_TEST (test_int_conversion)
|
||||||
|
{
|
||||||
|
/* 8 <-> 16 signed */
|
||||||
|
/* NOTE: if audioconvert was doing dithering we'd have a problem */
|
||||||
|
{
|
||||||
|
gint8 in[] = { 0, 1, 2, 127, -127 };
|
||||||
|
gint16 out[] = { 0, 256, 512, 32512, -32512 };
|
||||||
|
|
||||||
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, TRUE),
|
||||||
|
out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE)
|
||||||
|
);
|
||||||
|
RUN_CONVERSION (out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
|
in, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, TRUE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/* 16 -> 8 signed */
|
||||||
|
{
|
||||||
|
gint16 in[] = { 0, 255, 256, 257 };
|
||||||
|
gint8 out[] = { 0, 0, 1, 1 };
|
||||||
|
|
||||||
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
|
out, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, TRUE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/* 8 unsigned <-> 16 signed */
|
||||||
|
/* NOTE: if audioconvert was doing dithering we'd have a problem */
|
||||||
|
{
|
||||||
|
guint8 in[] = { 128, 129, 130, 255, 1 };
|
||||||
|
gint16 out[] = { 0, 256, 512, 32512, -32512 };
|
||||||
|
|
||||||
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, FALSE),
|
||||||
|
out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE)
|
||||||
|
);
|
||||||
|
RUN_CONVERSION (out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
|
in, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, FALSE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
|
|
||||||
Suite *
|
Suite *
|
||||||
audioconvert_suite (void)
|
audioconvert_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -207,6 +260,7 @@ audioconvert_suite (void)
|
||||||
|
|
||||||
suite_add_tcase (s, tc_chain);
|
suite_add_tcase (s, tc_chain);
|
||||||
tcase_add_test (tc_chain, test_int16);
|
tcase_add_test (tc_chain, test_int16);
|
||||||
|
tcase_add_test (tc_chain, test_int_conversion);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,20 +112,20 @@ cleanup_audioconvert (GstElement * audioconvert)
|
||||||
}
|
}
|
||||||
|
|
||||||
GstCaps *
|
GstCaps *
|
||||||
get_int_caps (guint rate, guint channels, gchar * endianness, guint width,
|
get_int_caps (guint channels, gchar * endianness, guint width,
|
||||||
guint depth, gboolean signedness)
|
guint depth, gboolean signedness)
|
||||||
{
|
{
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
gchar *string;
|
gchar *string;
|
||||||
|
|
||||||
string = g_strdup_printf ("audio/x-raw-int, "
|
string = g_strdup_printf ("audio/x-raw-int, "
|
||||||
"rate = (int) %d, "
|
"rate = (int) 44100, "
|
||||||
"channels = (int) %d, "
|
"channels = (int) %d, "
|
||||||
"endianness = (int) %s, "
|
"endianness = (int) %s, "
|
||||||
"width = (int) %d, "
|
"width = (int) %d, "
|
||||||
"depth = (int) %d, "
|
"depth = (int) %d, "
|
||||||
"signed = (boolean) %s ",
|
"signed = (boolean) %s ",
|
||||||
rate, channels, endianness, width, depth, signedness ? "true" : "false");
|
channels, endianness, width, depth, signedness ? "true" : "false");
|
||||||
GST_DEBUG ("creating caps from %s", string);
|
GST_DEBUG ("creating caps from %s", string);
|
||||||
caps = gst_caps_from_string (string);
|
caps = gst_caps_from_string (string);
|
||||||
fail_unless (caps != NULL);
|
fail_unless (caps != NULL);
|
||||||
|
@ -170,7 +170,8 @@ G_STMT_START { \
|
||||||
audioconvert = setup_audioconvert (outcaps); \
|
audioconvert = setup_audioconvert (outcaps); \
|
||||||
\
|
\
|
||||||
incaps = in_get_caps; \
|
incaps = in_get_caps; \
|
||||||
verify_convert (audioconvert, in, sizeof (in), out, sizeof (out), \
|
verify_convert (audioconvert, inarray, sizeof (inarray), \
|
||||||
|
outarray, sizeof (outarray), \
|
||||||
incaps); \
|
incaps); \
|
||||||
\
|
\
|
||||||
/* cleanup */ \
|
/* cleanup */ \
|
||||||
|
@ -184,21 +185,73 @@ GST_START_TEST (test_int16)
|
||||||
gint16 in[] = { 16384, -256, 1024, 1024 };
|
gint16 in[] = { 16384, -256, 1024, 1024 };
|
||||||
gint16 out[] = { 8064, 1024 };
|
gint16 out[] = { 8064, 1024 };
|
||||||
|
|
||||||
RUN_CONVERSION (in, get_int_caps (44100, 2, "LITTLE_ENDIAN", 16, 16, TRUE),
|
RUN_CONVERSION (in, get_int_caps (2, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
out, get_int_caps (44100, 1, "LITTLE_ENDIAN", 16, 16, TRUE));
|
out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE));
|
||||||
}
|
}
|
||||||
/* mono to stereo */
|
/* mono to stereo */
|
||||||
{
|
{
|
||||||
gint16 in[] = { 512, 1024 };
|
gint16 in[] = { 512, 1024 };
|
||||||
gint16 out[] = { 512, 512, 1024, 1024 };
|
gint16 out[] = { 512, 512, 1024, 1024 };
|
||||||
|
|
||||||
RUN_CONVERSION (in, get_int_caps (44100, 1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
out, get_int_caps (44100, 2, "LITTLE_ENDIAN", 16, 16, TRUE));
|
out, get_int_caps (2, "LITTLE_ENDIAN", 16, 16, TRUE));
|
||||||
|
}
|
||||||
|
/* signed -> unsigned */
|
||||||
|
{
|
||||||
|
gint16 in[] = { 0, -32767, 32767, -32768 };
|
||||||
|
guint16 out[] = { 32768, 1, 65535, 0 };
|
||||||
|
|
||||||
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
|
out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, FALSE));
|
||||||
|
RUN_CONVERSION (out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, FALSE),
|
||||||
|
in, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
GST_START_TEST (test_int_conversion)
|
||||||
|
{
|
||||||
|
/* 8 <-> 16 signed */
|
||||||
|
/* NOTE: if audioconvert was doing dithering we'd have a problem */
|
||||||
|
{
|
||||||
|
gint8 in[] = { 0, 1, 2, 127, -127 };
|
||||||
|
gint16 out[] = { 0, 256, 512, 32512, -32512 };
|
||||||
|
|
||||||
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, TRUE),
|
||||||
|
out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE)
|
||||||
|
);
|
||||||
|
RUN_CONVERSION (out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
|
in, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, TRUE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/* 16 -> 8 signed */
|
||||||
|
{
|
||||||
|
gint16 in[] = { 0, 255, 256, 257 };
|
||||||
|
gint8 out[] = { 0, 0, 1, 1 };
|
||||||
|
|
||||||
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
|
out, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, TRUE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/* 8 unsigned <-> 16 signed */
|
||||||
|
/* NOTE: if audioconvert was doing dithering we'd have a problem */
|
||||||
|
{
|
||||||
|
guint8 in[] = { 128, 129, 130, 255, 1 };
|
||||||
|
gint16 out[] = { 0, 256, 512, 32512, -32512 };
|
||||||
|
|
||||||
|
RUN_CONVERSION (in, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, FALSE),
|
||||||
|
out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE)
|
||||||
|
);
|
||||||
|
RUN_CONVERSION (out, get_int_caps (1, "LITTLE_ENDIAN", 16, 16, TRUE),
|
||||||
|
in, get_int_caps (1, "LITTLE_ENDIAN", 8, 8, FALSE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
|
|
||||||
Suite *
|
Suite *
|
||||||
audioconvert_suite (void)
|
audioconvert_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -207,6 +260,7 @@ audioconvert_suite (void)
|
||||||
|
|
||||||
suite_add_tcase (s, tc_chain);
|
suite_add_tcase (s, tc_chain);
|
||||||
tcase_add_test (tc_chain, test_int16);
|
tcase_add_test (tc_chain, test_int16);
|
||||||
|
tcase_add_test (tc_chain, test_int_conversion);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue