[RFC PATCH v2 08/12] ipa: libipa: vector: Add element-wise min() and max() functions
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Nov 18 14:53:41 CET 2024
On Mon, Nov 18, 2024 at 02:41:54PM +0100, Milan Zamazal wrote:
> 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:
Unfortunately that doesn't seem to be the case.
> Reviewed-by: Milan Zamazal <mzamazal at redhat.com>
>
> > constexpr T dot(const Vector<T, Rows> &other) const
> > {
> > T ret = 0;
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list