From edef303bbec5fc706e4cdc528f290bb1a254a82e Mon Sep 17 00:00:00 2001 From: Fang Hui Date: Mon, 26 Feb 2024 11:08:12 +0800 Subject: android: camera_device: Save capture settings unconditionally As the Android framework sends to the camera device settings incrementally (only the ones that change are updated), the CameraDevice class in the Android camera HAL keeps a copy of the last received settings to be able to apply controls to the libcamera Camera and to populate metadata correctly. When a valid 'camera3Request->settings' is provided, it gets saved to 'lastSettings_' but 'descriptor->settings_' is not initialized until the next frame (assuming it does not contain more settings). Fix this by assigning to 'descriptor->settings_' the last saved settings unconditionally. Signed-off-by: Fang Hui Reviewed-by: Jacopo Mondi Reviewed-by: Umang Jain Tested-by: Jacopo Mondi Signed-off-by: Jacopo Mondi --- src/android/camera_device.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 25cedd44..d2679a97 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -952,8 +952,8 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques */ if (camera3Request->settings) lastSettings_ = camera3Request->settings; - else - descriptor->settings_ = lastSettings_; + + descriptor->settings_ = lastSettings_; LOG(HAL, Debug) << "Queueing request " << descriptor->request_->cookie() << " with " << descriptor->buffers_.size() << " streams"; @@ -1108,6 +1108,8 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques } if (state_ == State::Stopped) { + lastSettings_ = {}; + ret = camera_->start(); if (ret) { LOG(HAL, Error) << "Failed to start camera"; -- cgit v1.2.1