| Message ID | 20260817114349.994123-39-barnabas.pocze@ideasonboard.com |
|---|---|
| State | Superseded |
| Headers | show |
| Series |
|
| Related | show |
Hi Barnabás On Mon, Aug 17, 2026 at 01:43:39PM +0200, Barnabás Pőcze wrote: > 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> > Reviewed-by: Milan Zamazal <mzamazal@redhat.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > --- > src/ipa/simple/algorithms/agc.cpp | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/src/ipa/simple/algorithms/agc.cpp b/src/ipa/simple/algorithms/agc.cpp > index 5307fda953..e24eacde72 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"; > -- > 2.55.0 >
diff --git a/src/ipa/simple/algorithms/agc.cpp b/src/ipa/simple/algorithms/agc.cpp index 5307fda953..e24eacde72 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";