intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/2] drm/i915/GLK: Properly handle plane CSC for BT2020 framebuffers
@ 2019-05-07 13:02 Shashank Sharma
  2019-05-07 13:02 ` [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case Shashank Sharma
  0 siblings, 1 reply; 10+ messages in thread
From: Shashank Sharma @ 2019-05-07 13:02 UTC (permalink / raw)
  To: intel-gfx; +Cc: Maarten Lankhorst

Framebuffer formats P01x are supported by GLK, but the function which
handles CSC on plane color control register, still expectes the input
buffer to be REC709. This can cause inaccurate output for direct P01x
flips.

This patch checks if the color_encoding property is set to YCBCR_2020,
and enables the corresponding color conversion mode on plane CSC.

PS: renamed variable plane_color_ctl to color_ctl for 80 char stuff.

V2: Expose the YCBCR_BT2020 value in enum values of supported encoding
    formats.
V3: Fixed the missing BIT() while setting supported_encodings
    (Lukas, team Kodi)

Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@intel.com>
Cc: Uma Shankar <uma.shankar@intel.com>
Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 26 ++++++++++++++++----------
 drivers/gpu/drm/i915/intel_sprite.c  | 10 ++++++++--
 2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index dd65d7c521c1..2d4d3128bf1f 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3868,24 +3868,30 @@ u32 glk_plane_color_ctl(const struct intel_crtc_state *crtc_state,
 		to_i915(plane_state->base.plane->dev);
 	const struct drm_framebuffer *fb = plane_state->base.fb;
 	struct intel_plane *plane = to_intel_plane(plane_state->base.plane);
-	u32 plane_color_ctl = 0;
+	u32 color_ctl = 0;
 
-	plane_color_ctl |= PLANE_COLOR_PLANE_GAMMA_DISABLE;
-	plane_color_ctl |= glk_plane_color_ctl_alpha(plane_state);
+	color_ctl |= PLANE_COLOR_PLANE_GAMMA_DISABLE;
+	color_ctl |= glk_plane_color_ctl_alpha(plane_state);
 
 	if (fb->format->is_yuv && !icl_is_hdr_plane(dev_priv, plane->id)) {
-		if (plane_state->base.color_encoding == DRM_COLOR_YCBCR_BT709)
-			plane_color_ctl |= PLANE_COLOR_CSC_MODE_YUV709_TO_RGB709;
-		else
-			plane_color_ctl |= PLANE_COLOR_CSC_MODE_YUV601_TO_RGB709;
+		switch (plane_state->base.color_encoding) {
+		case DRM_COLOR_YCBCR_BT709:
+			color_ctl |= PLANE_COLOR_CSC_MODE_YUV709_TO_RGB709;
+			break;
+		case DRM_COLOR_YCBCR_BT2020:
+			color_ctl |= PLANE_COLOR_CSC_MODE_YUV2020_TO_RGB2020;
+			break;
+		default:
+			color_ctl |= PLANE_COLOR_CSC_MODE_YUV601_TO_RGB709;
+		}
 
 		if (plane_state->base.color_range == DRM_COLOR_YCBCR_FULL_RANGE)
-			plane_color_ctl |= PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE;
+			color_ctl |= PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE;
 	} else if (fb->format->is_yuv) {
-		plane_color_ctl |= PLANE_COLOR_INPUT_CSC_ENABLE;
+		color_ctl |= PLANE_COLOR_INPUT_CSC_ENABLE;
 	}
 
-	return plane_color_ctl;
+	return color_ctl;
 }
 
 static int
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 2913e89280d7..44aaeac1b2ed 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -2238,6 +2238,7 @@ skl_universal_plane_create(struct drm_i915_private *dev_priv,
 	struct intel_plane *plane;
 	enum drm_plane_type plane_type;
 	unsigned int supported_rotations;
+	unsigned int supported_encodings;
 	unsigned int possible_crtcs;
 	const u64 *modifiers;
 	const u32 *formats;
@@ -2325,9 +2326,14 @@ skl_universal_plane_create(struct drm_i915_private *dev_priv,
 					   DRM_MODE_ROTATE_0,
 					   supported_rotations);
 
+	supported_encodings = BIT(DRM_COLOR_YCBCR_BT601) |
+			      BIT(DRM_COLOR_YCBCR_BT709);
+
+	if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))
+		supported_encodings |= BIT(DRM_COLOR_YCBCR_BT2020);
+
 	drm_plane_create_color_properties(&plane->base,
-					  BIT(DRM_COLOR_YCBCR_BT601) |
-					  BIT(DRM_COLOR_YCBCR_BT709),
+					  supported_encodings,
 					  BIT(DRM_COLOR_YCBCR_LIMITED_RANGE) |
 					  BIT(DRM_COLOR_YCBCR_FULL_RANGE),
 					  DRM_COLOR_YCBCR_BT709,
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-07 13:02 [PATCH v3 1/2] drm/i915/GLK: Properly handle plane CSC for BT2020 framebuffers Shashank Sharma
@ 2019-05-07 13:02 ` Shashank Sharma
  2019-05-07 14:06   ` Ville Syrjälä
  0 siblings, 1 reply; 10+ messages in thread
From: Shashank Sharma @ 2019-05-07 13:02 UTC (permalink / raw)
  To: intel-gfx

From: Uma Shankar <uma.shankar@intel.com>

Currently input csc for YCbCR to RGB conversion handles only
BT601 and Bt709. Extending it to support BT2020 as well.

Signed-off-by: Uma Shankar <uma.shankar@intel.com>
Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
---
 drivers/gpu/drm/i915/intel_sprite.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 44aaeac1b2ed..2536e757bec2 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
 			0x9EF8, 0x7800, 0xABF8,
 			0x0, 0x7800,  0x7ED8,
 		},
+		/*
+		 * BT.2020 full range YCbCr -> full range RGB
+		 * The matrix required is :
+		 * [1.000, 0.000, 1.474,
+		 *  1.000, -0.1645, -0.5713,
+		 *  1.000, 1.8814, 0.0000]
+		 */
+		[DRM_COLOR_YCBCR_BT2020] = {
+			0x7BC8, 0x7800, 0x0,
+			0x8928, 0x7800, 0xAA88,
+			0x0, 0x7800, 0x7F10,
+		},
 	};
 
 	/* Matrix for Limited Range to Full Range Conversion */
@@ -461,6 +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
 			0x8888, 0x7918, 0xADA8,
 			0x0, 0x7918,  0x6870,
 		},
+		/*
+		 * BT.2020 Limited range YCbCr -> full range RGB
+		 * The matrix required is :
+		 * [1.164, 0.000, 1.717,
+		 *  1.138, -0.1873, -0.6504,
+		 *  1.1380, 2.1417, 0.0000]
+		 */
+		[DRM_COLOR_YCBCR_BT2020] = {
+			0x7DC0, 0x7950, 0x0,
+			0x8A68, 0x7918, 0xAC00,
+			0x0, 0x7918, 0x6890,
+		},
 	};
 	const u16 *csc;
 
-- 
2.17.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-07 13:02 ` [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case Shashank Sharma
@ 2019-05-07 14:06   ` Ville Syrjälä
  2019-05-07 14:35     ` Shankar, Uma
  0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2019-05-07 14:06 UTC (permalink / raw)
  To: Shashank Sharma; +Cc: intel-gfx

On Tue, May 07, 2019 at 06:32:57PM +0530, Shashank Sharma wrote:
> From: Uma Shankar <uma.shankar@intel.com>
> 
> Currently input csc for YCbCR to RGB conversion handles only
> BT601 and Bt709. Extending it to support BT2020 as well.
> 
> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_sprite.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> index 44aaeac1b2ed..2536e757bec2 100644
> --- a/drivers/gpu/drm/i915/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> @@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
>  			0x9EF8, 0x7800, 0xABF8,
>  			0x0, 0x7800,  0x7ED8,
>  		},
> +		/*
> +		 * BT.2020 full range YCbCr -> full range RGB
> +		 * The matrix required is :
> +		 * [1.000, 0.000, 1.474,
> +		 *  1.000, -0.1645, -0.5713,
> +		 *  1.000, 1.8814, 0.0000]
> +		 */
> +		[DRM_COLOR_YCBCR_BT2020] = {
> +			0x7BC8, 0x7800, 0x0,
> +			0x8928, 0x7800, 0xAA88,
> +			0x0, 0x7800, 0x7F10,
> +		},
>  	};
>  
>  	/* Matrix for Limited Range to Full Range Conversion */
> @@ -461,6 +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
>  			0x8888, 0x7918, 0xADA8,
>  			0x0, 0x7918,  0x6870,
>  		},
> +		/*
> +		 * BT.2020 Limited range YCbCr -> full range RGB
> +		 * The matrix required is :
> +		 * [1.164, 0.000, 1.717,
> +		 *  1.138, -0.1873, -0.6504,
> +		 *  1.1380, 2.1417, 0.0000]

Where are those 1.138 coming from?

> +		 */
> +		[DRM_COLOR_YCBCR_BT2020] = {
> +			0x7DC0, 0x7950, 0x0,
> +			0x8A68, 0x7918, 0xAC00,
> +			0x0, 0x7918, 0x6890,
> +		},
>  	};
>  	const u16 *csc;
>  
> -- 
> 2.17.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-07 14:06   ` Ville Syrjälä
@ 2019-05-07 14:35     ` Shankar, Uma
  2019-05-07 15:38       ` Ville Syrjälä
  0 siblings, 1 reply; 10+ messages in thread
From: Shankar, Uma @ 2019-05-07 14:35 UTC (permalink / raw)
  To: Ville Syrjälä, Sharma, Shashank; +Cc: intel-gfx@lists.freedesktop.org



>-----Original Message-----
>From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Ville
>Syrjälä
>Sent: Tuesday, May 7, 2019 7:37 PM
>To: Sharma, Shashank <shashank.sharma@intel.com>
>Cc: intel-gfx@lists.freedesktop.org
>Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for
>BT2020 case
>
>On Tue, May 07, 2019 at 06:32:57PM +0530, Shashank Sharma wrote:
>> From: Uma Shankar <uma.shankar@intel.com>
>>
>> Currently input csc for YCbCR to RGB conversion handles only
>> BT601 and Bt709. Extending it to support BT2020 as well.
>>
>> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
>> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
>> ---
>>  drivers/gpu/drm/i915/intel_sprite.c | 24 ++++++++++++++++++++++++
>>  1 file changed, 24 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
>> b/drivers/gpu/drm/i915/intel_sprite.c
>> index 44aaeac1b2ed..2536e757bec2 100644
>> --- a/drivers/gpu/drm/i915/intel_sprite.c
>> +++ b/drivers/gpu/drm/i915/intel_sprite.c
>> @@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
>>  			0x9EF8, 0x7800, 0xABF8,
>>  			0x0, 0x7800,  0x7ED8,
>>  		},
>> +		/*
>> +		 * BT.2020 full range YCbCr -> full range RGB
>> +		 * The matrix required is :
>> +		 * [1.000, 0.000, 1.474,
>> +		 *  1.000, -0.1645, -0.5713,
>> +		 *  1.000, 1.8814, 0.0000]
>> +		 */
>> +		[DRM_COLOR_YCBCR_BT2020] = {
>> +			0x7BC8, 0x7800, 0x0,
>> +			0x8928, 0x7800, 0xAA88,
>> +			0x0, 0x7800, 0x7F10,
>> +		},
>>  	};
>>
>>  	/* Matrix for Limited Range to Full Range Conversion */ @@ -461,6
>> +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
>>  			0x8888, 0x7918, 0xADA8,
>>  			0x0, 0x7918,  0x6870,
>>  		},
>> +		/*
>> +		 * BT.2020 Limited range YCbCr -> full range RGB
>> +		 * The matrix required is :
>> +		 * [1.164, 0.000, 1.717,
>> +		 *  1.138, -0.1873, -0.6504,
>> +		 *  1.1380, 2.1417, 0.0000]
>
>Where are those 1.138 coming from?

Hi Ville,
This is the original YCBCR to RGB BT2020 matrix:
{
        1.00000000000,  0.00000000000,  1.47460000000,
        1.00000000000,  -0.16455312684, -0.57135312684,
        1.00000000000,  1.88140000000,  0.00000000000
};

We have to convert Limited Range YCbCr to Full Range RGB. Hence we need to apply a scale factor:
 yscalefactor = 219.0 * normalizingfactor;
 cbcrscalefactor = 224.0 * normalizingfactor;

 /* Scale factors are inverted for LR to FR conversion */
 yscalefactor = 1.0 / yscalefactor;
 cbcrscalefactor = 1.0 / cbcrscalefactor;

This yields the above results. 

Regards,
Uma Shankar

>> +		 */
>> +		[DRM_COLOR_YCBCR_BT2020] = {
>> +			0x7DC0, 0x7950, 0x0,
>> +			0x8A68, 0x7918, 0xAC00,
>> +			0x0, 0x7918, 0x6890,
>> +		},
>>  	};
>>  	const u16 *csc;
>>
>> --
>> 2.17.1
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>--
>Ville Syrjälä
>Intel
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-07 14:35     ` Shankar, Uma
@ 2019-05-07 15:38       ` Ville Syrjälä
  2019-05-09 14:54         ` Shankar, Uma
  0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2019-05-07 15:38 UTC (permalink / raw)
  To: Shankar, Uma; +Cc: intel-gfx@lists.freedesktop.org

