summaryrefslogtreecommitdiff
path: root/src/ipa/simple/algorithms/awb.cpp
diff options
context:
space:
mode:
authorMilan Zamazal <mzamazal@redhat.com>2024-09-27 15:46:21 +0200
committerKieran Bingham <kieran.bingham@ideasonboard.com>2024-09-27 15:01:57 +0100
commit8c84efa486270e1bd5566baa1a3fb152bfa14604 (patch)
tree73c0e3bcc9b94e8ddbafb3be75ab089a367343a5 /src/ipa/simple/algorithms/awb.cpp
parent7fab2062d8274065e870de20382720a0cdb11193 (diff)
libcamera: software_isp: Use floating point for color parameters
It's more natural to represent color gains as floating point numbers rather than using a particular pixel-related representation. double is used rather than float because it's a more common floating point type in libcamera algorithms. Otherwise there is no obvious reason to select one over the other here. The constructed color tables still use integer representation for efficiency. Black level still uses pixel (integer) values, for consistency with other libcamera parts. Signed-off-by: Milan Zamazal <mzamazal@redhat.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa/simple/algorithms/awb.cpp')
-rw-r--r--src/ipa/simple/algorithms/awb.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp
index 3d76cc2f..195de41d 100644
--- a/src/ipa/simple/algorithms/awb.cpp
+++ b/src/ipa/simple/algorithms/awb.cpp
@@ -24,7 +24,7 @@ int Awb::configure(IPAContext &context,
[[maybe_unused]] const IPAConfigInfo &configInfo)
{
auto &gains = context.activeState.gains;
- gains.red = gains.green = gains.blue = 256;
+ gains.red = gains.green = gains.blue = 1.0;
return 0;
}
@@ -53,12 +53,11 @@ void Awb::process(IPAContext &context,
/*
* Calculate red and blue gains for AWB.
* Clamp max gain at 4.0, this also avoids 0 division.
- * Gain: 128 = 0.5, 256 = 1.0, 512 = 2.0, etc.
*/
auto &gains = context.activeState.gains;
- gains.red = sumR <= sumG / 4 ? 1024 : 256 * sumG / sumR;
- gains.blue = sumB <= sumG / 4 ? 1024 : 256 * sumG / sumB;
- /* Green gain is fixed to 256 */
+ gains.red = sumR <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumR;
+ gains.blue = sumB <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumB;
+ /* Green gain is fixed to 1.0 */
LOG(IPASoftAwb, Debug) << "gain R/B " << gains.red << "/" << gains.blue;
}