[RFC,v2,35/43] ipa: simple: agc: Use `Histogram`
diff mbox series

Message ID 20260723154327.1357866-36-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • ipa: libipa: agc rework
Related show

Commit Message

Barnabás Pőcze July 23, 2026, 3:43 p.m. UTC
Use the generic `Histogram` type. This is needed to decouple the
implementation from the software isp, in order to make this usable
by other components.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 src/ipa/simple/algorithms/agc.cpp | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

Patch
diff mbox series

diff --git a/src/ipa/simple/algorithms/agc.cpp b/src/ipa/simple/algorithms/agc.cpp
index b25c303835..cc33b269bf 100644
--- a/src/ipa/simple/algorithms/agc.cpp
+++ b/src/ipa/simple/algorithms/agc.cpp
@@ -14,6 +14,8 @@ 
 
 #include <libcamera/base/log.h>
 
+#include <libipa/histogram.h>
+
 #include "control_ids.h"
 
 namespace libcamera {
@@ -64,16 +66,16 @@  static constexpr float kExpMaxStep = 0.15;
 
 namespace {
 
-std::optional<float> calculateMSV(const SwIspStats::Histogram &histogram, uint8_t blackLevel)
+std::optional<float> calculateMSV(const Histogram &histogram, uint8_t blackLevel)
 {
 	/*
 	 * Calculate Mean Sample Value (MSV) according to formula from:
 	 * https://www.araa.asn.au/acra/acra2007/papers/paper84final.pdf
 	 */
 	const unsigned int blackLevelHistIdx =
-		blackLevel / (256 / SwIspStats::kYHistogramSize);
+		blackLevel * histogram.bins() / 256;
 	const unsigned int histogramSize =
-		SwIspStats::kYHistogramSize - blackLevelHistIdx;
+		histogram.bins() - blackLevelHistIdx;
 	const unsigned int yHistValsPerBin = histogramSize / kExposureBinsCount;
 	const unsigned int yHistValsPerBinMod =
 		histogramSize / (histogramSize % kExposureBinsCount + 1);
@@ -191,7 +193,7 @@  void Agc::process(IPAContext &context,
 		return;
 	}
 
-	auto exposureMSV = calculateMSV(stats->yHistogram, context.activeState.blc.level);
+	auto exposureMSV = calculateMSV({ stats->yHistogram }, context.activeState.blc.level);
 	if (!exposureMSV) {
 		LOG(IPASoftExposure, Debug)
 			<< "Not adjusting exposure due to insufficient histogram data";