[v2,2/7] ipa: rpi: agc: Make the maximum digital gain configurable
diff mbox series

Message ID 20250721074853.1463358-3-naush@raspberrypi.com
State Accepted
Headers show
Series
  • Raspberry Pi AEC/AGC update
Related show

Commit Message

Naushir Patuck July 21, 2025, 7:47 a.m. UTC
From: David Plowman <david.plowman@raspberrypi.com>

The maximum allowed digital gain is hard-coded to 4. Make it a
configurable parameter.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
---
 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(-)

Patch
diff mbox series

diff --git a/src/ipa/rpi/controller/rpi/agc_channel.cpp b/src/ipa/rpi/controller/rpi/agc_channel.cpp
index ae0cb148893a..f6a191d50fb3 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 &params)
 
 	desaturate = params["desaturate"].get<int>(1);
 
+	maxDigitalGain = params["max_digital_gain"].get<double>(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 fa697e6fa57d..e3475d864b0b 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