[RFC PATCH v1 22/23] py: Use `Request::metadata2()`
Barnabás Pőcze
barnabas.pocze at ideasonboard.com
Fri Jun 6 18:41:55 CEST 2025
Expose the newly introduced `MetadataList` for any given `Request`.
This done similarly to the `Request::metadata()`, using the same
`controlValueToPy()` function. However, that function is changed to
accept `ControlValueView` as its argument since `MetadataList` does
not contain `ControlValue`s directly.
Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>
---
src/py/libcamera/py_helpers.cpp | 4 ++--
src/py/libcamera/py_helpers.h | 2 +-
src/py/libcamera/py_main.cpp | 9 ++++-----
3 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/src/py/libcamera/py_helpers.cpp b/src/py/libcamera/py_helpers.cpp
index 1ad1d4c1a..32f5cdaa6 100644
--- a/src/py/libcamera/py_helpers.cpp
+++ b/src/py/libcamera/py_helpers.cpp
@@ -16,7 +16,7 @@ namespace py = pybind11;
using namespace libcamera;
template<typename T>
-static py::object valueOrTuple(const ControlValue &cv)
+static py::object valueOrTuple(const ControlValueView &cv)
{
if (cv.isArray()) {
const T *v = reinterpret_cast<const T *>(cv.data().data());
@@ -31,7 +31,7 @@ static py::object valueOrTuple(const ControlValue &cv)
return py::cast(cv.get<T>());
}
-py::object controlValueToPy(const ControlValue &cv)
+py::object controlValueToPy(const ControlValueView &cv)
{
switch (cv.type()) {
case ControlTypeNone:
diff --git a/src/py/libcamera/py_helpers.h b/src/py/libcamera/py_helpers.h
index 983969dff..895006d0c 100644
--- a/src/py/libcamera/py_helpers.h
+++ b/src/py/libcamera/py_helpers.h
@@ -9,5 +9,5 @@
#include <pybind11/pybind11.h>
-pybind11::object controlValueToPy(const libcamera::ControlValue &cv);
+pybind11::object controlValueToPy(const libcamera::ControlValueView &cv);
libcamera::ControlValue pyToControlValue(const pybind11::object &ob, libcamera::ControlType type);
diff --git a/src/py/libcamera/py_main.cpp b/src/py/libcamera/py_main.cpp
index 441a70ab4..126f544e7 100644
--- a/src/py/libcamera/py_main.cpp
+++ b/src/py/libcamera/py_main.cpp
@@ -460,14 +460,13 @@ PYBIND11_MODULE(_libcamera, m)
self.controls().set(id.id(), pyToControlValue(value, id.type()));
})
.def_property_readonly("metadata", [](Request &self) {
- /* Convert ControlList to std container */
+ /* Convert MetadataList to std container */
std::unordered_map<const ControlId *, py::object> ret;
- for (const auto &[key, cv] : self.metadata()) {
- const ControlId *id = controls::controls.at(key);
- py::object ob = controlValueToPy(cv);
- ret[id] = ob;
+ for (const auto &[k, v] : self.metadata2()) {
+ const ControlId *id = controls::controls.at(k);
+ ret.try_emplace(id, controlValueToPy(v));
}
return ret;
--
2.49.0
More information about the libcamera-devel
mailing list