[libcamera-devel] [PATCH v4 16/16] py: examples: Add simple-cam.py
Tomi Valkeinen
tomi.valkeinen at ideasonboard.com
Mon Jun 6 14:56:00 CEST 2022
On 06/06/2022 15:07, Laurent Pinchart wrote:
>> +def handle_camera_event(cm):
>> + # cm.get_ready_requests() will not block here, as we know there is an event
>> + # to read.
>> +
>> + reqs = cm.get_ready_requests()
>> +
>> + # Process the captured frames
>> +
>> + for req in reqs:
>> + process_request(req)
>
> This got me to think a bit more about event handling. libcamera will
> expose other events (such as frame start, error events, ...). What would
> you think of replacing get_ready_requests() with a handle_events()
> function that would take a set of callbacks for different types of
> events ? Or we could add handle_request, handle_sof, ... properties to
> CameraManager, to store the event handlers, which would still be called
> by handle_events().
I think that makes sense. Not sure if it'd be properties or giving the
callbacks in parameters, but something like that. Let's break the API
again! ;)
We probably want to have the order of events preserved, so we need a
single queue of events. So maybe get_events() instead of
get_ready_requests(), and on top we might have handle_events() which
gets the events and calls the handler based on the event type.
>> + # --------------------------------------------------------------------
>> + # Start Capture
>> + #
>> + # In order to capture frames the Camera has to be started and
>> + # Request queued to it. Enough Request to fill the Camera pipeline
>> + # depth have to be queued before the Camera start delivering frames.
>> + #
>> + # When a Request has been completed, it will be added to a list in the
>> + # CameraManager and an event will be raised using eventfd.
>> + #
>> + # The list of completed Requests can be retrieved with
>> + # CameraManager.get_ready_requests(), which will also clear the list in the
>> + # CameraManager.
>> + #
>> + # The eventfd can be retrieved from CameraManager.event_fd, and the fd can
>
> I know you renamed this from fd to event_fd recently, but I'm thinking
It was 'efd' before, not 'fd'.
> about going back to fd. The rationale is that it needs to be an fd on
> which the application can select(), but the fact that it's an event_fd
> is an implementation detail.
Note that 'event_fd' does not refer to it being a Linux eventfd, but
rather it being an fd that it used to wait for events.
I'm not strictly against the change, though, but 'fd' sounds a bit vague
to me.
Tomi
More information about the libcamera-devel
mailing list