[PATCH RFC 5/6] drm/omap: csc full range support

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Apr 21 11:55:47 UTC 2017


Hi Jyri,

Thank you for the patch.

On Friday 21 Apr 2017 12:51:16 Jyri Sarha wrote:
> 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 */
> +	};

Shouldn't all those tables be static const ?

With that fixed,

Reviewed-by: Laurent Pinchart <laurent.pinchart at 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)

-- 
Regards,

Laurent Pinchart



More information about the dri-devel mailing list