On Tue, May 07, 2019 at 02:35:15PM +0000, Shankar, Uma wrote:
> 
> 
> >-----Original Message-----
> >From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Ville
> >Syrjälä
> >Sent: Tuesday, May 7, 2019 7:37 PM
> >To: Sharma, Shashank <shashank.sharma@intel.com>
> >Cc: intel-gfx@lists.freedesktop.org
> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for
> >BT2020 case
> >
> >On Tue, May 07, 2019 at 06:32:57PM +0530, Shashank Sharma wrote:
> >> From: Uma Shankar <uma.shankar@intel.com>
> >>
> >> Currently input csc for YCbCR to RGB conversion handles only
> >> BT601 and Bt709. Extending it to support BT2020 as well.
> >>
> >> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
> >> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
> >> ---
> >>  drivers/gpu/drm/i915/intel_sprite.c | 24 ++++++++++++++++++++++++
> >>  1 file changed, 24 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
> >> b/drivers/gpu/drm/i915/intel_sprite.c
> >> index 44aaeac1b2ed..2536e757bec2 100644
> >> --- a/drivers/gpu/drm/i915/intel_sprite.c
> >> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> >> @@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
> >>  			0x9EF8, 0x7800, 0xABF8,
> >>  			0x0, 0x7800,  0x7ED8,
> >>  		},
> >> +		/*
> >> +		 * BT.2020 full range YCbCr -> full range RGB
> >> +		 * The matrix required is :
> >> +		 * [1.000, 0.000, 1.474,
> >> +		 *  1.000, -0.1645, -0.5713,
> >> +		 *  1.000, 1.8814, 0.0000]
> >> +		 */
> >> +		[DRM_COLOR_YCBCR_BT2020] = {
> >> +			0x7BC8, 0x7800, 0x0,
> >> +			0x8928, 0x7800, 0xAA88,
> >> +			0x0, 0x7800, 0x7F10,
> >> +		},
> >>  	};
> >>
> >>  	/* Matrix for Limited Range to Full Range Conversion */ @@ -461,6
> >> +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
> >>  			0x8888, 0x7918, 0xADA8,
> >>  			0x0, 0x7918,  0x6870,
> >>  		},
> >> +		/*
> >> +		 * BT.2020 Limited range YCbCr -> full range RGB
> >> +		 * The matrix required is :
> >> +		 * [1.164, 0.000, 1.717,
> >> +		 *  1.138, -0.1873, -0.6504,
> >> +		 *  1.1380, 2.1417, 0.0000]
> >
> >Where are those 1.138 coming from?
> 
> Hi Ville,
> This is the original YCBCR to RGB BT2020 matrix:
> {
>         1.00000000000,  0.00000000000,  1.47460000000,
>         1.00000000000,  -0.16455312684, -0.57135312684,
>         1.00000000000,  1.88140000000,  0.00000000000
> };
> 
> We have to convert Limited Range YCbCr to Full Range RGB. Hence we need to apply a scale factor:
>  yscalefactor = 219.0 * normalizingfactor;
>  cbcrscalefactor = 224.0 * normalizingfactor;
> 
>  /* Scale factors are inverted for LR to FR conversion */
>  yscalefactor = 1.0 / yscalefactor;
>  cbcrscalefactor = 1.0 / cbcrscalefactor;
> 
> This yields the above results. 

