From 25942b74e174da10cec04cb11156cb5a69982902 Mon Sep 17 00:00:00 2001 From: David Plowman Date: Mon, 21 Jul 2025 08:47:22 +0100 Subject: [PATCH] ipa: rpi: agc: Make the maximum digital gain configurable The maximum allowed digital gain is hard-coded to 4. Make it a configurable parameter. Signed-off-by: David Plowman Signed-off-by: Naushir Patuck Reviewed-by: Naushir Patuck Signed-off-by: Kieran Bingham --- src/ipa/rpi/controller/rpi/agc_channel.cpp | 5 ++++- src/ipa/rpi/controller/rpi/agc_channel.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ipa/rpi/controller/rpi/agc_channel.cpp b/src/ipa/rpi/controller/rpi/agc_channel.cpp index 25ec0d2f..52851ee1 100644 --- a/src/ipa/rpi/controller/rpi/agc_channel.cpp +++ b/src/ipa/rpi/controller/rpi/agc_channel.cpp @@ -260,6 +260,8 @@ int AgcConfig::read(const libcamera::YamlObject ¶ms) desaturate = params["desaturate"].get(1); + maxDigitalGain = params["max_digital_gain"].get(4.0); + return 0; } @@ -508,7 +510,8 @@ void AgcChannel::prepare(Metadata *imageMetadata) * Never ask for a gain < 1.0, and also impose * some upper limit. Make it customisable? */ - prepareStatus.digitalGain = std::max(1.0, std::min(digitalGain, 4.0)); + prepareStatus.digitalGain = std::max(1.0, std::min(digitalGain, + config_.maxDigitalGain)); LOG(RPiAgc, Debug) << "Actual exposure " << actualExposure; LOG(RPiAgc, Debug) << "Use digitalGain " << prepareStatus.digitalGain; LOG(RPiAgc, Debug) << "Effective exposure " diff --git a/src/ipa/rpi/controller/rpi/agc_channel.h b/src/ipa/rpi/controller/rpi/agc_channel.h index fa697e6f..e3475d86 100644 --- a/src/ipa/rpi/controller/rpi/agc_channel.h +++ b/src/ipa/rpi/controller/rpi/agc_channel.h @@ -78,6 +78,7 @@ struct AgcConfig { double defaultAnalogueGain; double stableRegion; bool desaturate; + double maxDigitalGain; }; class AgcChannel