[PATCH RFC 5/6] drm/omap: csc full range support
Jyri Sarha
jsarha at ti.com
Fri Apr 21 09:51:16 UTC 2017
From: Tomi Valkeinen <tomi.valkeinen at 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.valkeinen at ti.com>
Signed-off-by: Jyri Sarha <jsarha at 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
More information about the dri-devel
mailing list