Those are the coefficients for Y, so they should still
be the same for all three output channels.

igt_color_encoding gives me:
|1.1644, 0.0000, 1.6787,|
|1.1644,-0.1873,-0.6504,|
|1.1644, 2.1418, 0.0000,|

Looks like we're also misprogramming the Y pre-offset
for the full range YCbCr case.

-- 
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-07 15:38       ` Ville Syrjälä
@ 2019-05-09 14:54         ` Shankar, Uma
  2019-05-09 14:57           ` Ville Syrjälä
  0 siblings, 1 reply; 10+ messages in thread
From: Shankar, Uma @ 2019-05-09 14:54 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx@lists.freedesktop.org



>-----Original Message-----
>From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
>Sent: Tuesday, May 7, 2019 9:08 PM
>To: Shankar, Uma <uma.shankar@intel.com>
>Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
>gfx@lists.freedesktop.org
>Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for
>BT2020 case
>
>On Tue, May 07, 2019 at 02:35:15PM +0000, Shankar, Uma wrote:
>>
>>
>> >-----Original Message-----
>> >From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On
>> >Behalf Of Ville Syrjälä
>> >Sent: Tuesday, May 7, 2019 7:37 PM
>> >To: Sharma, Shashank <shashank.sharma@intel.com>
>> >Cc: intel-gfx@lists.freedesktop.org
>> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB
>> >conversion for
>> >BT2020 case
>> >
>> >On Tue, May 07, 2019 at 06:32:57PM +0530, Shashank Sharma wrote:
>> >> From: Uma Shankar <uma.shankar@intel.com>
>> >>
>> >> Currently input csc for YCbCR to RGB conversion handles only
>> >> BT601 and Bt709. Extending it to support BT2020 as well.
>> >>
>> >> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
>> >> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
>> >> ---
>> >>  drivers/gpu/drm/i915/intel_sprite.c | 24 ++++++++++++++++++++++++
>> >>  1 file changed, 24 insertions(+)
>> >>
>> >> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
>> >> b/drivers/gpu/drm/i915/intel_sprite.c
>> >> index 44aaeac1b2ed..2536e757bec2 100644
>> >> --- a/drivers/gpu/drm/i915/intel_sprite.c
>> >> +++ b/drivers/gpu/drm/i915/intel_sprite.c
>> >> @@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
>> >>  			0x9EF8, 0x7800, 0xABF8,
>> >>  			0x0, 0x7800,  0x7ED8,
>> >>  		},
>> >> +		/*
>> >> +		 * BT.2020 full range YCbCr -> full range RGB
>> >> +		 * The matrix required is :
>> >> +		 * [1.000, 0.000, 1.474,
>> >> +		 *  1.000, -0.1645, -0.5713,
>> >> +		 *  1.000, 1.8814, 0.0000]
>> >> +		 */
>> >> +		[DRM_COLOR_YCBCR_BT2020] = {
>> >> +			0x7BC8, 0x7800, 0x0,
>> >> +			0x8928, 0x7800, 0xAA88,
>> >> +			0x0, 0x7800, 0x7F10,
>> >> +		},
>> >>  	};
>> >>
>> >>  	/* Matrix for Limited Range to Full Range Conversion */ @@ -461,6
>> >> +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
>> >>  			0x8888, 0x7918, 0xADA8,
>> >>  			0x0, 0x7918,  0x6870,
>> >>  		},
>> >> +		/*
>> >> +		 * BT.2020 Limited range YCbCr -> full range RGB
>> >> +		 * The matrix required is :
>> >> +		 * [1.164, 0.000, 1.717,
>> >> +		 *  1.138, -0.1873, -0.6504,
>> >> +		 *  1.1380, 2.1417, 0.0000]
>> >
>> >Where are those 1.138 coming from?
>>
>> Hi Ville,
>> This is the original YCBCR to RGB BT2020 matrix:
>> {
>>         1.00000000000,  0.00000000000,  1.47460000000,
>>         1.00000000000,  -0.16455312684, -0.57135312684,
>>         1.00000000000,  1.88140000000,  0.00000000000 };
>>
>> We have to convert Limited Range YCbCr to Full Range RGB. Hence we need to
>apply a scale factor:
>>  yscalefactor = 219.0 * normalizingfactor;  cbcrscalefactor = 224.0 *
>> normalizingfactor;
>>
>>  /* Scale factors are inverted for LR to FR conversion */
>> yscalefactor = 1.0 / yscalefactor;  cbcrscalefactor = 1.0 /
>> cbcrscalefactor;
>>
>> This yields the above results.
>
>Those are the coefficients for Y, so they should still be the same for all three output
>channels.
>
>igt_color_encoding gives me:
>|1.1644, 0.0000, 1.6787,|
>|1.1644,-0.1873,-0.6504,|
>|1.1644, 2.1418, 0.0000,|

Ok, I used the igt_color_encoding method and able to get values what you got.
Will update the matrix. Thanks Ville.

>Looks like we're also misprogramming the Y pre-offset for the full range YCbCr case.
For full range, I am getting same values as programmed above. Looks ok, can you double check.

Regards,
Uma Shankar

>--
>Ville Syrjälä
>Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-09 14:54         ` Shankar, Uma
@ 2019-05-09 14:57           ` Ville Syrjälä
  2019-05-09 15:08             ` Shankar, Uma
  0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2019-05-09 14:57 UTC (permalink / raw)
  To: Shankar, Uma; +Cc: intel-gfx@lists.freedesktop.org

