[PATCH v1 1/5] ipa: rkisp1: awb: Clamp gains to machine limits
Dan Scally
dan.scally at ideasonboard.com
Fri Jul 12 17:13:15 CEST 2024
Hi Stefan, thanks for the set
On 12/07/2024 15:32, Stefan Klug wrote:
> When the color gains where set manually it was 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 at ideasonboard.com>
> ---
The code change is fine:
Reviewed-by: Daniel Scally <dan.scally at ideasonboard.com>
But how's it possible that you get values larger than 1023 here? The control value is declared with
a range of 0 to 3.996; is it that the limits aren't checked when controls are set, or is there some
floating point magic going on?
> src/ipa/rkisp1/algorithms/awb.cpp | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> index a01fe5d90973..1a5d4776970a 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;
More information about the libcamera-devel
mailing list