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

Barnabás Pőcze pobrn at protonmail.com
Wed May 8 15:08:31 CEST 2024


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; })
  { }

and removing the default argument from the other.


> [...]


Regards,
Barnabás Pőcze


More information about the libcamera-devel mailing list