summaryrefslogtreecommitdiff
path: root/src/ipa
diff options
context:
space:
mode:
authorStefan Klug <stefan.klug@ideasonboard.com>2024-07-12 16:32:02 +0200
committerKieran Bingham <kieran.bingham@ideasonboard.com>2024-07-24 15:34:14 +0100
commit7b8094d6fc9798ea2944e6a01220e23e717c2bc4 (patch)
tree55e55ebab69b24176b858f70439cfcc95da40a89 /src/ipa
parent7ee9ef451dfe6c07747b206a390455d4e8df1638 (diff)
ipa: rkisp1: awb: Clamp gains to machine limits
When the color gains are set manually it is possible to specify a gain that wrapped the hardware limits. It would also be possible to further tune the floating point limits, but that is an error prone approach. So the limits are imposed on the integers, just before writing to the hardware. This noticeably reduces some oscillations in the awb regulation. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa')
-rw-r--r--src/ipa/rkisp1/algorithms/awb.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index a01fe5d9..1a5d4776 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -120,10 +120,14 @@ void Awb::prepare(IPAContext &context, const uint32_t frame,
frameContext.awb.gains.blue = context.activeState.awb.gains.automatic.blue;
}
- params->others.awb_gain_config.gain_green_b = 256 * frameContext.awb.gains.green;
- params->others.awb_gain_config.gain_blue = 256 * frameContext.awb.gains.blue;
- params->others.awb_gain_config.gain_red = 256 * frameContext.awb.gains.red;
- params->others.awb_gain_config.gain_green_r = 256 * frameContext.awb.gains.green;
+ params->others.awb_gain_config.gain_green_b =
+ std::clamp<int>(256 * frameContext.awb.gains.green, 0, 0x3ff);
+ params->others.awb_gain_config.gain_blue =
+ std::clamp<int>(256 * frameContext.awb.gains.blue, 0, 0x3ff);
+ params->others.awb_gain_config.gain_red =
+ std::clamp<int>(256 * frameContext.awb.gains.red, 0, 0x3ff);
+ params->others.awb_gain_config.gain_green_r =
+ std::clamp<int>(256 * frameContext.awb.gains.green, 0, 0x3ff);
/* Update the gains. */
params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_AWB_GAIN;