[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