[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