[PATCH v3] ipa: libipa: histogram: Add transform parameter to constructor

Paul Elder paul.elder at ideasonboard.com
Wed May 8 16:56:15 CEST 2024


On Wed, May 08, 2024 at 01:08:31PM +0000, Barnabás Pőcze wrote:
> Hi
> 
> 
> 2024. május 8., szerda 12:35 keltezéssel, Paul Elder <paul.elder at ideasonboard.com> írta:
> 
> > Add a parameter to the histogram constructor that takes a transformation
> > function to apply to all the bins upon construction.
> > 
> > This is necessary notably for the rkisp1, as the values reported from
> > the hardware are 20 bits where the upper 16-bits are meaningful integer
> > values and the lower 4 bits are fractional and meant to be discarded. As
> > adding a right-shift parameter is probably too specialized, a generic
> > function is added as a parameter instead.
> > 
> > Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> > 
> > [...]
> > diff --git a/src/ipa/libipa/histogram.h b/src/ipa/libipa/histogram.h
> > index 54bb2a19..26326125 100644
> > --- a/src/ipa/libipa/histogram.h
> > +++ b/src/ipa/libipa/histogram.h
> > @@ -10,10 +10,10 @@
> >  #include <assert.h>
> >  #include <limits.h>
> >  #include <stdint.h>
> > -
> >  #include <vector>
> > 
> >  #include <libcamera/base/span.h>
> > +#include <libcamera/base/utils.h>
> > 
> >  namespace libcamera {
> > 
> > @@ -23,7 +23,17 @@ class Histogram
> >  {
> >  public:
> >  	Histogram() { cumulative_.push_back(0); }
> > -	Histogram(Span<const uint32_t> data);
> > +
> > +	template<typename Transform>
> > +	Histogram(Span<const uint32_t> data,
> > +		  Transform transform = [](uint32_t x) { return x; })
> > +	{
> > +		cumulative_.resize(data.size() + 1);
> > +		cumulative_[0] = 0;
> > +		for (const auto &[i, value] : utils::enumerate(data))
> > +			cumulative_[i + 1] = cumulative_[i] + transform(value);
> > +	}
> 
> As far as I am aware this won't compile if called with just a single argument.
> 
> You can solve that by adding another constructor, like this:
> 
>   Histogram(Span<const uint32_t> data)
>     : Histogram(data, [](uint32_t x) { return x; })
>   { }

Yeeep I realized that soon after...

New version incoming!


Paul

> 
> and removing the default argument from the other.
> 
> 
> > [...]
> 


More information about the libcamera-devel mailing list