From: Tomi Valkeinen <tomi.valkei...@ti.com>

At the moment the driver always uses limited range when doing YUV-RGB
conversions. This patch adds full-range tables, and makes the code to
always use full-range tables.

In the future we should allow the user to select the color range instead
of hardcoding it.

Signed-off-by: Tomi Valkeinen <tomi.valkei...@ti.com>
Signed-off-by: Jyri Sarha <jsa...@ti.com>
---
 drivers/gpu/drm/omapdrm/dss/dispc.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c 
b/drivers/gpu/drm/omapdrm/dss/dispc.c
index b53e63d..f2a2d08 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -799,6 +799,8 @@ static void dispc_setup_color_conv_coef(void)
 {
        int i;
        int num_ovl = dss_feat_get_num_ovls();
+       /* always use full range for now */
+       bool use_full_range = true;
 
        /* YUV -> RGB, ITU-R BT.601, limited range */
        const struct csc_coef_yuv2rgb coefs_yuv2rgb_bt601_lim = {
@@ -808,6 +810,14 @@ static void dispc_setup_color_conv_coef(void)
                false,                  /* limited range */
        };
 
+       /* YUV -> RGB, ITU-R BT.601, full range */
+       const struct csc_coef_yuv2rgb coefs_yuv2rgb_bt601_full = {
+               256,   0,  358,         /* ry, rcb, rcr */
+               256, -88, -182,         /* gy, gcb, gcr */
+               256, 452,    0,         /* by, bcb, bcr */
+               true,                   /* full range */
+       };
+
        /* RGB -> YUV, ITU-R BT.601, limited range */
        const struct csc_coef_rgb2yuv coefs_rgb2yuv_bt601_lim = {
                 66, 129,  25,          /* yr,   yg,  yb */
@@ -816,11 +826,30 @@ static void dispc_setup_color_conv_coef(void)
                false,                  /* limited range */
        };
 
+       /* RGB -> YUV, ITU-R BT.601, full range */
+       const struct csc_coef_rgb2yuv coefs_rgb2yuv_bt601_full = {
+                77,  150,  29,         /* yr,   yg,  yb */
+               -43,  -85, 128,         /* cbr, cbg, cbb */
+               128, -107, -21,         /* crr, crg, crb */
+               true,                   /* full range */
+       };
+
+       const struct csc_coef_yuv2rgb *yuv2rgb;
+       const struct csc_coef_rgb2yuv *rgb2yuv;
+
+       if (use_full_range) {
+               yuv2rgb = &coefs_yuv2rgb_bt601_full;
+               rgb2yuv = &coefs_rgb2yuv_bt601_full;
+       } else {
+               yuv2rgb = &coefs_yuv2rgb_bt601_lim;
+               rgb2yuv = &coefs_rgb2yuv_bt601_lim;
+       }
+
        for (i = 1; i < num_ovl; i++)
-               dispc_ovl_write_color_conv_coef(i, &coefs_yuv2rgb_bt601_lim);
+               dispc_ovl_write_color_conv_coef(i, yuv2rgb);
 
        if (dispc.feat->has_writeback)
-               dispc_wb_write_color_conv_coef(&coefs_rgb2yuv_bt601_lim);
+               dispc_wb_write_color_conv_coef(rgb2yuv);
 }
 
 static void dispc_ovl_set_ba0(enum omap_plane_id plane, u32 paddr)
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to