From 8e97bca7116197e44ea3b2097f02c38d3dbcbce8 Mon Sep 17 00:00:00 2001 From: Couriersud Date: Sun, 6 Feb 2011 23:36:17 +0000 Subject: [PATCH] Fix yuv factors in palette normalization. The web is full of errors... --- src/lib/util/palette.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib/util/palette.c b/src/lib/util/palette.c index d19bc1338a4..6ba369d8bc6 100644 --- a/src/lib/util/palette.c +++ b/src/lib/util/palette.c @@ -682,8 +682,8 @@ void palette_group_set_contrast(palette_t *palette, UINT32 group, float contrast void palette_normalize_range(palette_t *palette, UINT32 start, UINT32 end, int lum_min, int lum_max) { - UINT32 ymin = 1000 * 255, ymax = 0; - UINT32 tmin, tmax; + INT32 ymin = 1000 * 255, ymax = 0; + INT32 tmin, tmax; UINT32 index; /* clamp within range */ @@ -708,12 +708,12 @@ void palette_normalize_range(palette_t *palette, UINT32 start, UINT32 end, int l { rgb_t rgb = palette->entry_color[index]; INT32 y = 299 * RGB_RED(rgb) + 587 * RGB_GREEN(rgb) + 114 * RGB_BLUE(rgb); - INT32 u = ((INT32)RGB_BLUE(rgb)-y /1000)*565 / 1000; - INT32 v = ((INT32)RGB_RED(rgb)-y / 1000)*713 / 1000; + INT32 u = ((INT32)RGB_BLUE(rgb)-y /1000)*492 / 1000; + INT32 v = ((INT32)RGB_RED(rgb)-y / 1000)*877 / 1000; INT32 target = tmin + ((y - ymin) * (tmax - tmin + 1)) / (ymax - ymin); - UINT8 r = rgb_clamp(target + 1403 * v / 1000); - UINT8 g = rgb_clamp(target - 344 * u / 1000 - 714 * v / 1000); - UINT8 b = rgb_clamp(target + 1770 * u / 1000); + UINT8 r = rgb_clamp(target + 1140 * v / 1000); + UINT8 g = rgb_clamp(target - 395 * u / 1000 - 581 * v / 1000); + UINT8 b = rgb_clamp(target + 2032 * u / 1000); palette_entry_set_color(palette, index, MAKE_RGB(r, g, b)); } }