py: Add CameraManager.read_event()

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@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Tomi Valkeinen 2022-05-27 17:44:23 +03:00 committed by Laurent Pinchart
parent ccfcf5f235
commit 210ce547a4
3 changed files with 10 additions and 4 deletions

View file

@ -9,7 +9,6 @@
import argparse import argparse
import binascii import binascii
import libcamera as libcam import libcamera as libcam
import os
import sys import sys
import traceback import traceback
@ -294,7 +293,7 @@ def event_handler(state):
cm = state['cm'] cm = state['cm']
contexts = state['contexts'] contexts = state['contexts']
os.read(cm.efd, 8) cm.read_event()
reqs = cm.get_ready_requests() reqs = cm.get_ready_requests()

View file

@ -212,6 +212,14 @@ PYBIND11_MODULE(_libcamera, m)
return gEventfd; 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 &) { .def("get_ready_requests", [](CameraManager &) {
std::vector<Request *> v; std::vector<Request *> v;

View file

@ -7,7 +7,6 @@ from collections import defaultdict
import errno import errno
import gc import gc
import libcamera as libcam import libcamera as libcam
import os
import selectors import selectors
import time import time
import typing import typing
@ -278,7 +277,7 @@ class SimpleCaptureMethods(CameraTesterBase):
while running: while running:
events = sel.select() events = sel.select()
for key, _ in events: for key, _ in events:
os.read(key.fd, 8) cm.read_event()
ready_reqs = cm.get_ready_requests() ready_reqs = cm.get_ready_requests()