[libcamera-devel] [PATCH v2 05/13] libcamera: controls: Generate a vector of enumerated values
Jacopo Mondi
jacopo at jmondi.org
Wed Oct 21 15:40:25 CEST 2020
Hi Kieran,
On Wed, Oct 21, 2020 at 01:58:17PM +0100, Kieran Bingham wrote:
> Hi Jacopo,
>
> On 20/10/2020 19:05, Jacopo Mondi wrote:
> > For each Control that support enumerated values generate a vector
> > of ControlValues which contains the full list of values.
> >
> > At the expense of a slight increase in memory occupation this change
> > allows the construction of the ControlInfo associated with a Control
> > from the values list, defaulting the minimum and maximum values
> > reported by the ControlInfo.
> >
>
> Personally I think this is a good way to handle this data.
>
>
> > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > ---
> > src/libcamera/control_ids.cpp.in | 2 ++
> > utils/gen-controls.py | 10 ++++++++++
> > 2 files changed, 12 insertions(+)
> >
> > diff --git a/src/libcamera/control_ids.cpp.in b/src/libcamera/control_ids.cpp.in
> > index 056645cfbdfb..ca0b5b22f899 100644
> > --- a/src/libcamera/control_ids.cpp.in
> > +++ b/src/libcamera/control_ids.cpp.in
> > @@ -6,8 +6,10 @@
> > *
> > * This file is auto-generated. Do not edit.
> > */
> > +#include <vector>
> >
> > #include <libcamera/control_ids.h>
> > +#include <libcamera/controls.h>
> >
> > /**
> > * \file control_ids.h
> > diff --git a/utils/gen-controls.py b/utils/gen-controls.py
> > index 93cb3885c3da..87036fe7dec1 100755
> > --- a/utils/gen-controls.py
> > +++ b/utils/gen-controls.py
> > @@ -100,6 +100,8 @@ ${description}
> > def generate_h(controls):
> > enum_template_start = string.Template('''enum ${name}Values {''')
> > enum_value_template = string.Template('''\t${name} = ${value},''')
> > + enum_list_start = string.Template('''static const std::vector<ControlValue> ${name}List = {''')
>
> 'List' appended to the name feels a bit odd.
>
> Seeing the usage in the next patch,:
>
> &controls::AeMeteringMode, ControlInfo(controls::AeMeteringModeList)
> &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeList)
> &controls::AeExposureMode, ControlInfo(controls::AeExposureModeList)
>
> Throwing alternatives in to the bikeshed, because that's all it is, this
> could be 'Values' or 'Enum' on the end.
>
'Values' is taken as you can see a few lines above
I'm not excited by 'Enum' to be honest
What if we rename the value enumeration with 'Value' and the vector
'Values' :
enum ControlXYZValue {
ControlXYZOne,
ControlXYZTwo,
ControlXYZThree,
};
static const std::vector<ControlValue> ControlXYZValues = {
static_cast<int32_t>(ControlXYZOne),
static_cast<int32_t>(ControlXYZTwo),
static_cast<int32_t>(ControlXYZThree),
};
> To me, List could end up being a list of strings, or floats, or anything.
>
> Values, could also be ... arbitrary numerical values, but matches the
> name in the ControlInfo
>
> Enum ... will be integer values ...
>
>
> Bikeshed colours aside:
>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
Thanks
j
> > + enum_list_values = string.Template('''\tstatic_cast<int32_t>(${name}),''')
> > template = string.Template('''extern const Control<${type}> ${name};''')
> >
> > ctrls = []
> > @@ -140,6 +142,14 @@ def generate_h(controls):
> > target_ctrls.append(enum_value_template.substitute(value_info))
> > target_ctrls.append("};")
> >
> > + target_ctrls.append(enum_list_start.substitute(info))
> > + for entry in enum:
> > + value_info = {
> > + 'name': entry['name'],
> > + }
> > + target_ctrls.append(enum_list_values.substitute(value_info))
> > + target_ctrls.append("};")
> > +
> > target_ctrls.append(template.substitute(info))
> > id_value += 1
> >
> >
>
> --
> Regards
> --
> Kieran
More information about the libcamera-devel
mailing list