From patchwork Tue Jan 26 10:28:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 11003 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 6A307BD808 for ; Tue, 26 Jan 2021 10:28:53 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 37667682FA; Tue, 26 Jan 2021 11:28:53 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="KCV6+JBo"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DA88D682FA for ; Tue, 26 Jan 2021 11:28:51 +0100 (CET) Received: from pyrite.rasen.tech (unknown [IPv6:2400:4051:61:600:2c71:1b79:d06d:5032]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E0E578B6; Tue, 26 Jan 2021 11:28:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1611656931; bh=g7JHqzEv+3imoFUC5H6JkM5l2rc9fwQptpOGIzKPp+4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KCV6+JBoml1ex6E0BX3v801Egic0wgeQugz0WdMKU5P6qBN7FgS8XgFHKP1Y9jNsg YdIcHE8TtYBoQHwSs18u9QMmapLU5uWf4QYSRMTL+XfnI89VpfmK68wfCRAEujyH4g gvgv9D3kDkaQSpKO1eUbWAFucC27HLMM0PzQ/qNE= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Tue, 26 Jan 2021 19:28:24 +0900 Message-Id: <20210126102825.147026-8-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210126102825.147026-1-paul.elder@ideasonboard.com> References: <20210126102825.147026-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 7/8] android: camera_device: Cache request metadata X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The settings in an android capture request may be null, in which case the settings from the most recently submitted capture request should be used. Cache the request settings to achieve this. Signed-off-by: Paul Elder Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- Changes in v5: - expand todo Changes in v4: - use default CameraMetadata constructor for lastSettings_ (so no initialization in CameraDevice constructor) - add todo for incremental caching of android request settings Changes in v3: - rebase on "android: camera device and metatada improvements", so it's a bit cleaner New in v2 --- src/android/camera_device.cpp | 10 ++++++++++ src/android/camera_device.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index f0a24514..d297bdf4 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1694,6 +1694,16 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques */ Camera3RequestDescriptor *descriptor = new Camera3RequestDescriptor(camera_.get(), camera3Request); + /* + * \todo The Android request model is incremental, settings passed in + * previous requests are to be effective until overridden explicitly in + * a new request. Do we need to cache settings incrementally here, or is + * it handled by the Android camera service ? + */ + if (camera3Request->settings) + lastSettings_ = camera3Request->settings; + else + descriptor->settings_ = lastSettings_; LOG(HAL, Debug) << "Queueing Request to libcamera with " << descriptor->numBuffers_ << " HAL streams"; diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 4b0d8575..9cbfcad3 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -134,6 +134,8 @@ private: int orientation_; unsigned int maxJpegBufferSize_; + + CameraMetadata lastSettings_; }; #endif /* __ANDROID_CAMERA_DEVICE_H__ */