summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-09-08 00:39:53 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-09-28 05:41:15 +0300
commit290ebeb59525eb7fdcc6f815d8dee6cbe3d8a314 (patch)
tree88e4ba07bf7da821d564052ebf419ecb93b1ef2d
parenta2f34f19578e8dae37cb7898710d15b83f176f94 (diff)
ipa: rkisp1: awb: Use frame context to fix gains calculations
The AWB statistics are computed after the ISP applies the colour gains. This means that the red, green and blue means do not match the data coming directly from the sensor, but are multiplied by the colour gains that were used for the frame on which the statistics have been computed. The AWB algorithm needs to take this into account when calculating the colour gains for the next frame. Do so by dividing the means by the gains that were applied to the frame, retrieved from the frame context. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--src/ipa/rkisp1/algorithms/awb.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index e491cf75..694d97cc 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -207,6 +207,15 @@ void Awb::process(IPAContext &context,
double greenMean = 1.1636 * yMean - 0.4045 * cbMean - 0.7949 * crMean;
double blueMean = 1.1636 * yMean + 1.9912 * cbMean - 0.0250 * crMean;
+ /*
+ * The ISP computes the AWB means after applying the colour gains,
+ * divide by the gains that were used to get the raw means from the
+ * sensor.
+ */
+ redMean /= frameContext.awb.gains.red;
+ greenMean /= frameContext.awb.gains.green;
+ blueMean /= frameContext.awb.gains.blue;
+
frameContext.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);
/* Estimate the red and blue gains to apply in a grey world. */