[libcamera-devel] [PATCH v2] android: camera_device: Stop camera when re-configuring it
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Dec 7 13:25:48 CET 2020
Hi Jacopo,
On 07/12/2020 09:34, Jacopo Mondi wrote:
> The Android camera device HAL3 specification does not require a
> camera to go through any explicit close() call between configurations.
> It is legit for a camera to be configured, a number of requests
s/legit/legitimate/
> processed and the re-configured again without any explicit stop.
s/the/then/
>
> The libcamera Android camera HAL starts the Camera at the first handled
> request, and only stops it at camera close time. This mean, that two
s/mean,/means/
> camera configuration attempts part of the same streaming session are only
s/part//
> interleaved by capture requests handling.
>
> The libcamera::Camera state machine requires the Camera to be stopped,
s/,//
> before any configuration take place, and this currently doesn't happen.
>
> Fix this by stopping the camera and the associated worker thread if
> a configuration attempt is performed while the Camera is in running
> state.
>
> This patch fixes cros_camera_test:
> Camera3PreviewTest/Camera3SinglePreviewTest.Camera3BasicPreviewTest/0
>
> Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
>
> ---
> v1 -> v2:
> - Stop the camera at the very beginning of the configureStreams() function
>
> ---
> src/android/camera_device.cpp | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 675af5705055..dc711550546c 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -1210,6 +1210,13 @@ PixelFormat CameraDevice::toPixelFormat(int format) const
> */
> int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
> {
> + /* Before any configuration attempt, stop the camera if it's running. */
> + if (running_) {
> + worker_.stop();
> + camera_->stop();
> + running_ = false;
> + }
> +
> /*
> * Generate an empty configuration, and construct a StreamConfiguration
> * for each camera3_stream to add to it.
> --
> 2.29.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list