From 816e82e2652e1a8611fb99899b039755dc125a46 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Fri, 16 Mar 2018 14:57:03 +0900 Subject: [PATCH] buffers: fill 0xFF for alpha bits if XRGB8888 Change-Id: I11fe1caf16c54a927aaf935504d26b8e01d95337 --- tools/buffers.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/tools/buffers.c b/tools/buffers.c index 4d66f12..5cf58ef 100644 --- a/tools/buffers.c +++ b/tools/buffers.c @@ -125,7 +125,7 @@ static const struct format_info format_info[] = { { TBM_FORMAT_RGB888, "RG24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 0, 0) }, /* RGB32 */ { TBM_FORMAT_ARGB8888, "AR24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 8, 24) }, - { TBM_FORMAT_XRGB8888, "XR24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 0, 0) }, + { TBM_FORMAT_XRGB8888, "XR24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 0, 24) }, { TBM_FORMAT_ABGR8888, "AB24", MAKE_RGB_INFO(8, 0, 8, 8, 8, 16, 8, 24) }, { TBM_FORMAT_XBGR8888, "XB24", MAKE_RGB_INFO(8, 0, 8, 8, 8, 16, 0, 0) }, { TBM_FORMAT_RGBA8888, "RA24", MAKE_RGB_INFO(8, 24, 8, 16, 8, 8, 8, 0) }, @@ -186,6 +186,12 @@ struct color_yuv { (((b) >> (8 - (rgb)->blue.length)) << (rgb)->blue.offset) | \ (((a) >> (8 - (rgb)->alpha.length)) << (rgb)->alpha.offset)) +#define MAKE_RGBX(rgb, r, g, b) \ + ((((r) >> (8 - (rgb)->red.length)) << (rgb)->red.offset) | \ + (((g) >> (8 - (rgb)->green.length)) << (rgb)->green.offset) | \ + (((b) >> (8 - (rgb)->blue.length)) << (rgb)->blue.offset) | \ + (255 << (rgb)->alpha.offset)) + #define MAKE_RGB24(rgb, r, g, b) \ { .value = MAKE_RGBA(rgb, r, g, b, 0) } @@ -592,6 +598,70 @@ fill_smpte_rgb32(const struct rgb_info *rgb, unsigned char *mem, } static void +fill_smpte_rgb32_dont_care_alpha(const struct rgb_info *rgb, unsigned char *mem, + unsigned int width, unsigned int height, unsigned int stride) +{ + const uint32_t colors_top[] = { + MAKE_RGBX(rgb, 192, 192, 192), /* grey */ + MAKE_RGBX(rgb, 192, 192, 0), /* yellow */ + MAKE_RGBX(rgb, 0, 192, 192), /* cyan */ + MAKE_RGBX(rgb, 0, 192, 0), /* green */ + MAKE_RGBX(rgb, 192, 0, 192), /* magenta */ + MAKE_RGBX(rgb, 192, 0, 0), /* red */ + MAKE_RGBX(rgb, 0, 0, 192), /* blue */ + }; + const uint32_t colors_middle[] = { + MAKE_RGBX(rgb, 0, 0, 192), /* blue */ + MAKE_RGBX(rgb, 19, 19, 19), /* black */ + MAKE_RGBX(rgb, 192, 0, 192), /* magenta */ + MAKE_RGBX(rgb, 19, 19, 19), /* black */ + MAKE_RGBX(rgb, 0, 192, 192), /* cyan */ + MAKE_RGBX(rgb, 19, 19, 19), /* black */ + MAKE_RGBX(rgb, 192, 192, 192), /* grey */ + }; + const uint32_t colors_bottom[] = { + MAKE_RGBX(rgb, 0, 33, 76), /* in-phase */ + MAKE_RGBX(rgb, 255, 255, 255), /* super white */ + MAKE_RGBX(rgb, 50, 0, 106), /* quadrature */ + MAKE_RGBX(rgb, 19, 19, 19), /* black */ + MAKE_RGBX(rgb, 9, 9, 9), /* 3.5% */ + MAKE_RGBX(rgb, 19, 19, 19), /* 7.5% */ + MAKE_RGBX(rgb, 29, 29, 29), /* 11.5% */ + MAKE_RGBX(rgb, 19, 19, 19), /* black */ + }; + unsigned int x; + unsigned int y; + + if (width < 8) + return; + + for (y = 0; y < height * 6 / 9; ++y) { + for (x = 0; x < width; ++x) + ((uint32_t *)mem)[x] = colors_top[x * 7 / width]; + mem += stride; + } + + for (; y < height * 7 / 9; ++y) { + for (x = 0; x < width; ++x) + ((uint32_t *)mem)[x] = colors_middle[x * 7 / width]; + mem += stride; + } + + for (; y < height; ++y) { + for (x = 0; x < width * 5 / 7; ++x) + ((uint32_t *)mem)[x] = + colors_bottom[x * 4 / (width * 5 / 7)]; + for (; x < width * 6 / 7; ++x) + ((uint32_t *)mem)[x] = + colors_bottom[(x - width * 5 / 7) * 3 + / (width / 7) + 4]; + for (; x < width; ++x) + ((uint32_t *)mem)[x] = (rand_r(&rand_seed) % 2) ? MAKE_RGBX(rgb, 255, 255, 255) : MAKE_RGBX(rgb, 0, 0, 0); + mem += stride; + } +} + +static void fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, unsigned int height, unsigned int stride) { @@ -648,7 +718,6 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, return fill_smpte_rgb24(&info->rgb, planes[0], width, height, stride); case TBM_FORMAT_ARGB8888: - case TBM_FORMAT_XRGB8888: case TBM_FORMAT_ABGR8888: case TBM_FORMAT_XBGR8888: case TBM_FORMAT_RGBA8888: @@ -665,6 +734,9 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, case TBM_FORMAT_BGRX1010102: return fill_smpte_rgb32(&info->rgb, planes[0], width, height, stride); + case TBM_FORMAT_XRGB8888: + return fill_smpte_rgb32_dont_care_alpha(&info->rgb, planes[0], + width, height, stride); } } -- 2.7.4