summaryrefslogtreecommitdiff
path: root/src/py
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>2022-05-18 16:13:19 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-05-18 17:52:29 +0300
commit1384cedf509e0b2038c974c44521fa1d659d574c (patch)
tree59dcc0dfeb71277abded71c102b70df785cd95b7 /src/py
parent7ac7e0e119edfd9bdba5bafec48512338598eea4 (diff)
py: cam.py: Exit on exception
Catch exceptions in the event_handler, as they would get ignored otherwise. Print the exception and return False so that the main loop exits. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/py')
-rwxr-xr-xsrc/py/cam/cam.py23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/py/cam/cam.py b/src/py/cam/cam.py
index 012b191c..c7da97d7 100755
--- a/src/py/cam/cam.py
+++ b/src/py/cam/cam.py
@@ -11,6 +11,7 @@ import binascii
import libcamera as libcam
import os
import sys
+import traceback
class CustomAction(argparse.Action):
@@ -286,19 +287,23 @@ def capture_start(contexts):
# Called from renderer when there is a libcamera event
def event_handler(state):
- cm = state['cm']
- contexts = state['contexts']
+ try:
+ cm = state['cm']
+ contexts = state['contexts']
- os.read(cm.efd, 8)
+ os.read(cm.efd, 8)
- reqs = cm.get_ready_requests()
+ reqs = cm.get_ready_requests()
- for req in reqs:
- ctx = next(ctx for ctx in contexts if ctx['idx'] == req.cookie)
- request_handler(state, ctx, req)
+ for req in reqs:
+ ctx = next(ctx for ctx in contexts if ctx['idx'] == req.cookie)
+ request_handler(state, ctx, req)
- running = any(ctx['reqs-completed'] < ctx['opt-capture'] for ctx in contexts)
- return running
+ running = any(ctx['reqs-completed'] < ctx['opt-capture'] for ctx in contexts)
+ return running
+ except Exception as e:
+ traceback.print_exc()
+ return False
def request_handler(state, ctx, req):