From 128506eeb1a2d87393061b4c9783289a5e4b3275 Mon Sep 17 00:00:00 2001 From: Aaron Carlisle Date: Sun, 29 Apr 2018 18:00:45 -0400 Subject: BLI Color: YUV to/from rgb colorspace option This commit does two things: - Adds an option to do the calculation in different color spaces (BT601 or BT709). - Changes the default caluclation from legacy BT601 to BT709. This affects several areas: - UI areas (mainly scopes) - ViewLevelsNode - Several other nodes that use `COM_ConvertOperation.h` --- source/blender/blenlib/intern/math_color.c | 37 +++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'source/blender/blenlib/intern/math_color.c') diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c index 6d7d24c79c3..a091595bc6c 100644 --- a/source/blender/blenlib/intern/math_color.c +++ b/source/blender/blenlib/intern/math_color.c @@ -83,24 +83,45 @@ void hsl_to_rgb_v(const float hsl[3], float r_rgb[3]) hsl_to_rgb(hsl[0], hsl[1], hsl[2], &r_rgb[0], &r_rgb[1], &r_rgb[2]); } -void rgb_to_yuv(float r, float g, float b, float *ly, float *lu, float *lv) +void rgb_to_yuv(float r, float g, float b, float *ly, float *lu, float *lv, int colorspace) { float y, u, v; - y = 0.299f * r + 0.587f * g + 0.114f * b; - u = -0.147f * r - 0.289f * g + 0.436f * b; - v = 0.615f * r - 0.515f * g - 0.100f * b; + + switch (colorspace) { + case BLI_YUV_ITU_BT601: + y = 0.299f * r + 0.587f * g + 0.114f * b; + u = -0.147f * r - 0.289f * g + 0.436f * b; + v = 0.615f * r - 0.515f * g - 0.100f * b; + break; + case BLI_YUV_ITU_BT709: + default: + y = 0.2126f * r + 0.7152f * g + 0.0722f * b; + u = -0.09991f * r - 0.33609f * g + 0.436f * b; + v = 0.615f * r - 0.55861f * g - 0.05639f * b; + break; + } *ly = y; *lu = u; *lv = v; } -void yuv_to_rgb(float y, float u, float v, float *lr, float *lg, float *lb) +void yuv_to_rgb(float y, float u, float v, float *lr, float *lg, float *lb, int colorspace) { float r, g, b; - r = y + 1.140f * v; - g = y - 0.394f * u - 0.581f * v; - b = y + 2.032f * u; + + switch (colorspace) { + case BLI_YUV_ITU_BT601: + r = y + 1.140f * v; + g = y - 0.394f * u - 0.581f * v; + b = y + 2.032f * u; + break; + case BLI_YUV_ITU_BT709: + r = y + 1.28033f * v; + g = y - 0.21482f * u - 0.38059f * v; + b = y + 2.12798f * u; + break; + } *lr = r; *lg = g; -- cgit v1.2.3