diff options
-rwxr-xr-x | src/py/libcamera/gen-py-controls.py (renamed from src/py/libcamera/gen-py-control-enums.py) | 20 | ||||
-rw-r--r-- | src/py/libcamera/meson.build | 16 | ||||
-rw-r--r-- | src/py/libcamera/py_controls_generated.cpp.in (renamed from src/py/libcamera/py_control_enums_generated.cpp.in) | 17 | ||||
-rw-r--r-- | src/py/libcamera/py_main.cpp | 4 |
4 files changed, 38 insertions, 19 deletions
diff --git a/src/py/libcamera/gen-py-control-enums.py b/src/py/libcamera/gen-py-controls.py index 6b2b5362..4c072e60 100755 --- a/src/py/libcamera/gen-py-control-enums.py +++ b/src/py/libcamera/gen-py-controls.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0-or-later # -# Generate Python bindings enums for controls from YAML +# Generate Python bindings controls from YAML import argparse import string @@ -27,18 +27,22 @@ def generate_py(controls): for ctrl in controls: name, ctrl = ctrl.popitem() - enum = ctrl.get('enum') - if not enum: - continue - if ctrl.get('draft'): ns = 'libcamera::controls::draft::' + container = 'draft' else: ns = 'libcamera::controls::' + container = 'controls' + + out += f'\t{container}.def_readonly_static("{name}", static_cast<const libcamera::ControlId *>(&{ns}{name}));\n\n' + + enum = ctrl.get('enum') + if not enum: + continue cpp_enum = name + 'Enum' - out += '\tpy::enum_<{}{}>(m, \"{}\")\n'.format(ns, cpp_enum, name) + out += '\tpy::enum_<{}{}>({}, \"{}\")\n'.format(ns, cpp_enum, container, cpp_enum) if name == 'LensShadingMapMode': prefix = 'LensShadingMapMode' @@ -54,9 +58,9 @@ def generate_py(controls): out += '\t\t.value(\"{}\", {}{})\n'.format(py_enum, ns, cpp_enum) - out += '\t;\n' + out += '\t;\n\n' - return {'enums': out} + return {'controls': out} def fill_template(template, data): diff --git a/src/py/libcamera/meson.build b/src/py/libcamera/meson.build index b705ac1f..e8010846 100644 --- a/src/py/libcamera/meson.build +++ b/src/py/libcamera/meson.build @@ -18,17 +18,21 @@ pycamera_sources = files([ 'py_main.cpp', ]) -gen_py_control_enums_input_files = files([ +# Generate controls + +gen_py_controls_input_files = files([ '../../libcamera/control_ids.yaml', - 'py_control_enums_generated.cpp.in', + 'py_controls_generated.cpp.in', ]) -gen_py_control_enums = files('gen-py-control-enums.py') +gen_py_controls = files('gen-py-controls.py') pycamera_sources += custom_target('py_gen_controls', - input : gen_py_control_enums_input_files, - output : ['py_control_enums_generated.cpp'], - command : [gen_py_control_enums, '-o', '@OUTPUT@', '@INPUT@']) + input : gen_py_controls_input_files, + output : ['py_controls_generated.cpp'], + command : [gen_py_controls, '-o', '@OUTPUT@', '@INPUT@']) + +# Generate formats gen_py_formats_input_files = files([ '../../libcamera/formats.yaml', diff --git a/src/py/libcamera/py_control_enums_generated.cpp.in b/src/py/libcamera/py_controls_generated.cpp.in index ed81fbe7..cb8442ba 100644 --- a/src/py/libcamera/py_control_enums_generated.cpp.in +++ b/src/py/libcamera/py_controls_generated.cpp.in @@ -2,7 +2,7 @@ /* * Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> * - * Python bindings - Auto-generated control enums + * Python bindings - Auto-generated controls * * This file is auto-generated. Do not edit. */ @@ -13,7 +13,18 @@ namespace py = pybind11; -void init_py_control_enums_generated(py::module& m) +class PyControls { -${enums} +}; + +class PyDraftControls +{ +}; + +void init_py_controls_generated(py::module& m) +{ + auto controls = py::class_<PyControls>(m, "controls"); + auto draft = py::class_<PyDraftControls>(controls, "draft"); + +${controls} } diff --git a/src/py/libcamera/py_main.cpp b/src/py/libcamera/py_main.cpp index 5d389942..33ecc1cd 100644 --- a/src/py/libcamera/py_main.cpp +++ b/src/py/libcamera/py_main.cpp @@ -131,14 +131,14 @@ static void handleRequestCompleted(Request *req) } void init_py_enums(py::module &m); -void init_py_control_enums_generated(py::module &m); +void init_py_controls_generated(py::module &m); void init_py_formats_generated(py::module &m); void init_py_geometry(py::module &m); PYBIND11_MODULE(_libcamera, m) { init_py_enums(m); - init_py_control_enums_generated(m); + init_py_controls_generated(m); init_py_geometry(m); /* Forward declarations */ |