On Thu, May 09, 2019 at 02:54:19PM +0000, Shankar, Uma wrote:
> 
> 
> >-----Original Message-----
> >From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
> >Sent: Tuesday, May 7, 2019 9:08 PM
> >To: Shankar, Uma <uma.shankar@intel.com>
> >Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
> >gfx@lists.freedesktop.org
> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for
> >BT2020 case
> >
> >On Tue, May 07, 2019 at 02:35:15PM +0000, Shankar, Uma wrote:
> >>
> >>
> >> >-----Original Message-----
> >> >From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On
> >> >Behalf Of Ville Syrjälä
> >> >Sent: Tuesday, May 7, 2019 7:37 PM
> >> >To: Sharma, Shashank <shashank.sharma@intel.com>
> >> >Cc: intel-gfx@lists.freedesktop.org
> >> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB
> >> >conversion for
> >> >BT2020 case
> >> >
> >> >On Tue, May 07, 2019 at 06:32:57PM +0530, Shashank Sharma wrote:
> >> >> From: Uma Shankar <uma.shankar@intel.com>
> >> >>
> >> >> Currently input csc for YCbCR to RGB conversion handles only
> >> >> BT601 and Bt709. Extending it to support BT2020 as well.
> >> >>
> >> >> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
> >> >> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
> >> >> ---
> >> >>  drivers/gpu/drm/i915/intel_sprite.c | 24 ++++++++++++++++++++++++
> >> >>  1 file changed, 24 insertions(+)
> >> >>
> >> >> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
> >> >> b/drivers/gpu/drm/i915/intel_sprite.c
> >> >> index 44aaeac1b2ed..2536e757bec2 100644
> >> >> --- a/drivers/gpu/drm/i915/intel_sprite.c
> >> >> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> >> >> @@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
> >> >>  			0x9EF8, 0x7800, 0xABF8,
> >> >>  			0x0, 0x7800,  0x7ED8,
> >> >>  		},
> >> >> +		/*
> >> >> +		 * BT.2020 full range YCbCr -> full range RGB
> >> >> +		 * The matrix required is :
> >> >> +		 * [1.000, 0.000, 1.474,
> >> >> +		 *  1.000, -0.1645, -0.5713,
> >> >> +		 *  1.000, 1.8814, 0.0000]
> >> >> +		 */
> >> >> +		[DRM_COLOR_YCBCR_BT2020] = {
> >> >> +			0x7BC8, 0x7800, 0x0,
> >> >> +			0x8928, 0x7800, 0xAA88,
> >> >> +			0x0, 0x7800, 0x7F10,
> >> >> +		},
> >> >>  	};
> >> >>
> >> >>  	/* Matrix for Limited Range to Full Range Conversion */ @@ -461,6
> >> >> +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
> >> >>  			0x8888, 0x7918, 0xADA8,
> >> >>  			0x0, 0x7918,  0x6870,
> >> >>  		},
> >> >> +		/*
> >> >> +		 * BT.2020 Limited range YCbCr -> full range RGB
> >> >> +		 * The matrix required is :
> >> >> +		 * [1.164, 0.000, 1.717,
> >> >> +		 *  1.138, -0.1873, -0.6504,
> >> >> +		 *  1.1380, 2.1417, 0.0000]
> >> >
> >> >Where are those 1.138 coming from?
> >>
> >> Hi Ville,
> >> This is the original YCBCR to RGB BT2020 matrix:
> >> {
> >>         1.00000000000,  0.00000000000,  1.47460000000,
> >>         1.00000000000,  -0.16455312684, -0.57135312684,
> >>         1.00000000000,  1.88140000000,  0.00000000000 };
> >>
> >> We have to convert Limited Range YCbCr to Full Range RGB. Hence we need to
> >apply a scale factor:
> >>  yscalefactor = 219.0 * normalizingfactor;  cbcrscalefactor = 224.0 *
> >> normalizingfactor;
> >>
> >>  /* Scale factors are inverted for LR to FR conversion */
> >> yscalefactor = 1.0 / yscalefactor;  cbcrscalefactor = 1.0 /
> >> cbcrscalefactor;
> >>
> >> This yields the above results.
> >
> >Those are the coefficients for Y, so they should still be the same for all three output
> >channels.
> >
> >igt_color_encoding gives me:
> >|1.1644, 0.0000, 1.6787,|
> >|1.1644,-0.1873,-0.6504,|
> >|1.1644, 2.1418, 0.0000,|
> 
> Ok, I used the igt_color_encoding method and able to get values what you got.
> Will update the matrix. Thanks Ville.
> 
> >Looks like we're also misprogramming the Y pre-offset for the full range YCbCr case.
> For full range, I am getting same values as programmed above. Looks ok, can you double check.

