[libcamera-devel] [PATCH 2/2] android: camera_request: Lifetime of a Camera3RequestDescriptor
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Mar 1 10:31:11 CET 2022
Quoting Umang Jain (2022-01-04 06:52:01)
> This commit provides a sketch regarding Camera3RequestDescriptor
> which aids tracking each capture reuqest placed by the android
> framework to libcamera HAL.
>
> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
I like this. We could probably squeeze it down a bit but I don't think
it matters.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> src/android/camera_request.cpp | 88 ++++++++++++++++++++++++++++++++++
> 1 file changed, 88 insertions(+)
>
> diff --git a/src/android/camera_request.cpp b/src/android/camera_request.cpp
> index 027b46d3..fceaa1f7 100644
> --- a/src/android/camera_request.cpp
> +++ b/src/android/camera_request.cpp
> @@ -18,6 +18,94 @@ using namespace libcamera;
> *
> * A utility class that groups information about a capture request to be later
> * reused at request complete time to notify the framework.
> + *
> + *******************************************************************************
> + * Lifetime of a Camera3RequestDescriptor tracking a capture request placed by
> + * Android Framework
> + *******************************************************************************
> + *
> + *
> + * Android Framework
> + * │
> + * │ ┌──────────────────────────────────┐
> + * │ │camera3_capture_request_t │
> + * │ │ │
> + * │ │Requested output streams │
> + * │ │ stream1 stream2 stream3 ... │
> + * │ └──────────────────────────────────┘
> + * ▼
> + * ┌─────────────────────────────────────────────────────────────┐
> + * │ libcamera HAL │
> + * ├─────────────────────────────────────────────────────────────┤
> + * │ CameraDevice │
> + * │ │
> + * │ processCaptureRequest(camera3_capture_request_t request) │
> + * │ │
> + * │ - Create Camera3RequestDescriptor tracking this request │
> + * │ - Streams requiring post-processing are stored in the │
> + * │ pendingStreamsToProcess map │
> + * │ - Add this Camera3RequestDescriptor to descriptors' queue │
> + * │ CameraDevice::descriptors_ │
> + * │ │ ┌─────────────────────────┐
> + * │ - Queue the capture request to libcamera core ────────────┤►│libcamera core │
> + * │ │ ├─────────────────────────┤
> + * │ │ │- Capture from Camera │
> + * │ │ │ │
> + * │ │ │- Emit │
> + * │ │ │ Camera::requestComplete│
> + * │ requestCompleted(Request *request) ◄───────────────────────┼─┼──── │
> + * │ │ │ │
> + * │ - Check request completion status │ └─────────────────────────┘
> + * │ │
> + * │ - if (pendingStreamsToProcess > 0) │
> + * │ Queue all entries from pendingStreamsToProcess │
> + * │ else │ │
> + * │ completeDescriptor() │ └──────────────────────┐
> + * │ │ │
> + * │ ┌──────────────────────────┴───┬──────────────────┐ │
> + * │ │ │ │ │
> + * │ ┌──────────▼────────────┐ ┌───────────▼─────────┐ ▼ │
> + * │ │CameraStream1 │ │CameraStream2 │ .... │
> + * │ ├┬───┬───┬──────────────┤ ├┬───┬───┬────────────┤ │
> + * │ ││ │ │ │ ││ │ │ │ │
> + * │ │▼───▼───▼──────────────┤ │▼───▼───▼────────────┤ │
> + * │ │PostProcessorWorker │ │PostProcessorWorker │ │
> + * │ │ │ │ │ │
> + * │ │ +------------------+ │ │ +------------------+│ │
> + * │ │ | PostProcessor | │ │ | PostProcessor |│ │
> + * │ │ | process() | │ │ | process() |│ │
> + * │ │ | | │ │ | |│ │
> + * │ │ | Emit | │ │ | Emit |│ │
> + * │ │ | processComplete | │ │ | processComplete |│ │
> + * │ │ | | │ │ | |│ │
> + * │ │ +--------------│---+ │ │ +--------------│---+│ │
> + * │ │ │ │ │ │ │ │
> + * │ │ │ │ │ │ │ │
> + * │ └────────────────┼──────┘ └────────────────┼────┘ │
> + * │ │ │ │
> + * │ │ │ │
> + * │ │ │ │
> + * │ ▼ ▼ │
> + * │ +---------------------------------------+ +--------------+ │
> + * │ | CameraDevice | | | │
> + * │ | | | | │
> + * │ | streamProcessingComplete() | | | │
> + * │ | | | | │
> + * │ | - Check and set buffer status | | .... | │
> + * │ | - Remove post+processing entry | | | │
> + * │ | from pendingStreamsToProcess | | | │
> + * │ | | | | │
> + * │ | - if (pendingStreamsToProcess.empty())| | | │
> + * │ | completeDescriptor | | | │
> + * │ | | | | │
> + * │ +---------------------------------------+ +--------------+ │
> + * │ │
> + * └────────────────────────────────────────────────────────────────────────────────────┘
> + *
> + * +-------------+
> + * | | - PostProcessorWorker's thread
> + * | |
> + * +-------------+
> */
>
> Camera3RequestDescriptor::Camera3RequestDescriptor(
> --
> 2.31.1
>
More information about the libcamera-devel
mailing list