[libcamera-devel] [PATCH v5 13/13] py: Improve stub type generation for PyCameraEvent
Tomi Valkeinen
tomi.valkeinen at ideasonboard.com
Sat Jun 3 09:56:15 CEST 2023
We store the camera, request and fb fields in PyCameraEvent as
py::objects, so that we keep the refs and keep-alives. When we
return py::objects to the Python side, they, obviously, show up
as "objects" when the stub generation is looking at the fields.
Fix this by manually casting the py::objects to the correct C++
counterparts, which causes pybind11 to assign the correct types for the
properties, helping stubgen to generate correct types.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/py/libcamera/py_main.cpp | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/py/libcamera/py_main.cpp b/src/py/libcamera/py_main.cpp
index bc40849a..85303d71 100644
--- a/src/py/libcamera/py_main.cpp
+++ b/src/py/libcamera/py_main.cpp
@@ -145,11 +145,19 @@ PYBIND11_MODULE(_libcamera, m)
.value("RequestCompleted", CameraEventType::RequestCompleted)
.value("BufferCompleted", CameraEventType::BufferCompleted);
+ /*
+ * For camera, request and fb fields, manually typecast to the C++ type,
+ * so that pybind11 assigns the actual type for the return value. This
+ * makes the stubs generated by pybind11-stubgen contain the correct type,
+ * instead of "object".
+ *
+ * Maybe there's a better way to do this...
+ */
pyEvent
.def_readonly("type", &PyCameraEvent::type_)
- .def_readonly("camera", &PyCameraEvent::camera_)
- .def_readonly("request", &PyCameraEvent::request_)
- .def_readonly("fb", &PyCameraEvent::fb_);
+ .def_property_readonly("camera", [](PyCameraEvent &self) { return self.camera_.cast<Camera *>(); })
+ .def_property_readonly("request", [](PyCameraEvent &self) { return self.request_.cast<Request *>(); })
+ .def_property_readonly("fb", [](PyCameraEvent &self) { return self.fb_.cast<FrameBuffer *>(); });
pyCameraManager
.def_static("singleton", []() {
--
2.34.1
More information about the libcamera-devel
mailing list