[libcamera-devel] [PATCH v2 09/13] ipa: ipu3: agc: Rename gains properly

Jean-Michel Hautbois jeanmichel.hautbois at ideasonboard.com
Wed Oct 20 17:46:03 CEST 2021


We have mixed terms between gain, analogue gain and the exposure value
gain.

Make it clear when we are using the analogue gain from the sensor, and
when we are using the calculated gain to be applied to the exposure
value to reach the target.

Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/ipa/ipu3/algorithms/agc.cpp | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
index 84e41834..eec77378 100644
--- a/src/ipa/ipu3/algorithms/agc.cpp
+++ b/src/ipa/ipu3/algorithms/agc.cpp
@@ -124,7 +124,7 @@ void Agc::filterExposure()
 	LOG(IPU3Agc, Debug) << "After filtering, total_exposure " << filteredExposure_;
 }
 
-void Agc::lockExposureGain(uint32_t &exposure, double &gain)
+void Agc::lockExposureGain(uint32_t &exposure, double &analogueGain)
 {
 	/* Algorithm initialization should wait for first valid frames */
 	/* \todo - have a number of frames given by DelayedControls ?
@@ -136,16 +136,17 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain)
 	if (std::abs(iqMean_ - kEvGainTarget * knumHistogramBins) <= 1) {
 		LOG(IPU3Agc, Debug) << "!!! Good exposure with iqMean = " << iqMean_;
 	} else {
-		double newGain = kEvGainTarget * knumHistogramBins / iqMean_;
+		double evGain = kEvGainTarget * knumHistogramBins / iqMean_;
 
 		/* extracted from Rpi::Agc::computeTargetExposure */
 		utils::Duration currentShutter = exposure * lineDuration_;
-		currentExposureNoDg_ = currentShutter * gain;
+		currentExposureNoDg_ = currentShutter * analogueGain;
 		LOG(IPU3Agc, Debug) << "Actual total exposure " << currentExposureNoDg_
 				    << " Shutter speed " << currentShutter
-				    << " Gain " << gain;
+				    << " Gain " << analogueGain
+				    << " Needed ev gain " << evGain;
 
-		currentExposure_ = currentExposureNoDg_ * newGain;
+		currentExposure_ = currentExposureNoDg_ * evGain;
 		utils::Duration minShutterSpeed = minExposureLines_ * lineDuration_;
 		utils::Duration maxShutterSpeed = maxExposureLines_ * lineDuration_;
 
@@ -173,7 +174,7 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain)
 				    << stepGain;
 
 		exposure = shutterTime / lineDuration_;
-		gain = stepGain;
+		analogueGain = stepGain;
 	}
 	lastFrame_ = frameCount_;
 }
@@ -181,9 +182,9 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain)
 void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats)
 {
 	uint32_t &exposure = context.frameContext.agc.exposure;
-	double &gain = context.frameContext.agc.gain;
+	double &analogueGain = context.frameContext.agc.gain;
 	processBrightness(stats, context.configuration.grid.bdsGrid);
-	lockExposureGain(exposure, gain);
+	lockExposureGain(exposure, analogueGain);
 	frameCount_++;
 }
 
-- 
2.32.0



More information about the libcamera-devel mailing list