diff --git a/tests/color-icc-output-test.c b/tests/color-icc-output-test.c index 6c354888..0efdcfe2 100644 --- a/tests/color-icc-output-test.c +++ b/tests/color-icc-output-test.c @@ -186,61 +186,6 @@ get_image_prop(struct buffer *buf, struct image_header *header) header->data = pixman_image_get_data(buf->image); } -static void -gen_ramp_rgb(const struct image_header *header, int bitwidth, int width_bar) -{ - static const int hue[][COLOR_CHAN_NUM] = { - { 1, 1, 1 }, /* White */ - { 1, 1, 0 }, /* Yellow */ - { 0, 1, 1 }, /* Cyan */ - { 0, 1, 0 }, /* Green */ - { 1, 0, 1 }, /* Magenta */ - { 1, 0, 0 }, /* Red */ - { 0, 0, 1 }, /* Blue */ - }; - const int num_hues = ARRAY_LENGTH(hue); - - float val_max; - int x, y; - int hue_index; - int chan; - float value; - unsigned char r, g, b; - uint32_t *pixel; - - float n_steps = width_bar - 1; - - val_max = (1 << bitwidth) - 1; - - for (y = 0; y < header->height; y++) { - hue_index = (y * num_hues) / (header->height - 1); - hue_index = MIN(hue_index, num_hues - 1); - - for (x = 0; x < header->width; x++) { - struct color_float rgb = { .rgb = { 0, 0, 0 } }; - - value = (float)x / (float)(header->width - 1); - - if (width_bar > 1) - value = floor(value * n_steps) / n_steps; - - for (chan = 0; chan < COLOR_CHAN_NUM; chan++) { - if (hue[hue_index][chan]) - rgb.rgb[chan] = value; - } - - sRGB_delinearize(&rgb); - - r = round(rgb.r * val_max); - g = round(rgb.g * val_max); - b = round(rgb.b * val_max); - - pixel = header->data + (y * header->stride / 4) + x; - *pixel = (255U << 24) | (r << 16) | (g << 8) | b; - } - } -} - static void test_roundtrip(uint8_t r, uint8_t g, uint8_t b, cmsPipeline *pip, struct rgb_diff_stat *stat) @@ -540,6 +485,61 @@ fixture_setup(struct weston_test_harness *harness, const struct setup_args *arg) } DECLARE_FIXTURE_SETUP_WITH_ARG(fixture_setup, my_setup_args, meta); +static void +gen_ramp_rgb(const struct image_header *header, int bitwidth, int width_bar) +{ + static const int hue[][COLOR_CHAN_NUM] = { + { 1, 1, 1 }, /* White */ + { 1, 1, 0 }, /* Yellow */ + { 0, 1, 1 }, /* Cyan */ + { 0, 1, 0 }, /* Green */ + { 1, 0, 1 }, /* Magenta */ + { 1, 0, 0 }, /* Red */ + { 0, 0, 1 }, /* Blue */ + }; + const int num_hues = ARRAY_LENGTH(hue); + + float val_max; + int x, y; + int hue_index; + int chan; + float value; + unsigned char r, g, b; + uint32_t *pixel; + + float n_steps = width_bar - 1; + + val_max = (1 << bitwidth) - 1; + + for (y = 0; y < header->height; y++) { + hue_index = (y * num_hues) / (header->height - 1); + hue_index = MIN(hue_index, num_hues - 1); + + for (x = 0; x < header->width; x++) { + struct color_float rgb = { .rgb = { 0, 0, 0 } }; + + value = (float)x / (float)(header->width - 1); + + if (width_bar > 1) + value = floor(value * n_steps) / n_steps; + + for (chan = 0; chan < COLOR_CHAN_NUM; chan++) { + if (hue[hue_index][chan]) + rgb.rgb[chan] = value; + } + + sRGB_delinearize(&rgb); + + r = round(rgb.r * val_max); + g = round(rgb.g * val_max); + b = round(rgb.b * val_max); + + pixel = header->data + (y * header->stride / 4) + x; + *pixel = (255U << 24) | (r << 16) | (g << 8) | b; + } + } +} + static bool compare_float(float ref, float dst, int x, const char *chan, float *max_diff, float max_allow_diff)