[19/19] libcamera: software_isp: Update black level only on exposure changes
diff mbox series

Message ID 20240626072100.55497-20-mzamazal@redhat.com
State New
Headers show
Series
  • Software ISP refactoring
Related show

Commit Message

Milan Zamazal June 26, 2024, 7:21 a.m. UTC
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@redhat.com>
---
 src/ipa/simple/algorithms/blc.cpp | 9 +++++++--
 src/ipa/simple/algorithms/blc.h   | 4 ++++
 2 files changed, 11 insertions(+), 2 deletions(-)

Patch
diff mbox series

diff --git a/src/ipa/simple/algorithms/blc.cpp b/src/ipa/simple/algorithms/blc.cpp
index 82c89dbb..9025cb3a 100644
--- a/src/ipa/simple/algorithms/blc.cpp
+++ b/src/ipa/simple/algorithms/blc.cpp
@@ -32,11 +32,13 @@  int BlackLevel::init(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 (context.configuration.black.set) {
+	if (context.configuration.black.set &&
+	    frameContext.sensor.exposure == exposure_ &&
+	    frameContext.sensor.gain == gain_) {
 		context.configuration.black.changed = false;
 		return;
 	}
@@ -61,7 +63,10 @@  void BlackLevel::process(IPAContext &context,
 		if (seen >= pixelThreshold) {
 			context.configuration.black.level =
 				static_cast<double>(i) / SwIspStats::kYHistogramSize;
+			context.configuration.black.set = true;
 			context.configuration.black.changed = true;
+			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 c8b8d92d..4ddd2c94 100644
--- a/src/ipa/simple/algorithms/blc.h
+++ b/src/ipa/simple/algorithms/blc.h
@@ -30,6 +30,10 @@  public:
 		     IPAFrameContext &frameContext,
 		     const SwIspStats *stats,
 		     ControlList &metadata) override;
+
+private:
+	uint32_t exposure_;
+	double gain_;
 };
 
 } /* namespace ipa::soft::algorithms */