summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>2022-05-27 17:44:23 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-05-27 22:02:31 +0300
commit210ce547a42ca559592efaef069648ddfe0d2945 (patch)
tree08440f63961739e06ab80088471e965f9eeb86e2
parentccfcf5f2356fc3bd1dfb825652b2f05738651b46 (diff)
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>
-rwxr-xr-xsrc/py/cam/cam.py3
-rw-r--r--src/py/libcamera/py_main.cpp8
-rwxr-xr-xtest/py/unittests.py3
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()