[libcamera-devel] [PATCH v3 06/30] py: Add CameraManager.read_event()
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri May 27 20:14:15 CEST 2022
Hi Tomi,
Thank you for the patch.
On Fri, May 27, 2022 at 05:44:23PM +0300, Tomi Valkeinen wrote:
> Add CameraManager.read_event() so that the user does not need to call
> os.read().
>
> We use eventfd, and we must always read 8 bytes. Hiding that inside
> read_event() makes sense.
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
I would still like to make this nicer, but it can be done later.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/py/cam/cam.py | 3 +--
> src/py/libcamera/py_main.cpp | 8 ++++++++
> test/py/unittests.py | 3 +--
> 3 files changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/src/py/cam/cam.py b/src/py/cam/cam.py
> index e2bc78da..66df18bf 100755
> --- a/src/py/cam/cam.py
> +++ b/src/py/cam/cam.py
> @@ -9,7 +9,6 @@
> import argparse
> import binascii
> import libcamera as libcam
> -import os
> import sys
> import traceback
>
> @@ -294,7 +293,7 @@ def event_handler(state):
> cm = state['cm']
> contexts = state['contexts']
>
> - os.read(cm.efd, 8)
> + cm.read_event()
>
> reqs = cm.get_ready_requests()
>
> diff --git a/src/py/libcamera/py_main.cpp b/src/py/libcamera/py_main.cpp
> index e7066841..5d389942 100644
> --- a/src/py/libcamera/py_main.cpp
> +++ b/src/py/libcamera/py_main.cpp
> @@ -212,6 +212,14 @@ PYBIND11_MODULE(_libcamera, m)
> return gEventfd;
> })
>
> + .def("read_event", [](CameraManager &) {
> + uint8_t buf[8];
> +
> + int ret = read(gEventfd, buf, 8);
> + if (ret != 8)
> + throw std::system_error(errno, std::generic_category());
> + })
> +
> .def("get_ready_requests", [](CameraManager &) {
> std::vector<Request *> v;
>
> diff --git a/test/py/unittests.py b/test/py/unittests.py
> index 7dede33b..8c445bc9 100755
> --- a/test/py/unittests.py
> +++ b/test/py/unittests.py
> @@ -7,7 +7,6 @@ from collections import defaultdict
> import errno
> import gc
> import libcamera as libcam
> -import os
> import selectors
> import time
> import typing
> @@ -278,7 +277,7 @@ class SimpleCaptureMethods(CameraTesterBase):
> while running:
> events = sel.select()
> for key, _ in events:
> - os.read(key.fd, 8)
> + cm.read_event()
>
> ready_reqs = cm.get_ready_requests()
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list