[libcamera-devel] [PATCH v2 05/13] ipa: ipu3: agc: Rename exposure values properly

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


The exposure value is filtered in filterExposure() using the
currentExposure_ and setting a prevExposure_ variable. This is misnamed
as it is not the previous exposure, but a filtered value.

Rename it accordingly.

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 | 28 ++++++++++++++--------------
 src/ipa/ipu3/algorithms/agc.h   |  4 ++--
 2 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
index a001e349..b1757b91 100644
--- a/src/ipa/ipu3/algorithms/agc.cpp
+++ b/src/ipa/ipu3/algorithms/agc.cpp
@@ -49,7 +49,7 @@ static constexpr double kEvGainTarget = 0.5;
 
 Agc::Agc()
 	: frameCount_(0), lastFrame_(0), iqMean_(0.0), lineDuration_(0s),
-	  maxExposureTime_(0s), prevExposure_(0s), prevExposureNoDg_(0s),
+	  maxExposureTime_(0s), filteredExposure_(0s), filteredExposureNoDg_(0s),
 	  currentExposure_(0s), currentExposureNoDg_(0s)
 {
 }
@@ -100,24 +100,24 @@ void Agc::processBrightness(const ipu3_uapi_stats_3a *stats,
 void Agc::filterExposure()
 {
 	double speed = 0.2;
-	if (prevExposure_ == 0s) {
+	if (filteredExposure_ == 0s) {
 		/* DG stands for digital gain.*/
-		prevExposure_ = currentExposure_;
-		prevExposureNoDg_ = currentExposureNoDg_;
+		filteredExposure_ = currentExposure_;
+		filteredExposureNoDg_ = currentExposureNoDg_;
 	} else {
 		/*
 		 * If we are close to the desired result, go faster to avoid making
 		 * multiple micro-adjustments.
 		 * \ todo: Make this customisable?
 		 */
-		if (prevExposure_ < 1.2 * currentExposure_ &&
-		    prevExposure_ > 0.8 * currentExposure_)
+		if (filteredExposure_ < 1.2 * currentExposure_ &&
+		    filteredExposure_ > 0.8 * currentExposure_)
 			speed = sqrt(speed);
 
-		prevExposure_ = speed * currentExposure_ +
-				prevExposure_ * (1.0 - speed);
-		prevExposureNoDg_ = speed * currentExposureNoDg_ +
-				prevExposureNoDg_ * (1.0 - speed);
+		filteredExposure_ = speed * currentExposure_ +
+				filteredExposure_ * (1.0 - speed);
+		filteredExposureNoDg_ = speed * currentExposureNoDg_ +
+				filteredExposureNoDg_ * (1.0 - speed);
 	}
 	/*
 	 * We can't let the no_dg exposure deviate too far below the
@@ -125,10 +125,10 @@ void Agc::filterExposure()
 	 * in the ISP to hide it (which will cause nasty oscillation).
 	 */
 	double fastReduceThreshold = 0.4;
-	if (prevExposureNoDg_ <
-	    prevExposure_ * fastReduceThreshold)
-		prevExposureNoDg_ = prevExposure_ * fastReduceThreshold;
-	LOG(IPU3Agc, Debug) << "After filtering, total_exposure " << prevExposure_;
+	if (filteredExposureNoDg_ <
+	    filteredExposure_ * fastReduceThreshold)
+		filteredExposureNoDg_ = filteredExposure_ * fastReduceThreshold;
+	LOG(IPU3Agc, Debug) << "After filtering, total_exposure " << filteredExposure_;
 }
 
 void Agc::lockExposureGain(uint32_t &exposure, double &gain)
diff --git a/src/ipa/ipu3/algorithms/agc.h b/src/ipa/ipu3/algorithms/agc.h
index e0c315fc..16b9fa0a 100644
--- a/src/ipa/ipu3/algorithms/agc.h
+++ b/src/ipa/ipu3/algorithms/agc.h
@@ -44,8 +44,8 @@ private:
 	utils::Duration lineDuration_;
 	utils::Duration maxExposureTime_;
 
-	utils::Duration prevExposure_;
-	utils::Duration prevExposureNoDg_;
+	utils::Duration filteredExposure_;
+	utils::Duration filteredExposureNoDg_;
 	utils::Duration currentExposure_;
 	utils::Duration currentExposureNoDg_;
 
-- 
2.32.0



More information about the libcamera-devel mailing list