| Message ID | 20251119132221.2088013-2-stefan.klug@ideasonboard.com |
|---|---|
| State | Accepted |
| Headers | show |
| Series |
|
| Related | show |
On Wed, Nov 19, 2025 at 02:22:10PM +0100, Stefan Klug wrote: > 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 either case is > supported transparently without the need for additional external code. I don't think this is quite correct. There was no need for external code. What this patch does is support a shortcut syntax for single-point PWL. The code seems fine, but the commit message is confusing. > 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> > > --- > > Changes in v3: > - Collected tags > > Changes in v2: > - Added this patch > --- > src/ipa/libipa/pwl.cpp | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/src/ipa/libipa/pwl.cpp b/src/ipa/libipa/pwl.cpp > index 69a9334112e8..78ba43e39b77 100644 > --- a/src/ipa/libipa/pwl.cpp > +++ b/src/ipa/libipa/pwl.cpp > @@ -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 */ s/PWL/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; >
diff --git a/src/ipa/libipa/pwl.cpp b/src/ipa/libipa/pwl.cpp index 69a9334112e8..78ba43e39b77 100644 --- a/src/ipa/libipa/pwl.cpp +++ b/src/ipa/libipa/pwl.cpp @@ -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;