The matrix itself looks OK (some minor rounding differences perhaps, but
nothing major). But the Y preoffset should be zero for full range
YCbCr.

-- 
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-09 14:57           ` Ville Syrjälä
@ 2019-05-09 15:08             ` Shankar, Uma
  2019-05-09 15:30               ` Ville Syrjälä
  0 siblings, 1 reply; 10+ messages in thread
From: Shankar, Uma @ 2019-05-09 15:08 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx@lists.freedesktop.org



>-----Original Message-----
>From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
>Sent: Thursday, May 9, 2019 8:28 PM
>To: Shankar, Uma <uma.shankar@intel.com>
>Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
>gfx@lists.freedesktop.org
>Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for
>BT2020 case
>
>On Thu, May 09, 2019 at 02:54:19PM +0000, Shankar, Uma wrote:
>>
>>
>> >-----Original Message-----
>> >From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
>> >Sent: Tuesday, May 7, 2019 9:08 PM
>> >To: Shankar, Uma <uma.shankar@intel.com>
>> >Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
>> >gfx@lists.freedesktop.org
>> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB
>> >conversion for
>> >BT2020 case
>> >
>> >On Tue, May 07, 2019 at 02:35:15PM +0000, Shankar, Uma wrote:
>> >>
>> >>
>> >> >-----Original Message-----
>> >> >From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org]
>> >> >On Behalf Of Ville Syrjälä
>> >> >Sent: Tuesday, May 7, 2019 7:37 PM
>> >> >To: Sharma, Shashank <shashank.sharma@intel.com>
>> >> >Cc: intel-gfx@lists.freedesktop.org
>> >> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB
>> >> >conversion for
>> >> >BT2020 case
>> >> >
>> >> >On Tue, May 07, 2019 at 06:32:57PM +0530, Shashank Sharma wrote:
>> >> >> From: Uma Shankar <uma.shankar@intel.com>
>> >> >>
>> >> >> Currently input csc for YCbCR to RGB conversion handles only
>> >> >> BT601 and Bt709. Extending it to support BT2020 as well.
>> >> >>
>> >> >> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
>> >> >> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
>> >> >> ---
>> >> >>  drivers/gpu/drm/i915/intel_sprite.c | 24
>> >> >> ++++++++++++++++++++++++
>> >> >>  1 file changed, 24 insertions(+)
>> >> >>
>> >> >> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
>> >> >> b/drivers/gpu/drm/i915/intel_sprite.c
>> >> >> index 44aaeac1b2ed..2536e757bec2 100644
>> >> >> --- a/drivers/gpu/drm/i915/intel_sprite.c
>> >> >> +++ b/drivers/gpu/drm/i915/intel_sprite.c
>> >> >> @@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
>> >> >>  			0x9EF8, 0x7800, 0xABF8,
>> >> >>  			0x0, 0x7800,  0x7ED8,
>> >> >>  		},
>> >> >> +		/*
>> >> >> +		 * BT.2020 full range YCbCr -> full range RGB
>> >> >> +		 * The matrix required is :
>> >> >> +		 * [1.000, 0.000, 1.474,
>> >> >> +		 *  1.000, -0.1645, -0.5713,
>> >> >> +		 *  1.000, 1.8814, 0.0000]
>> >> >> +		 */
>> >> >> +		[DRM_COLOR_YCBCR_BT2020] = {
>> >> >> +			0x7BC8, 0x7800, 0x0,
>> >> >> +			0x8928, 0x7800, 0xAA88,
>> >> >> +			0x0, 0x7800, 0x7F10,
>> >> >> +		},
>> >> >>  	};
>> >> >>
>> >> >>  	/* Matrix for Limited Range to Full Range Conversion */ @@
>> >> >> -461,6
>> >> >> +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
>> >> >>  			0x8888, 0x7918, 0xADA8,
>> >> >>  			0x0, 0x7918,  0x6870,
>> >> >>  		},
>> >> >> +		/*
>> >> >> +		 * BT.2020 Limited range YCbCr -> full range RGB
>> >> >> +		 * The matrix required is :
>> >> >> +		 * [1.164, 0.000, 1.717,
>> >> >> +		 *  1.138, -0.1873, -0.6504,
>> >> >> +		 *  1.1380, 2.1417, 0.0000]
>> >> >
>> >> >Where are those 1.138 coming from?
>> >>
>> >> Hi Ville,
>> >> This is the original YCBCR to RGB BT2020 matrix:
>> >> {
>> >>         1.00000000000,  0.00000000000,  1.47460000000,
>> >>         1.00000000000,  -0.16455312684, -0.57135312684,
>> >>         1.00000000000,  1.88140000000,  0.00000000000 };
>> >>
>> >> We have to convert Limited Range YCbCr to Full Range RGB. Hence we
>> >> need to
>> >apply a scale factor:
>> >>  yscalefactor = 219.0 * normalizingfactor;  cbcrscalefactor = 224.0
>> >> * normalizingfactor;
>> >>
>> >>  /* Scale factors are inverted for LR to FR conversion */
>> >> yscalefactor = 1.0 / yscalefactor;  cbcrscalefactor = 1.0 /
>> >> cbcrscalefactor;
>> >>
>> >> This yields the above results.
>> >
>> >Those are the coefficients for Y, so they should still be the same
>> >for all three output channels.
>> >
>> >igt_color_encoding gives me:
>> >|1.1644, 0.0000, 1.6787,|
>> >|1.1644,-0.1873,-0.6504,|
>> >|1.1644, 2.1418, 0.0000,|
>>
>> Ok, I used the igt_color_encoding method and able to get values what you got.
>> Will update the matrix. Thanks Ville.
>>
>> >Looks like we're also misprogramming the Y pre-offset for the full range YCbCr
>case.
>> For full range, I am getting same values as programmed above. Looks ok, can you
>double check.
>
>The matrix itself looks OK (some minor rounding differences perhaps, but nothing
>major). But the Y preoffset should be zero for full range YCbCr.

Hi Ville,
This is what I got for Full Range from igt_color_encoding.
m4.d[m(row=0, col=0)] = 1.000000
m4.d[m(row=1, col=0)] = 1.000000
m4.d[m(row=2, col=0)] = 1.000000
m4.d[m(row=3, col=0)] = 0.000000
m4.d[m(row=0, col=1)] = 0.000000
m4.d[m(row=1, col=1)] = -0.164553
m4.d[m(row=2, col=1)] = 1.881400
m4.d[m(row=3, col=1)] = 0.000000
m4.d[m(row=0, col=2)] = 1.474600
m4.d[m(row=1, col=2)] = -0.571353
m4.d[m(row=2, col=2)] = 0.000000
m4.d[m(row=3, col=2)] = 0.000000
m4.d[m(row=0, col=3)] = -188.748810
m4.d[m(row=1, col=3)] = 94.195992
m4.d[m(row=2, col=3)] = -240.819199
m4.d[m(row=3, col=3)] = 1.000000

which matches our table. This is the argument list for :
struct igt_mat4 m4 = igt_ycbcr_to_rgb_matrix(DRM_FORMAT_YUV420,
                                     DRM_FORMAT_XRGB8888,
                                       IGT_COLOR_YCBCR_BT2020,
                                       IGT_COLOR_YCBCR_FULL_RANGE);

Am I am missing something ?

Regards,
Uma Shankar
>Ville Syrjälä
>Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-09 15:08             ` Shankar, Uma
@ 2019-05-09 15:30               ` Ville Syrjälä
  2019-05-09 15:55                 ` Shankar, Uma
  0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2019-05-09 15:30 UTC (permalink / raw)
  To: Shankar, Uma; +Cc: intel-gfx@lists.freedesktop.org

