[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