[libcamera-devel] [PATCH] ipa: rkisp1: agc: drop hard-coded analogue gain range

Benjamin Bara bbara93 at gmail.com
Fri May 19 16:51:09 CEST 2023


From: Benjamin Bara <benjamin.bara at skidata.com>

As the sensor's analogue gain range is known (read-out in
IPARkISP1::configure()), drop the limiting hard-coded range.
This enables better performance in low-light conditions for sensors with
a higher gain (e.g. the imx327).

Signed-off-by: Benjamin Bara <benjamin.bara at skidata.com>
---
 src/ipa/rkisp1/algorithms/agc.cpp | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
index 22f70aba..a4e5500e 100644
--- a/src/ipa/rkisp1/algorithms/agc.cpp
+++ b/src/ipa/rkisp1/algorithms/agc.cpp
@@ -36,15 +36,6 @@ namespace ipa::rkisp1::algorithms {
 
 LOG_DEFINE_CATEGORY(RkISP1Agc)
 
-/*
- * Limits for analogue gain values
- *
- * \todo Remove the hard-coded limits and let the sensor helper specify
- * the minimum and maximum allowed gain values.
- */
-static constexpr double kMinAnalogueGain = 1.0;
-static constexpr double kMaxAnalogueGain = 16.0;
-
 /* \todo Honour the FrameDurationLimits control instead of hardcoding a limit */
 static constexpr utils::Duration kMaxShutterSpeed = 60ms;
 
@@ -80,9 +71,7 @@ Agc::Agc()
 int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)
 {
 	/* Configure the default exposure and gain. */
-	context.activeState.agc.automatic.gain =
-		std::max(context.configuration.sensor.minAnalogueGain,
-			 kMinAnalogueGain);
+	context.activeState.agc.automatic.gain = context.configuration.sensor.minAnalogueGain;
 	context.activeState.agc.automatic.exposure =
 		10ms / context.configuration.sensor.lineDuration;
 	context.activeState.agc.manual.gain = context.activeState.agc.automatic.gain;
@@ -265,10 +254,8 @@ void Agc::computeExposure(IPAContext &context, IPAFrameContext &frameContext,
 	utils::Duration maxShutterSpeed = std::min(configuration.sensor.maxShutterSpeed,
 						   kMaxShutterSpeed);
 
-	double minAnalogueGain = std::max(configuration.sensor.minAnalogueGain,
-					  kMinAnalogueGain);
-	double maxAnalogueGain = std::min(configuration.sensor.maxAnalogueGain,
-					  kMaxAnalogueGain);
+	double minAnalogueGain = configuration.sensor.minAnalogueGain;
+	double maxAnalogueGain = configuration.sensor.maxAnalogueGain;
 
 	/* Consider within 1% of the target as correctly exposed. */
 	if (utils::abs_diff(evGain, 1.0) < 0.01)
-- 
2.34.1



More information about the libcamera-devel mailing list