On Thu, May 09, 2019 at 03:08:40PM +0000, Shankar, Uma wrote:
> 
> 
> >-----Original Message-----
> >From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
> >Sent: Thursday, May 9, 2019 8:28 PM
> >To: Shankar, Uma <uma.shankar@intel.com>
> >Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
> >gfx@lists.freedesktop.org
> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for
> >BT2020 case
> >
> >On Thu, May 09, 2019 at 02:54:19PM +0000, Shankar, Uma wrote:
> >>
> >>
> >> >-----Original Message-----
> >> >From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
> >> >Sent: Tuesday, May 7, 2019 9:08 PM
> >> >To: Shankar, Uma <uma.shankar@intel.com>
> >> >Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
> >> >gfx@lists.freedesktop.org
> >> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB
> >> >conversion for
> >> >BT2020 case
> >> >
> >> >On Tue, May 07, 2019 at 02:35:15PM +0000, Shankar, Uma wrote:
> >> >>
> >> >>
> >> >> >-----Original Message-----
> >> >> >From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org]
> >> >> >On Behalf Of Ville Syrjälä
> >> >> >Sent: Tuesday, May 7, 2019 7:37 PM
> >> >> >To: Sharma, Shashank <shashank.sharma@intel.com>
> >> >> >Cc: intel-gfx@lists.freedesktop.org
> >> >> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB
> >> >> >conversion for
> >> >> >BT2020 case
> >> >> >
> >> >> >On Tue, May 07, 2019 at 06:32:57PM +0530, Shashank Sharma wrote:
> >> >> >> From: Uma Shankar <uma.shankar@intel.com>
> >> >> >>
> >> >> >> Currently input csc for YCbCR to RGB conversion handles only
> >> >> >> BT601 and Bt709. Extending it to support BT2020 as well.
> >> >> >>
> >> >> >> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
> >> >> >> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
> >> >> >> ---
> >> >> >>  drivers/gpu/drm/i915/intel_sprite.c | 24
> >> >> >> ++++++++++++++++++++++++
> >> >> >>  1 file changed, 24 insertions(+)
> >> >> >>
> >> >> >> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
> >> >> >> b/drivers/gpu/drm/i915/intel_sprite.c
> >> >> >> index 44aaeac1b2ed..2536e757bec2 100644
> >> >> >> --- a/drivers/gpu/drm/i915/intel_sprite.c
> >> >> >> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> >> >> >> @@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
> >> >> >>  			0x9EF8, 0x7800, 0xABF8,
> >> >> >>  			0x0, 0x7800,  0x7ED8,
> >> >> >>  		},
> >> >> >> +		/*
> >> >> >> +		 * BT.2020 full range YCbCr -> full range RGB
> >> >> >> +		 * The matrix required is :
> >> >> >> +		 * [1.000, 0.000, 1.474,
> >> >> >> +		 *  1.000, -0.1645, -0.5713,
> >> >> >> +		 *  1.000, 1.8814, 0.0000]
> >> >> >> +		 */
> >> >> >> +		[DRM_COLOR_YCBCR_BT2020] = {
> >> >> >> +			0x7BC8, 0x7800, 0x0,
> >> >> >> +			0x8928, 0x7800, 0xAA88,
> >> >> >> +			0x0, 0x7800, 0x7F10,
> >> >> >> +		},
> >> >> >>  	};
> >> >> >>
> >> >> >>  	/* Matrix for Limited Range to Full Range Conversion */ @@
> >> >> >> -461,6
> >> >> >> +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
> >> >> >>  			0x8888, 0x7918, 0xADA8,
> >> >> >>  			0x0, 0x7918,  0x6870,
> >> >> >>  		},
> >> >> >> +		/*
> >> >> >> +		 * BT.2020 Limited range YCbCr -> full range RGB
> >> >> >> +		 * The matrix required is :
> >> >> >> +		 * [1.164, 0.000, 1.717,
> >> >> >> +		 *  1.138, -0.1873, -0.6504,
> >> >> >> +		 *  1.1380, 2.1417, 0.0000]
> >> >> >
> >> >> >Where are those 1.138 coming from?
> >> >>
> >> >> Hi Ville,
> >> >> This is the original YCBCR to RGB BT2020 matrix:
> >> >> {
> >> >>         1.00000000000,  0.00000000000,  1.47460000000,
> >> >>         1.00000000000,  -0.16455312684, -0.57135312684,
> >> >>         1.00000000000,  1.88140000000,  0.00000000000 };
> >> >>
> >> >> We have to convert Limited Range YCbCr to Full Range RGB. Hence we
> >> >> need to
> >> >apply a scale factor:
> >> >>  yscalefactor = 219.0 * normalizingfactor;  cbcrscalefactor = 224.0
> >> >> * normalizingfactor;
> >> >>
> >> >>  /* Scale factors are inverted for LR to FR conversion */
> >> >> yscalefactor = 1.0 / yscalefactor;  cbcrscalefactor = 1.0 /
> >> >> cbcrscalefactor;
> >> >>
> >> >> This yields the above results.
> >> >
> >> >Those are the coefficients for Y, so they should still be the same
> >> >for all three output channels.
> >> >
> >> >igt_color_encoding gives me:
> >> >|1.1644, 0.0000, 1.6787,|
> >> >|1.1644,-0.1873,-0.6504,|
> >> >|1.1644, 2.1418, 0.0000,|
> >>
> >> Ok, I used the igt_color_encoding method and able to get values what you got.
> >> Will update the matrix. Thanks Ville.
> >>
> >> >Looks like we're also misprogramming the Y pre-offset for the full range YCbCr
> >case.
> >> For full range, I am getting same values as programmed above. Looks ok, can you
> >double check.
> >
> >The matrix itself looks OK (some minor rounding differences perhaps, but nothing
> >major). But the Y preoffset should be zero for full range YCbCr.
> 
> Hi Ville,
> This is what I got for Full Range from igt_color_encoding.
> m4.d[m(row=0, col=0)] = 1.000000
> m4.d[m(row=1, col=0)] = 1.000000
> m4.d[m(row=2, col=0)] = 1.000000
> m4.d[m(row=3, col=0)] = 0.000000
> m4.d[m(row=0, col=1)] = 0.000000
> m4.d[m(row=1, col=1)] = -0.164553
> m4.d[m(row=2, col=1)] = 1.881400
> m4.d[m(row=3, col=1)] = 0.000000
> m4.d[m(row=0, col=2)] = 1.474600
> m4.d[m(row=1, col=2)] = -0.571353
> m4.d[m(row=2, col=2)] = 0.000000
> m4.d[m(row=3, col=2)] = 0.000000
> m4.d[m(row=0, col=3)] = -188.748810
> m4.d[m(row=1, col=3)] = 94.195992
> m4.d[m(row=2, col=3)] = -240.819199
> m4.d[m(row=3, col=3)] = 1.000000
> 
> which matches our table. This is the argument list for :
> struct igt_mat4 m4 = igt_ycbcr_to_rgb_matrix(DRM_FORMAT_YUV420,
>                                      DRM_FORMAT_XRGB8888,
>                                        IGT_COLOR_YCBCR_BT2020,
>                                        IGT_COLOR_YCBCR_FULL_RANGE);
> 
> Am I am missing something ?

