[PATCH] android: camera_device: The first valid settings should be saved
Umang Jain
umang.jain at ideasonboard.com
Wed Feb 28 09:05:20 CET 2024
Hi Jacopo,
Thank you for the discussion,
On 26/02/24 7:51 pm, Jacopo Mondi wrote:
> Hi Fang Hui
>
> In subject:
>
> android: camera_device: Save capture settings unconditionally
>
> On Mon, Feb 26, 2024 at 11:08:12AM +0800, Fang Hui wrote:
>> If not, it will be deferred to the next frame.
> This commit message is really too short and does not explain why this
> is an issue. With your ack I would change it to:
>
> ------------------------------------------------------------------------------
> 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.
> ------------------------------------------------------------------------------
>
> And now that I wrote the last sentence, I realized lastSettings_ is
> not re-initialized between streaming sessions.
>
> You will likely need:
>
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -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";
>
> Which I can again add when applying with your ack.
With the original patch hunk below and lastSettings_= {}; and commit
message fixed,
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
>
> Thanks
> j
>
>> Signed-off-by: Fang Hui <hui.fang at nxp.com>
>> ---
>> src/android/camera_device.cpp | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
>> index 25cedd44..d45ed1a5 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";
>> --
>> 2.25.1
>>
More information about the libcamera-devel
mailing list