[v3,17/17] ipa: rkisp1: awb: Expand comment
diff mbox series

Message ID 20241118221618.13953-18-laurent.pinchart@ideasonboard.com
State New
Headers show
Series
  • Improve linear algebra helpers in libipa
Related show

Commit Message

Laurent Pinchart Nov. 18, 2024, 10:16 p.m. UTC
The RGB to YCbCr conversion matrix mentioned in a comment, coming from
the hardware documentation, does not match any of the canonical matrices
specified by any standard. While researching where the values came from,
it became apparent they are likely Bt.601 limited range coefficients
rounded to 6 bits of decimal precision. Record this in comments.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/ipa/rkisp1/algorithms/awb.cpp | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

Comments

Milan Zamazal Nov. 19, 2024, 10:40 a.m. UTC | #1
Hi Laurent,

thank you for the patch, such a clarification is always good.

Laurent Pinchart <laurent.pinchart@ideasonboard.com> writes:

> The RGB to YCbCr conversion matrix mentioned in a comment, coming from
> the hardware documentation, does not match any of the canonical matrices
> specified by any standard. While researching where the values came from,
> it became apparent they are likely Bt.601 limited range coefficients
> rounded to 6 bits of decimal precision. Record this in comments.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Milan Zamazal <mzamazal@redhat.com>

> ---
>  src/ipa/rkisp1/algorithms/awb.cpp | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> index 26d7b8138f17..4bb4f5b88375 100644
> --- a/src/ipa/rkisp1/algorithms/awb.cpp
> +++ b/src/ipa/rkisp1/algorithms/awb.cpp
> @@ -210,13 +210,18 @@ void Awb::process(IPAContext &context,
>  		});
>  
>  		/*
> -		 * Convert from YCbCr to RGB.
> -		 * The hardware uses the following formulas:
> -		 * Y = 16 + 0.2500 R + 0.5000 G + 0.1094 B
> +		 * Convert from YCbCr to RGB. The hardware uses the following
> +		 * formulas:
> +		 *
> +		 * Y  =  16 + 0.2500 R + 0.5000 G + 0.1094 B
>  		 * Cb = 128 - 0.1406 R - 0.2969 G + 0.4375 B
>  		 * Cr = 128 + 0.4375 R - 0.3750 G - 0.0625 B
>  		 *
> -		 * The inverse matrix is thus:
> +		 * This seems to be based on limited range BT.601 with Q1.6
> +		 * precision.
> +		 *
> +		 * The inverse matrix is:
> +		 *
>  		 * [[1,1636, -0,0623,  1,6008]
>  		 *  [1,1636, -0,4045, -0,7949]
>  		 *  [1,1636,  1,9912, -0,0250]]

Patch
diff mbox series

diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index 26d7b8138f17..4bb4f5b88375 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -210,13 +210,18 @@  void Awb::process(IPAContext &context,
 		});
 
 		/*
-		 * Convert from YCbCr to RGB.
-		 * The hardware uses the following formulas:
-		 * Y = 16 + 0.2500 R + 0.5000 G + 0.1094 B
+		 * Convert from YCbCr to RGB. The hardware uses the following
+		 * formulas:
+		 *
+		 * Y  =  16 + 0.2500 R + 0.5000 G + 0.1094 B
 		 * Cb = 128 - 0.1406 R - 0.2969 G + 0.4375 B
 		 * Cr = 128 + 0.4375 R - 0.3750 G - 0.0625 B
 		 *
-		 * The inverse matrix is thus:
+		 * This seems to be based on limited range BT.601 with Q1.6
+		 * precision.
+		 *
+		 * The inverse matrix is:
+		 *
 		 * [[1,1636, -0,0623,  1,6008]
 		 *  [1,1636, -0,4045, -0,7949]
 		 *  [1,1636,  1,9912, -0,0250]]