I'm talking about
	I915_WRITE_FW(PLANE_INPUT_CSC_PREOFF(pipe, plane_id, 1),
		      PREOFF_YUV_TO_RGB_ME);

not sure what you're talking about :)

-- 
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case
  2019-05-09 15:30               ` Ville Syrjälä
@ 2019-05-09 15:55                 ` Shankar, Uma
  0 siblings, 0 replies; 10+ messages in thread
From: Shankar, Uma @ 2019-05-09 15:55 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx@lists.freedesktop.org



>-----Original Message-----
>From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
>Sent: Thursday, May 9, 2019 9:00 PM
>To: Shankar, Uma <uma.shankar@intel.com>
>Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
>gfx@lists.freedesktop.org
>Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for
>BT2020 case
>
>On Thu, May 09, 2019 at 03:08:40PM +0000, Shankar, Uma wrote:
>>
>>
>> >-----Original Message-----
>> >From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
>> >Sent: Thursday, May 9, 2019 8:28 PM
>> >To: Shankar, Uma <uma.shankar@intel.com>
>> >Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
>> >gfx@lists.freedesktop.org
>> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB
>> >conversion for
>> >BT2020 case
>> >
>> >On Thu, May 09, 2019 at 02:54:19PM +0000, Shankar, Uma wrote:
>> >>
>> >>
>> >> >-----Original Message-----
>> >> >From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
>> >> >Sent: Tuesday, May 7, 2019 9:08 PM
>> >> >To: Shankar, Uma <uma.shankar@intel.com>
>> >> >Cc: Sharma, Shashank <shashank.sharma@intel.com>; intel-
>> >> >gfx@lists.freedesktop.org
>> >> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to RGB
>> >> >conversion for
>> >> >BT2020 case
>> >> >
>> >> >On Tue, May 07, 2019 at 02:35:15PM +0000, Shankar, Uma wrote:
>> >> >>
>> >> >>
>> >> >> >-----Original Message-----
>> >> >> >From: Intel-gfx
>> >> >> >[mailto:intel-gfx-bounces@lists.freedesktop.org]
>> >> >> >On Behalf Of Ville Syrjälä
>> >> >> >Sent: Tuesday, May 7, 2019 7:37 PM
>> >> >> >To: Sharma, Shashank <shashank.sharma@intel.com>
>> >> >> >Cc: intel-gfx@lists.freedesktop.org
>> >> >> >Subject: Re: [Intel-gfx] [PATCH] drm/i915/icl: Handle YCbCr to
>> >> >> >RGB conversion for
>> >> >> >BT2020 case
>> >> >> >
>> >> >> >On Tue, May 07, 2019 at 06:32:57PM +0530, Shashank Sharma wrote:
>> >> >> >> From: Uma Shankar <uma.shankar@intel.com>
>> >> >> >>
>> >> >> >> Currently input csc for YCbCR to RGB conversion handles only
>> >> >> >> BT601 and Bt709. Extending it to support BT2020 as well.
>> >> >> >>
>> >> >> >> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
>> >> >> >> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
>> >> >> >> ---
>> >> >> >>  drivers/gpu/drm/i915/intel_sprite.c | 24
>> >> >> >> ++++++++++++++++++++++++
>> >> >> >>  1 file changed, 24 insertions(+)
>> >> >> >>
>> >> >> >> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
>> >> >> >> b/drivers/gpu/drm/i915/intel_sprite.c
>> >> >> >> index 44aaeac1b2ed..2536e757bec2 100644
>> >> >> >> --- a/drivers/gpu/drm/i915/intel_sprite.c
>> >> >> >> +++ b/drivers/gpu/drm/i915/intel_sprite.c
>> >> >> >> @@ -433,6 +433,18 @@ icl_program_input_csc(struct intel_plane *plane,
>> >> >> >>  			0x9EF8, 0x7800, 0xABF8,
>> >> >> >>  			0x0, 0x7800,  0x7ED8,
>> >> >> >>  		},
>> >> >> >> +		/*
>> >> >> >> +		 * BT.2020 full range YCbCr -> full range RGB
>> >> >> >> +		 * The matrix required is :
>> >> >> >> +		 * [1.000, 0.000, 1.474,
>> >> >> >> +		 *  1.000, -0.1645, -0.5713,
>> >> >> >> +		 *  1.000, 1.8814, 0.0000]
>> >> >> >> +		 */
>> >> >> >> +		[DRM_COLOR_YCBCR_BT2020] = {
>> >> >> >> +			0x7BC8, 0x7800, 0x0,
>> >> >> >> +			0x8928, 0x7800, 0xAA88,
>> >> >> >> +			0x0, 0x7800, 0x7F10,
>> >> >> >> +		},
>> >> >> >>  	};
>> >> >> >>
>> >> >> >>  	/* Matrix for Limited Range to Full Range Conversion */ @@
>> >> >> >> -461,6
>> >> >> >> +473,18 @@ icl_program_input_csc(struct intel_plane *plane,
>> >> >> >>  			0x8888, 0x7918, 0xADA8,
>> >> >> >>  			0x0, 0x7918,  0x6870,
>> >> >> >>  		},
>> >> >> >> +		/*
>> >> >> >> +		 * BT.2020 Limited range YCbCr -> full range RGB
>> >> >> >> +		 * The matrix required is :
>> >> >> >> +		 * [1.164, 0.000, 1.717,
>> >> >> >> +		 *  1.138, -0.1873, -0.6504,
>> >> >> >> +		 *  1.1380, 2.1417, 0.0000]
>> >> >> >
>> >> >> >Where are those 1.138 coming from?
>> >> >>
>> >> >> Hi Ville,
>> >> >> This is the original YCBCR to RGB BT2020 matrix:
>> >> >> {
>> >> >>         1.00000000000,  0.00000000000,  1.47460000000,
>> >> >>         1.00000000000,  -0.16455312684, -0.57135312684,
>> >> >>         1.00000000000,  1.88140000000,  0.00000000000 };
>> >> >>
>> >> >> We have to convert Limited Range YCbCr to Full Range RGB. Hence
>> >> >> we need to
>> >> >apply a scale factor:
>> >> >>  yscalefactor = 219.0 * normalizingfactor;  cbcrscalefactor =
>> >> >> 224.0
>> >> >> * normalizingfactor;
>> >> >>
>> >> >>  /* Scale factors are inverted for LR to FR conversion */
>> >> >> yscalefactor = 1.0 / yscalefactor;  cbcrscalefactor = 1.0 /
>> >> >> cbcrscalefactor;
>> >> >>
>> >> >> This yields the above results.
>> >> >
>> >> >Those are the coefficients for Y, so they should still be the same
>> >> >for all three output channels.
>> >> >
>> >> >igt_color_encoding gives me:
>> >> >|1.1644, 0.0000, 1.6787,|
>> >> >|1.1644,-0.1873,-0.6504,|
>> >> >|1.1644, 2.1418, 0.0000,|
>> >>
>> >> Ok, I used the igt_color_encoding method and able to get values what you got.
>> >> Will update the matrix. Thanks Ville.
>> >>
>> >> >Looks like we're also misprogramming the Y pre-offset for the full
>> >> >range YCbCr
>> >case.
>> >> For full range, I am getting same values as programmed above. Looks
>> >> ok, can you
>> >double check.
>> >
>> >The matrix itself looks OK (some minor rounding differences perhaps,
>> >but nothing major). But the Y preoffset should be zero for full range YCbCr.
>>
>> Hi Ville,
>> This is what I got for Full Range from igt_color_encoding.
>> m4.d[m(row=0, col=0)] = 1.000000
>> m4.d[m(row=1, col=0)] = 1.000000
>> m4.d[m(row=2, col=0)] = 1.000000
>> m4.d[m(row=3, col=0)] = 0.000000
>> m4.d[m(row=0, col=1)] = 0.000000
>> m4.d[m(row=1, col=1)] = -0.164553
>> m4.d[m(row=2, col=1)] = 1.881400
>> m4.d[m(row=3, col=1)] = 0.000000
>> m4.d[m(row=0, col=2)] = 1.474600
>> m4.d[m(row=1, col=2)] = -0.571353
>> m4.d[m(row=2, col=2)] = 0.000000
>> m4.d[m(row=3, col=2)] = 0.000000
>> m4.d[m(row=0, col=3)] = -188.748810
>> m4.d[m(row=1, col=3)] = 94.195992
>> m4.d[m(row=2, col=3)] = -240.819199
>> m4.d[m(row=3, col=3)] = 1.000000
>>
>> which matches our table. This is the argument list for :
>> struct igt_mat4 m4 = igt_ycbcr_to_rgb_matrix(DRM_FORMAT_YUV420,
>>                                      DRM_FORMAT_XRGB8888,
>>                                        IGT_COLOR_YCBCR_BT2020,
>>                                        IGT_COLOR_YCBCR_FULL_RANGE);
>>
>> Am I am missing something ?
>
>I'm talking about
>	I915_WRITE_FW(PLANE_INPUT_CSC_PREOFF(pipe, plane_id, 1),
>		      PREOFF_YUV_TO_RGB_ME);
>
>not sure what you're talking about :)

Aah, I was pre-occupied with coefficient discussion itself :). Got it now, will update that and send out
the next version. 

Regards,
Uma Shankar

>--
>Ville Syrjälä
>Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-05-09 15:55 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-05-07 13:02 [PATCH v3 1/2] drm/i915/GLK: Properly handle plane CSC for BT2020 framebuffers Shashank Sharma
2019-05-07 13:02 ` [PATCH] drm/i915/icl: Handle YCbCr to RGB conversion for BT2020 case Shashank Sharma
2019-05-07 14:06   ` Ville Syrjälä
2019-05-07 14:35     ` Shankar, Uma
2019-05-07 15:38       ` Ville Syrjälä
2019-05-09 14:54         ` Shankar, Uma
2019-05-09 14:57           ` Ville Syrjälä
2019-05-09 15:08             ` Shankar, Uma
2019-05-09 15:30               ` Ville Syrjälä
2019-05-09 15:55                 ` Shankar, Uma

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).