ipa: libipa: pwl: Allow to parse a plain yaml value as single point PWL

In the tuning files, it is useful to specify some values as PWL that
produces a different output value depending on an input value. For
example it is useful to specify the relativeLuminanceTarget depending on
the lux level, so that the regulation regulates a bit darker in low
light scenes. For simple setups this is not necessary and a single value
is sufficient.

This patch extends the yaml loading code, so that a single point PWL can
also be specified as a plain value. This way the following yaml
expressions are all valid:

yTarget: [ 1000, 0.15, 2000, 0.17 ]  # Regular PWL
yTarget: [ 0, 0.17 ]                 # Single point PWL
yTarget: 0.17                        # Same as above

For cases (I'm not aware of any) where a single point Pwl is not allowed
there is no change as that must be checked externally anyways.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
This commit is contained in:
Stefan Klug
2025-11-19 14:22:10 +01:00
parent dadeb67fcc
commit 3b4414ccaa

View File

@@ -437,6 +437,15 @@ template<>
std::optional<ipa::Pwl>
YamlObject::Getter<ipa::Pwl>::get(const YamlObject &obj) const
{
/* Treat a single value as single point PWL. */
if (obj.isValue()) {
auto v = obj.get<double>();
if (!v)
return std::nullopt;
return ipa::Pwl({ { { 0.0, *v } } });
}
if (!obj.size() || obj.size() % 2)
return std::nullopt;