[PATCH 02/10] libcamera: controls: Generate enum value-name maps
Paul Elder
paul.elder at ideasonboard.com
Mon Apr 8 09:05:37 CEST 2024
Hi Dan,
On Fri, Mar 22, 2024 at 01:14:43PM +0000, Daniel Scally wrote:
> Generate maps associating control enumerated control values with a
> string representing that value to provide a central reference for
> them across all pipeline handlers.
>
> Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> include/libcamera/control_ids.h.in | 2 ++
> include/libcamera/property_ids.h.in | 2 ++
> utils/gen-controls.py | 19 +++++++++++++++++++
> 3 files changed, 23 insertions(+)
>
> diff --git a/include/libcamera/control_ids.h.in b/include/libcamera/control_ids.h.in
> index d53b1cf7..58dd48e1 100644
> --- a/include/libcamera/control_ids.h.in
> +++ b/include/libcamera/control_ids.h.in
> @@ -10,7 +10,9 @@
> #pragma once
>
> #include <array>
> +#include <map>
> #include <stdint.h>
> +#include <string>
>
> #include <libcamera/controls.h>
>
> diff --git a/include/libcamera/property_ids.h.in b/include/libcamera/property_ids.h.in
> index 43372c71..f51ba028 100644
> --- a/include/libcamera/property_ids.h.in
> +++ b/include/libcamera/property_ids.h.in
> @@ -9,7 +9,9 @@
>
> #pragma once
>
> +#include <map>
> #include <stdint.h>
> +#include <string>
>
> #include <libcamera/controls.h>
>
> diff --git a/utils/gen-controls.py b/utils/gen-controls.py
> index 6cd5e362..4fe1e705 100755
> --- a/utils/gen-controls.py
> +++ b/utils/gen-controls.py
> @@ -140,6 +140,12 @@ ${description}
> */''')
> enum_values_start = string.Template('''extern const std::array<const ControlValue, ${size}> ${name}Values = {''')
> enum_values_values = string.Template('''\tstatic_cast<int32_t>(${name}),''')
> + name_value_map_doc = string.Template('''/**
> + * \\var ${name}NameValueMap
> + * \\brief Map of all $name supported value names (in std::string format) to value
> + */''')
> + name_value_map_start = string.Template('''extern const std::map<std::string, ${type}> ${name}NameValueMap = {''')
> + name_value_values = string.Template('''\t{ "${name}", ${name} },''')
>
> ctrls_doc = {}
> ctrls_def = {}
> @@ -183,6 +189,7 @@ ${description}
>
> values_info = {
> 'name': info['name'],
> + 'type': ctrl.type,
> 'size': num_entries,
> }
> target_doc.append(enum_values_doc.substitute(values_info))
> @@ -194,6 +201,15 @@ ${description}
> target_def.append(enum_values_values.substitute(value_info))
> target_def.append("};")
>
> + target_doc.append(name_value_map_doc.substitute(values_info))
> + target_def.append(name_value_map_start.substitute(values_info))
> + for enum in ctrl.enum_values:
> + value_info = {
> + 'name': enum.name
> + }
> + target_def.append(name_value_values.substitute(value_info))
> + target_def.append("};")
> +
> target_doc.append(doc_template.substitute(info))
> target_def.append(def_template.substitute(info))
>
> @@ -231,6 +247,7 @@ def generate_h(controls, mode, ranges):
> enum_template_start = string.Template('''enum ${name}Enum {''')
> enum_value_template = string.Template('''\t${name} = ${value},''')
> enum_values_template = string.Template('''extern const std::array<const ControlValue, ${size}> ${name}Values;''')
> + name_value_map_template = string.Template('''extern const std::map<std::string, ${type}> ${name}NameValueMap;''')
> template = string.Template('''extern const Control<${type}> ${name};''')
>
> ctrls = {}
> @@ -273,9 +290,11 @@ def generate_h(controls, mode, ranges):
>
> values_info = {
> 'name': info['name'],
> + 'type': ctrl.type,
> 'size': num_entries,
> }
> target_ctrls.append(enum_values_template.substitute(values_info))
> + target_ctrls.append(name_value_map_template.substitute(values_info))
>
> target_ctrls.append(template.substitute(info))
> id_value[vendor] += 1
> --
> 2.34.1
>
More information about the libcamera-devel
mailing list