[PATCH v8 18/18] libcamera: software_isp: Update black level only on exposure changes

Milan Zamazal mzamazal at redhat.com
Fri Sep 27 15:46:24 CEST 2024


The black level is likely to get updated, if ever, only after exposure
or gain changes.  Don't compute its possible updates if exposure and
gain are unchanged.

It's probably not worth trying to implement something more
sophisticated.  Better to spend the effort on supporting tuning files.

Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
---
 src/ipa/simple/algorithms/blc.cpp | 9 ++++++++-
 src/ipa/simple/algorithms/blc.h   | 4 ++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/ipa/simple/algorithms/blc.cpp b/src/ipa/simple/algorithms/blc.cpp
index 755108b05..b9f2aaa6d 100644
--- a/src/ipa/simple/algorithms/blc.cpp
+++ b/src/ipa/simple/algorithms/blc.cpp
@@ -30,10 +30,15 @@ int BlackLevel::configure(IPAContext &context,
 
 void BlackLevel::process(IPAContext &context,
 			 [[maybe_unused]] const uint32_t frame,
-			 [[maybe_unused]] IPAFrameContext &frameContext,
+			 IPAFrameContext &frameContext,
 			 const SwIspStats *stats,
 			 [[maybe_unused]] ControlList &metadata)
 {
+	if (frameContext.sensor.exposure == exposure_ &&
+	    frameContext.sensor.gain == gain_) {
+		return;
+	}
+
 	const SwIspStats::Histogram &histogram = stats->yHistogram;
 
 	/*
@@ -54,6 +59,8 @@ void BlackLevel::process(IPAContext &context,
 		seen += histogram[i];
 		if (seen >= pixelThreshold) {
 			context.activeState.blc.level = i * histogramRatio;
+			exposure_ = frameContext.sensor.exposure;
+			gain_ = frameContext.sensor.gain;
 			LOG(IPASoftBL, Debug)
 				<< "Auto-set black level: "
 				<< i << "/" << SwIspStats::kYHistogramSize
diff --git a/src/ipa/simple/algorithms/blc.h b/src/ipa/simple/algorithms/blc.h
index 49bdcc610..828ad8b18 100644
--- a/src/ipa/simple/algorithms/blc.h
+++ b/src/ipa/simple/algorithms/blc.h
@@ -24,6 +24,10 @@ public:
 		     IPAFrameContext &frameContext,
 		     const SwIspStats *stats,
 		     ControlList &metadata) override;
+
+private:
+	uint32_t exposure_;
+	double gain_;
 };
 
 } /* namespace ipa::soft::algorithms */
-- 
2.44.1



More information about the libcamera-devel mailing list