[PATCH v2] py: Add bindings for ControlId array information
Paul Elder
paul.elder at ideasonboard.com
Wed Oct 16 13:51:30 CEST 2024
Add python bindings for querying whether or not a ControlId is an array
type, and the size.
Example usage:
>>> cid
libcamera.ControlId(28, FrameDurationLimits[2], ControlType.Integer64)
>>> cid.isArray
True
>>> cid.size
2
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
Changes in v2:
- add size to __repr__
---
src/py/libcamera/py_main.cpp | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/py/libcamera/py_main.cpp b/src/py/libcamera/py_main.cpp
index 983b76f6e998..cbde8be16d43 100644
--- a/src/py/libcamera/py_main.cpp
+++ b/src/py/libcamera/py_main.cpp
@@ -7,6 +7,7 @@
#include "py_main.h"
+#include <limits>
#include <memory>
#include <stdexcept>
#include <string>
@@ -400,10 +401,22 @@ PYBIND11_MODULE(_libcamera, m)
.def_property_readonly("id", &ControlId::id)
.def_property_readonly("name", &ControlId::name)
.def_property_readonly("type", &ControlId::type)
+ .def_property_readonly("isArray", &ControlId::isArray)
+ .def_property_readonly("size", &ControlId::size)
.def("__str__", [](const ControlId &self) { return self.name(); })
.def("__repr__", [](const ControlId &self) {
- return py::str("libcamera.ControlId({}, {}, {})")
- .format(self.id(), self.name(), self.type());
+ std::string sizeStr = "";
+ if (self.isArray()) {
+ sizeStr = "[";
+ size_t size = self.size();
+ if (size == std::numeric_limits<size_t>::max())
+ sizeStr += "n";
+ else
+ sizeStr += std::to_string(size);
+ sizeStr += "]";
+ }
+ return py::str("libcamera.ControlId({}, {}{}, {})")
+ .format(self.id(), self.name(), sizeStr, self.type());
})
.def("enumerators", &ControlId::enumerators);
--
2.39.2
More information about the libcamera-devel
mailing list