@@ -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";
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(-)