[libcamera-devel] [PATCH 1/2] properties: Support draft controls and properties
Jacopo Mondi
jacopo at jmondi.org
Thu Oct 8 13:01:15 CEST 2020
Hi Kieran
On Wed, Oct 07, 2020 at 07:57:18PM +0100, Kieran Bingham wrote:
> Extend the control and property framework to support exposing draft
> controls and properties in a scoped namespace.
>
> The controls/properties themselves will retain the same ordering in the
> relevant enum/id maps - but the access to any draft control will require
> explicitly referencing through its' draft:: namespace prefix.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Thanks for handling this. I was too lazy to poke with the control
generation script :)
I'll base my next draft controls version on this patch
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Thanks
j
> ---
> include/libcamera/control_ids.h.in | 6 +++++
> include/libcamera/property_ids.h.in | 6 +++++
> src/libcamera/property_ids.cpp.in | 13 +++++++++++
> utils/gen-controls.py | 36 ++++++++++++++++++++++-------
> 4 files changed, 53 insertions(+), 8 deletions(-)
>
> diff --git a/include/libcamera/control_ids.h.in b/include/libcamera/control_ids.h.in
> index 95a7a7f1e260..baadca83b103 100644
> --- a/include/libcamera/control_ids.h.in
> +++ b/include/libcamera/control_ids.h.in
> @@ -26,6 +26,12 @@ ${controls}
>
> extern const ControlIdMap controls;
>
> +namespace draft {
> +
> +${draft_controls}
> +
> +} /* namespace draft */
> +
> } /* namespace controls */
>
> } /* namespace libcamera */
> diff --git a/include/libcamera/property_ids.h.in b/include/libcamera/property_ids.h.in
> index e4dea335cd3b..52646c1f78ae 100644
> --- a/include/libcamera/property_ids.h.in
> +++ b/include/libcamera/property_ids.h.in
> @@ -24,6 +24,12 @@ ${ids}
>
> ${controls}
>
> +namespace draft {
> +
> +${draft_controls}
> +
> +} /* namespace draft */
> +
> extern const ControlIdMap properties;
>
> } /* namespace properties */
> diff --git a/src/libcamera/property_ids.cpp.in b/src/libcamera/property_ids.cpp.in
> index bfdd823f63b0..275c1caff3ec 100644
> --- a/src/libcamera/property_ids.cpp.in
> +++ b/src/libcamera/property_ids.cpp.in
> @@ -23,12 +23,25 @@ namespace properties {
>
> ${controls_doc}
>
> +namespace draft {
> +
> +${draft_controls_doc}
> +
> +} /* namespace draft */
> +
> #ifndef __DOXYGEN__
> /*
> * Keep the properties definitions hidden from doxygen as it incorrectly parses
> * them as functions.
> */
> ${controls_def}
> +
> +namespace draft {
> +
> +${draft_controls_def}
> +
> +} /* namespace draft */
> +
> #endif
>
> /**
> diff --git a/utils/gen-controls.py b/utils/gen-controls.py
> index 87c3d52ada6d..f28db27ba19f 100755
> --- a/utils/gen-controls.py
> +++ b/utils/gen-controls.py
> @@ -36,6 +36,8 @@ ${description}
>
> ctrls_doc = []
> ctrls_def = []
> + draft_ctrls_doc = []
> + draft_ctrls_def = []
> ctrls_map = []
>
> for ctrl in controls:
> @@ -55,6 +57,12 @@ ${description}
> 'id_name': id_name,
> }
>
> + target_doc = ctrls_doc
> + target_def = ctrls_def
> + if ctrl.get('draft'):
> + target_doc = draft_ctrls_doc
> + target_def = draft_ctrls_def
> +
> enum = ctrl.get('enum')
> if enum:
> enum_doc = []
> @@ -70,15 +78,21 @@ ${description}
>
> enum_doc = '\n *\n'.join(enum_doc)
> enum_doc += '\n */'
> - ctrls_doc.append(enum_doc)
> + target_doc.append(enum_doc)
> +
> + target_doc.append(doc_template.substitute(info))
> + target_def.append(def_template.substitute(info))
> +
> + if ctrl.get('draft'):
> + name = 'draft::' + name
>
> - ctrls_doc.append(doc_template.substitute(info))
> - ctrls_def.append(def_template.substitute(info))
> ctrls_map.append('\t{ ' + id_name + ', &' + name + ' },')
>
> return {
> 'controls_doc': '\n\n'.join(ctrls_doc),
> 'controls_def': '\n'.join(ctrls_def),
> + 'draft_controls_doc': '\n\n'.join(draft_ctrls_doc),
> + 'draft_controls_def': '\n\n'.join(draft_ctrls_def),
> 'controls_map': '\n'.join(ctrls_map),
> }
>
> @@ -89,6 +103,7 @@ def generate_h(controls):
> template = string.Template('''extern const Control<${type}> ${name};''')
>
> ctrls = []
> + draft_ctrls = []
> ids = []
> id_value = 1
>
> @@ -109,22 +124,27 @@ def generate_h(controls):
> 'type': ctrl_type,
> }
>
> + target_ctrls = ctrls
> + if ctrl.get('draft'):
> + target_ctrls = draft_ctrls
> +
> enum = ctrl.get('enum')
> if enum:
> - ctrls.append(enum_template_start.substitute(info))
> + target_ctrls.append(enum_template_start.substitute(info))
>
> for entry in enum:
> value_info = {
> 'name': entry['name'],
> 'value': entry['value'],
> }
> - ctrls.append(enum_value_template.substitute(value_info))
> - ctrls.append("};")
> + target_ctrls.append(enum_value_template.substitute(value_info))
> + target_ctrls.append("};")
>
> - ctrls.append(template.substitute(info))
> + target_ctrls.append(template.substitute(info))
> id_value += 1
>
> - return {'ids': '\n'.join(ids), 'controls': '\n'.join(ctrls)}
> + return {'ids': '\n'.join(ids), 'controls': '\n'.join(ctrls),
> + 'draft_controls': '\n'.join(draft_ctrls)}
>
>
> def fill_template(template, data):
> --
> 2.25.1
>
More information about the libcamera-devel
mailing list