[libcamera-devel] [PATCH 07/14] py: cam.py: exit on exception

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue May 17 10:21:13 CEST 2022


Hi Tomi,

Thank you for the patch.

On Mon, May 16, 2022 at 05:10:15PM +0300, Tomi Valkeinen wrote:
> 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>

> ---
>  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):

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list