[libcamera-devel] [PATCH v2 07/13] py: cam.py: exit on exception
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue May 17 18:52:37 CEST 2022
Quoting Tomi Valkeinen (2022-05-17 15:33:19)
> 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 at ideasonboard.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> src/py/cam/cam.py | 23 ++++++++++++++---------
> 1 file 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):
> --
> 2.34.1
>
More information about the libcamera-devel
mailing list