[PATCH 09/11] ipa: libipa: pwl: Specialize YamlObject getter
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Jun 13 13:36:54 CEST 2024
Quoting Laurent Pinchart (2024-06-13 02:39:42)
> 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>
> ---
> 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.
> + */
I love this text. But I'm not sure it's where users will see it ;-(
> +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)
I assume that's safe...
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> + return std::nullopt;
> +
> + pwl.append(*x, *y);
> + }
> +
> + if (pwl.size() != obj.size() / 2)
Now I see the value of size...
> + return std::nullopt;
> +
> + return pwl;
> +}
> +#endif /* __DOXYGEN__ */
> +
> } /* namespace libcamera */
> --
> Regards,
>
> Laurent Pinchart
>
More information about the libcamera-devel
mailing list