[RFC PATCH v2 08/12] ipa: libipa: vector: Add element-wise min() and max() functions

Milan Zamazal mzamazal at redhat.com
Mon Nov 18 14:41:54 CET 2024


Laurent Pinchart <laurent.pinchart at ideasonboard.com> writes:

> Add functions to calculate the element-wise minimum and maximum of two
> vectors or of a vector and a scalar. This will be used in algorithm
> implementations.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
>  src/ipa/libipa/vector.cpp | 28 ++++++++++++++++++++++++++++
>  src/ipa/libipa/vector.h   | 20 ++++++++++++++++++++
>  2 files changed, 48 insertions(+)
>
> diff --git a/src/ipa/libipa/vector.cpp b/src/ipa/libipa/vector.cpp
> index a45f08fde493..14816cdb5d09 100644
> --- a/src/ipa/libipa/vector.cpp
> +++ b/src/ipa/libipa/vector.cpp
> @@ -183,6 +183,34 @@ namespace ipa {
>   * \return This vector
>   */
>  
> +/**
> + * \fn Vector::min(const Vector &other) const
> + * \brief Calculate the minimum of this vector and \a other element-wise
> + * \param[in] other The other vector
> + * \return The element-wise minimum of this vector and \a other
> + */
> +
> +/**
> + * \fn Vector::min(T scalar) const
> + * \brief Calculate the minimum of this vector and \a scalar element-wise
> + * \param[in] scalar The scalar
> + * \return The element-wise minimum of this vector and \a scalar
> + */
> +
> +/**
> + * \fn Vector::max(const Vector &other) const
> + * \brief Calculate the maximum of this vector and \a other element-wise
> + * \param[in] other The other vector
> + * \return The element-wise maximum of this vector and \a other
> + */
> +
> +/**
> + * \fn Vector::max(T scalar) const
> + * \brief Calculate the maximum of this vector and \a scalar element-wise
> + * \param[in] scalar The scalar
> + * \return The element-wise maximum of this vector and \a scalar
> + */
> +
>  /**
>   * \fn Vector::dot(const Vector<T, Rows> &other) const
>   * \brief Compute the dot product
> diff --git a/src/ipa/libipa/vector.h b/src/ipa/libipa/vector.h
> index 722ffc57ea45..949dc4650aa4 100644
> --- a/src/ipa/libipa/vector.h
> +++ b/src/ipa/libipa/vector.h
> @@ -154,6 +154,26 @@ public:
>  		return apply(scalar, [](T a, T b) { return a / b; });
>  	}
>  
> +	constexpr Vector min(const Vector &other) const
> +	{
> +		return apply(*this, other, [](T a, T b) { return std::min(a, b); });
> +	}
> +
> +	constexpr Vector min(T scalar) const
> +	{
> +		return apply(*this, scalar, [](T a, T b) { return std::min(a, b); });
> +	}
> +
> +	constexpr Vector max(const Vector &other) const
> +	{
> +		return apply(*this, other, [](T a, T b) { return std::max(a, b); });
> +	}
> +
> +	constexpr Vector max(T scalar) const
> +	{
> +		return apply(*this, scalar, [](T a, T b) -> T { return std::max(a, b); });
> +	}
> +

I wonder whether there could be a way to use std::max and std::min
directly, without wrapping them by lambdas.  I don't know so:

Reviewed-by: Milan Zamazal <mzamazal at redhat.com>

>  	constexpr T dot(const Vector<T, Rows> &other) const
>  	{
>  		T ret = 0;



More information about the libcamera-devel mailing list