[PATCH 09/11] ipa: libipa: pwl: Specialize YamlObject getter
Paul Elder
paul.elder at ideasonboard.com
Thu Jun 13 10:05:02 CEST 2024
On Thu, Jun 13, 2024 at 04:39:42AM +0300, Laurent Pinchart wrote:
> Implement a specialization of the YamlObject::Getter structure to
> support deserializing ipa::Pwl objects from YAML data.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> src/ipa/libipa/pwl.cpp | 35 +++++++++++++++++++++++++++++++++++
> 1 file changed, 35 insertions(+)
>
> diff --git a/src/ipa/libipa/pwl.cpp b/src/ipa/libipa/pwl.cpp
> index cf864fbb3889..3c639645fa3d 100644
> --- a/src/ipa/libipa/pwl.cpp
> +++ b/src/ipa/libipa/pwl.cpp
> @@ -459,4 +459,39 @@ std::string Pwl::toString() const
>
> } /* namespace ipa */
>
> +#ifndef __DOXYGEN__
> +/*
> + * The YAML data shall be a list of numerical values with an even number of
> + * elements. They are parsed in pairs into x and y points in the piecewise
> + * linear function, and added in order. x must be monotonically increasing.
> + */
> +template<>
> +std::optional<ipa::Pwl>
> +YamlObject::Getter<ipa::Pwl>::get(const YamlObject &obj) const
> +{
> + if (!obj.size() || obj.size() % 2)
> + return std::nullopt;
> +
> + ipa::Pwl pwl;
> +
> + const auto &list = obj.asList();
> +
> + for (auto it = list.begin(); it != list.end(); it++) {
> + auto x = it->get<double>();
> + if (!x)
> + return std::nullopt;
> + auto y = (++it)->get<double>();
> + if (!y)
> + return std::nullopt;
> +
> + pwl.append(*x, *y);
> + }
> +
> + if (pwl.size() != obj.size() / 2)
> + return std::nullopt;
> +
> + return pwl;
> +}
> +#endif /* __DOXYGEN__ */
> +
> } /* namespace libcamera */
More information about the libcamera-devel
mailing list