mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 04:31:06 +00:00
tests: video: speed up test_video_color_convert
This test takes a long time. It tests ca. 8900 conversion combinations, and then it also runs each conversion for at least 100ms in order to come up with some kind of benchmark. Remove the benchmarking from the unit test, we have a separate benchmarking tool for that now. Also split the conversions into groups and run those as separate checks, which allows better parallelisation at the runner level (normal runs and when using valgrind).
This commit is contained in:
parent
b05e70ea94
commit
3288093c75
1 changed files with 75 additions and 44 deletions
|
@ -2387,20 +2387,39 @@ GST_START_TEST (test_video_scaler)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RGB,
|
||||
YUV,
|
||||
OTHER
|
||||
} ColorType;
|
||||
|
||||
#define WIDTH 320
|
||||
#define HEIGHT 240
|
||||
#define TIME 0.01
|
||||
|
||||
GST_START_TEST (test_video_color_convert)
|
||||
static gboolean
|
||||
check_video_format_is_type (GstVideoFormat fmt, ColorType fmt_type)
|
||||
{
|
||||
const GstVideoFormatInfo *info = gst_video_format_get_info (fmt);
|
||||
gboolean is_rgb = GST_VIDEO_FORMAT_INFO_IS_RGB (info);
|
||||
gboolean is_yuv = GST_VIDEO_FORMAT_INFO_IS_YUV (info);
|
||||
|
||||
switch (fmt_type) {
|
||||
case RGB:
|
||||
return is_rgb;
|
||||
case YUV:
|
||||
return is_yuv;
|
||||
case OTHER:
|
||||
break;
|
||||
}
|
||||
return !is_rgb && !is_yuv;
|
||||
}
|
||||
|
||||
static void
|
||||
run_video_color_convert (ColorType in_type, ColorType out_type)
|
||||
{
|
||||
GstVideoFormat infmt, outfmt;
|
||||
GTimer *timer;
|
||||
gint num_formats, i;
|
||||
GArray *array;
|
||||
|
||||
array = g_array_new (FALSE, FALSE, sizeof (ConvertResult));
|
||||
|
||||
timer = g_timer_new ();
|
||||
gint num_formats;
|
||||
|
||||
num_formats = get_num_formats ();
|
||||
|
||||
|
@ -2409,6 +2428,9 @@ GST_START_TEST (test_video_color_convert)
|
|||
GstVideoFrame inframe;
|
||||
GstBuffer *inbuffer;
|
||||
|
||||
if (!check_video_format_is_type (infmt, in_type))
|
||||
continue;
|
||||
|
||||
fail_unless (gst_video_info_set_format (&ininfo, infmt, WIDTH, HEIGHT));
|
||||
inbuffer = gst_buffer_new_and_alloc (ininfo.size);
|
||||
gst_buffer_memset (inbuffer, 0, 0, -1);
|
||||
|
@ -2419,39 +2441,21 @@ GST_START_TEST (test_video_color_convert)
|
|||
GstVideoFrame outframe;
|
||||
GstBuffer *outbuffer;
|
||||
GstVideoConverter *convert;
|
||||
gdouble elapsed;
|
||||
gint count;
|
||||
ConvertResult res;
|
||||
|
||||
if (!check_video_format_is_type (outfmt, out_type))
|
||||
continue;
|
||||
|
||||
GST_LOG ("%s -> %s @ %ux%u", gst_video_format_to_string (infmt),
|
||||
gst_video_format_to_string (outfmt), WIDTH, HEIGHT);
|
||||
|
||||
fail_unless (gst_video_info_set_format (&outinfo, outfmt, WIDTH, HEIGHT));
|
||||
outbuffer = gst_buffer_new_and_alloc (outinfo.size);
|
||||
gst_video_frame_map (&outframe, &outinfo, outbuffer, GST_MAP_WRITE);
|
||||
|
||||
convert = gst_video_converter_new (&ininfo, &outinfo, NULL);
|
||||
/* warmup */
|
||||
|
||||
gst_video_converter_frame (convert, &inframe, &outframe);
|
||||
|
||||
count = 0;
|
||||
g_timer_start (timer);
|
||||
while (TRUE) {
|
||||
gst_video_converter_frame (convert, &inframe, &outframe);
|
||||
|
||||
count++;
|
||||
elapsed = g_timer_elapsed (timer, NULL);
|
||||
if (elapsed >= TIME)
|
||||
break;
|
||||
}
|
||||
|
||||
res.infmt = infmt;
|
||||
res.outfmt = outfmt;
|
||||
res.convert_sec = count / elapsed;
|
||||
|
||||
GST_DEBUG ("%f conversions/sec %s->%s, %d/%f", res.convert_sec,
|
||||
gst_video_format_to_string (infmt),
|
||||
gst_video_format_to_string (outfmt), count, elapsed);
|
||||
|
||||
g_array_append_val (array, res);
|
||||
|
||||
gst_video_converter_free (convert);
|
||||
|
||||
gst_video_frame_unmap (&outframe);
|
||||
|
@ -2460,20 +2464,43 @@ GST_START_TEST (test_video_color_convert)
|
|||
gst_video_frame_unmap (&inframe);
|
||||
gst_buffer_unref (inbuffer);
|
||||
}
|
||||
}
|
||||
|
||||
g_array_sort (array, compare_result);
|
||||
GST_START_TEST (test_video_color_convert_rgb_rgb)
|
||||
{
|
||||
run_video_color_convert (RGB, RGB);
|
||||
}
|
||||
|
||||
for (i = 0; i < array->len; i++) {
|
||||
ConvertResult *res = &g_array_index (array, ConvertResult, i);
|
||||
GST_END_TEST;
|
||||
|
||||
GST_DEBUG ("%f conversions/sec %s->%s", res->convert_sec,
|
||||
gst_video_format_to_string (res->infmt),
|
||||
gst_video_format_to_string (res->outfmt));
|
||||
}
|
||||
GST_START_TEST (test_video_color_convert_rgb_yuv)
|
||||
{
|
||||
run_video_color_convert (RGB, YUV);
|
||||
}
|
||||
|
||||
g_array_free (array, TRUE);
|
||||
GST_END_TEST;
|
||||
|
||||
g_timer_destroy (timer);
|
||||
GST_START_TEST (test_video_color_convert_yuv_yuv)
|
||||
{
|
||||
run_video_color_convert (YUV, YUV);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
GST_START_TEST (test_video_color_convert_yuv_rgb)
|
||||
{
|
||||
run_video_color_convert (YUV, RGB);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
GST_START_TEST (test_video_color_convert_other)
|
||||
{
|
||||
run_video_color_convert (OTHER, RGB);
|
||||
run_video_color_convert (RGB, OTHER);
|
||||
run_video_color_convert (OTHER, YUV);
|
||||
run_video_color_convert (YUV, OTHER);
|
||||
run_video_color_convert (OTHER, OTHER);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
@ -3030,7 +3057,11 @@ video_suite (void)
|
|||
tcase_add_test (tc_chain, test_video_pack_unpack2);
|
||||
tcase_add_test (tc_chain, test_video_chroma);
|
||||
tcase_add_test (tc_chain, test_video_scaler);
|
||||
tcase_add_test (tc_chain, test_video_color_convert);
|
||||
tcase_add_test (tc_chain, test_video_color_convert_rgb_rgb);
|
||||
tcase_add_test (tc_chain, test_video_color_convert_rgb_yuv);
|
||||
tcase_add_test (tc_chain, test_video_color_convert_yuv_yuv);
|
||||
tcase_add_test (tc_chain, test_video_color_convert_yuv_rgb);
|
||||
tcase_add_test (tc_chain, test_video_color_convert_other);
|
||||
tcase_add_test (tc_chain, test_video_size_convert);
|
||||
tcase_add_test (tc_chain, test_video_convert);
|
||||
tcase_add_test (tc_chain, test_video_transfer);
|
||||
|
|
Loading…
Reference in a new issue