Hi Jyri,
Thank you for the patch.
On Friday 21 Apr 2017 12:51:16 Jyri Sarha wrote:
From: Tomi Valkeinen tomi.valkeinen@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@ti.com Signed-off-by: Jyri Sarha jsarha@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 */
- };
Shouldn't all those tables be static const ?
With that fixed,
Reviewed-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
- /* 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)