From patchwork Fri Jul 24 14:21:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 8969 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 EA2AEBD878 for ; Fri, 24 Jul 2020 14:17:50 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9516361220; Fri, 24 Jul 2020 16:17:50 +0200 (CEST) Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8898460535 for ; Fri, 24 Jul 2020 16:17:48 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id D75F560003; Fri, 24 Jul 2020 14:17:47 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Fri, 24 Jul 2020 16:21:15 +0200 Message-Id: <20200724142120.95538-2-jacopo@jmondi.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200724142120.95538-1-jacopo@jmondi.org> References: <20200724142120.95538-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 1/6] android: camera_metadata: Mark isValid() as const 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 CameraMetadata::isValid() method does not modify the object state and can be called on const instances of the CameraMetadata class. Mark the method as const to allow that. Signed-off-by: Jacopo Mondi Reviewed-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- src/android/camera_metadata.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h index 75a9d7066f31..348a018165ef 100644 --- a/src/android/camera_metadata.h +++ b/src/android/camera_metadata.h @@ -17,7 +17,7 @@ public: CameraMetadata(size_t entryCapacity, size_t dataCapacity); ~CameraMetadata(); - bool isValid() { return valid_; } + bool isValid() const { return valid_; } bool addEntry(uint32_t tag, const void *data, size_t data_count); camera_metadata_t *get(); From patchwork Fri Jul 24 14:21:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 8970 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 339AEBD878 for ; Fri, 24 Jul 2020 14:17:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 0F9BF611B0; Fri, 24 Jul 2020 16:17:52 +0200 (CEST) Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3C93C60535 for ; Fri, 24 Jul 2020 16:17:49 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id B003B60003; Fri, 24 Jul 2020 14:17:48 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Fri, 24 Jul 2020 16:21:16 +0200 Message-Id: <20200724142120.95538-3-jacopo@jmondi.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200724142120.95538-1-jacopo@jmondi.org> References: <20200724142120.95538-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/6] android: camera_metadata: Add const version of get() 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" Add a const version of the CameraMetadata::get() method to retrieve a const reference to the camera metadata wrapped by the class instance. Signed-off-by: Jacopo Mondi Reviewed-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- src/android/camera_metadata.cpp | 5 +++++ src/android/camera_metadata.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp index 47b2e4ef117a..ea33e9c2de25 100644 --- a/src/android/camera_metadata.cpp +++ b/src/android/camera_metadata.cpp @@ -50,3 +50,8 @@ camera_metadata_t *CameraMetadata::get() { return valid_ ? metadata_ : nullptr; } + +const camera_metadata_t *CameraMetadata::get() const +{ + return valid_ ? metadata_ : nullptr; +} diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h index 348a018165ef..f16dd27bbf44 100644 --- a/src/android/camera_metadata.h +++ b/src/android/camera_metadata.h @@ -21,6 +21,7 @@ public: bool addEntry(uint32_t tag, const void *data, size_t data_count); camera_metadata_t *get(); + const camera_metadata_t *get() const; private: camera_metadata_t *metadata_; From patchwork Fri Jul 24 14:21:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 8971 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 7A9A0BD879 for ; Fri, 24 Jul 2020 14:17:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 35DCA611B4; Fri, 24 Jul 2020 16:17:52 +0200 (CEST) Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0DAD760535 for ; Fri, 24 Jul 2020 16:17:50 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 6A35E60003; Fri, 24 Jul 2020 14:17:49 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Fri, 24 Jul 2020 16:21:17 +0200 Message-Id: <20200724142120.95538-4-jacopo@jmondi.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200724142120.95538-1-jacopo@jmondi.org> References: <20200724142120.95538-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 3/6] andrdid: camera_device: Store const templates 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 request capture templates stored in the CameraDevice::requestTemplates_ should not be modified once created. Store a const reference to the request templates in the class member map. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- src/android/camera_device.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 5b8b9c3e26e2..af1b58ab6b4e 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -95,7 +95,7 @@ private: std::unique_ptr config_; CameraMetadata *staticMetadata_; - std::map requestTemplates_; + std::map requestTemplates_; const camera3_callback_ops_t *callbacks_; std::vector streamConfigurations_; From patchwork Fri Jul 24 14:21:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 8972 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 E9853BD878 for ; Fri, 24 Jul 2020 14:17:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5FF3861248; Fri, 24 Jul 2020 16:17:52 +0200 (CEST) Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0CD6661218 for ; Fri, 24 Jul 2020 16:17:51 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 39F9460003; Fri, 24 Jul 2020 14:17:50 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Fri, 24 Jul 2020 16:21:18 +0200 Message-Id: <20200724142120.95538-5-jacopo@jmondi.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200724142120.95538-1-jacopo@jmondi.org> References: <20200724142120.95538-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 4/6] android: camera_metadata: Add method to update an entry 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" Add a method to update an existing metadata tag entry, by wrapping the update_metadata_entry() function provided by the Android metadata library. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_metadata.cpp | 27 +++++++++++++++++++++++++++ src/android/camera_metadata.h | 1 + 2 files changed, 28 insertions(+) diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp index ea33e9c2de25..e48c987fb0fb 100644 --- a/src/android/camera_metadata.cpp +++ b/src/android/camera_metadata.cpp @@ -46,6 +46,33 @@ bool CameraMetadata::addEntry(uint32_t tag, const void *data, size_t count) return false; } +bool CameraMetadata::updateEntry(uint32_t tag, const void *data, size_t count) +{ + if (!valid_) + return false; + + const char *name = get_camera_metadata_tag_name(tag); + + camera_metadata_entry_t entry; + int ret = find_camera_metadata_entry(metadata_, tag, &entry); + if (ret) { + LOG(CameraMetadata, Error) + << "Failed to update tag " + << (name ? name : "unknown") << ": not present"; + return false; + } + + ret = update_camera_metadata_entry(metadata_, entry.index, data, + count, nullptr); + if (ret) { + LOG(CameraMetadata, Error) + << "Failed to update tag " << (name ? name : "unknown"); + return false; + } + + return true; +} + camera_metadata_t *CameraMetadata::get() { return valid_ ? metadata_ : nullptr; diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h index f16dd27bbf44..9d047b1bb534 100644 --- a/src/android/camera_metadata.h +++ b/src/android/camera_metadata.h @@ -19,6 +19,7 @@ public: bool isValid() const { return valid_; } bool addEntry(uint32_t tag, const void *data, size_t data_count); + bool updateEntry(uint32_t tag, const void *data, size_t data_count); camera_metadata_t *get(); const camera_metadata_t *get() const; From patchwork Fri Jul 24 14:21:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 8973 X-Patchwork-Delegate: jacopo@jmondi.org 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 104DEBD878 for ; Fri, 24 Jul 2020 14:17:55 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id DF71261220; Fri, 24 Jul 2020 16:17:54 +0200 (CEST) Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B15AB6123A for ; Fri, 24 Jul 2020 16:17:51 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 0A62360009; Fri, 24 Jul 2020 14:17:50 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Fri, 24 Jul 2020 16:21:19 +0200 Message-Id: <20200724142120.95538-6-jacopo@jmondi.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200724142120.95538-1-jacopo@jmondi.org> References: <20200724142120.95538-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 5/6] android: camera_device: Create request templates per use-case 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" Currently the request template returned from CameraDevice::constructDefaultRequestSettings() is the same for all the supported template types. To prepare to adjust the template depending on the use case, break out the template generation to dedicated function. As we currently support the PREVIEW use case only, make all the other template types use the captureTemplatePreview() function and just update the capture intent property. This requires a nasty const-cast on the generated template pack which will be removed once the functions will be properly populated. Signed-off-by: Jacopo Mondi --- src/android/camera_device.cpp | 146 +++++++++++++++++++++++++--------- src/android/camera_device.h | 7 ++ 2 files changed, 114 insertions(+), 39 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 48f8090a93db..b8cb118a960e 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -821,51 +821,15 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() return staticMetadata_->get(); } -/* - * Produce a metadata pack to be used as template for a capture request. - */ -const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) +const CameraMetadata *CameraDevice::captureTemplatePreview() { - auto it = requestTemplates_.find(type); - if (it != requestTemplates_.end()) - return it->second->get(); - - /* Use the capture intent matching the requested template type. */ - uint8_t captureIntent; - switch (type) { - case CAMERA3_TEMPLATE_PREVIEW: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW; - break; - case CAMERA3_TEMPLATE_STILL_CAPTURE: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE; - break; - case CAMERA3_TEMPLATE_VIDEO_RECORD: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD; - break; - case CAMERA3_TEMPLATE_VIDEO_SNAPSHOT: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT; - break; - case CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG; - break; - case CAMERA3_TEMPLATE_MANUAL: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_MANUAL; - break; - default: - LOG(HAL, Error) << "Invalid template request type: " << type; - return nullptr; - } - /* * \todo Keep this in sync with the actual number of entries. * Currently: 12 entries, 15 bytes */ CameraMetadata *requestTemplate = new CameraMetadata(15, 20); - if (!requestTemplate->isValid()) { - LOG(HAL, Error) << "Failed to allocate template metadata"; - delete requestTemplate; + if (!requestTemplate->isValid()) return nullptr; - } uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON; requestTemplate->addEntry(ANDROID_CONTROL_AE_MODE, @@ -911,10 +875,114 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) requestTemplate->addEntry(ANDROID_COLOR_CORRECTION_ABERRATION_MODE, &aberrationMode, 1); + uint8_t captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW; requestTemplate->addEntry(ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); - if (!requestTemplate->isValid()) { + return requestTemplate; +} + +const CameraMetadata *CameraDevice::captureTemplateStillCapture() +{ + const CameraMetadata *requestTemplate = captureTemplatePreview(); + if (!requestTemplate || !requestTemplate->isValid()) + return nullptr; + + uint8_t captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE; + const_cast(requestTemplate) + ->updateEntry(ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); + + return requestTemplate; +} + +const CameraMetadata *CameraDevice::captureTemplateVideoRecord() +{ + const CameraMetadata *requestTemplate = captureTemplatePreview(); + if (!requestTemplate || !requestTemplate->isValid()) + return nullptr; + + uint8_t captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD; + const_cast(requestTemplate) + ->updateEntry(ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); + + return requestTemplate; +} + +const CameraMetadata *CameraDevice::captureTemplateVideoSnapshot() +{ + const CameraMetadata *requestTemplate = captureTemplatePreview(); + if (!requestTemplate || !requestTemplate->isValid()) + return nullptr; + + uint8_t captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT; + const_cast(requestTemplate) + ->updateEntry(ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); + + return requestTemplate; +} + +const CameraMetadata *CameraDevice::captureTemplateZSL() +{ + const CameraMetadata *requestTemplate = captureTemplatePreview(); + if (!requestTemplate || !requestTemplate->isValid()) + return nullptr; + + uint8_t captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG; + const_cast(requestTemplate) + ->updateEntry(ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); + + return requestTemplate; +} + +const CameraMetadata *CameraDevice::captureTemplateManual() +{ + const CameraMetadata *requestTemplate = captureTemplatePreview(); + if (!requestTemplate || !requestTemplate->isValid()) + return nullptr; + + uint8_t captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_MANUAL; + const_cast(requestTemplate) + ->updateEntry(ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); + + return requestTemplate; +} + +/* + * Produce a metadata pack to be used as template for a capture request. + */ +const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) +{ + auto it = requestTemplates_.find(type); + if (it != requestTemplates_.end()) + return it->second->get(); + + /* Use the capture intent matching the requested template type. */ + const CameraMetadata *requestTemplate; + switch (type) { + case CAMERA3_TEMPLATE_PREVIEW: + requestTemplate = captureTemplatePreview(); + break; + case CAMERA3_TEMPLATE_STILL_CAPTURE: + requestTemplate = captureTemplateStillCapture(); + break; + case CAMERA3_TEMPLATE_VIDEO_RECORD: + requestTemplate = captureTemplateVideoRecord(); + break; + case CAMERA3_TEMPLATE_VIDEO_SNAPSHOT: + requestTemplate = captureTemplateVideoSnapshot(); + break; + case CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG: + requestTemplate = captureTemplateZSL(); + break; + case CAMERA3_TEMPLATE_MANUAL: + requestTemplate = captureTemplateManual(); + break; + default: + LOG(HAL, Error) << "Invalid template request type: " << type; + return nullptr; + } + + if (!requestTemplate || !requestTemplate->isValid()) { LOG(HAL, Error) << "Failed to construct request template"; delete requestTemplate; return nullptr; diff --git a/src/android/camera_device.h b/src/android/camera_device.h index af1b58ab6b4e..7bf68e23f7fe 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -87,6 +87,13 @@ private: std::unique_ptr getResultMetadata(int frame_number, int64_t timestamp); + const CameraMetadata *captureTemplatePreview(); + const CameraMetadata *captureTemplateStillCapture(); + const CameraMetadata *captureTemplateVideoRecord(); + const CameraMetadata *captureTemplateVideoSnapshot(); + const CameraMetadata *captureTemplateZSL(); + const CameraMetadata *captureTemplateManual(); + unsigned int id_; camera3_device_t camera3Device_; From patchwork Fri Jul 24 14:21:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 8974 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 39127BD879 for ; Fri, 24 Jul 2020 14:17:55 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 0E3B061243; Fri, 24 Jul 2020 16:17:55 +0200 (CEST) Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 632BE6124B for ; Fri, 24 Jul 2020 16:17:52 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id D9A1F60005; Fri, 24 Jul 2020 14:17:51 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Fri, 24 Jul 2020 16:21:20 +0200 Message-Id: <20200724142120.95538-7-jacopo@jmondi.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200724142120.95538-1-jacopo@jmondi.org> References: <20200724142120.95538-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 6/6] android: camera_device: Fix preview template 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" Add 5 controls to the generate preview template to comply with the camera3 specification. This change fixes CTS 9.0.r12 test [14/253] android.hardware.camera2.cts.CameraDeviceTest#testCameraDevicePreviewTemplate Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index b8cb118a960e..58901a119c18 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -377,7 +377,7 @@ std::tuple CameraDevice::calculateStaticMetadataSize() * Currently: 50 entries, 647 bytes of static metadata */ uint32_t numEntries = 50; - uint32_t byteSize = 647; + uint32_t byteSize = 667; /* * Calculate space occupation in bytes for dynamically built metadata @@ -779,6 +779,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_CONTROL_AE_MODE, ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, + ANDROID_CONTROL_AE_TARGET_FPS_RANGE, + ANDROID_CONTROL_AE_ANTIBANDING_MODE, ANDROID_CONTROL_AE_LOCK, ANDROID_CONTROL_AF_TRIGGER, ANDROID_CONTROL_AWB_MODE, @@ -787,6 +789,9 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_STATISTICS_FACE_DETECT_MODE, ANDROID_NOISE_REDUCTION_MODE, ANDROID_COLOR_CORRECTION_ABERRATION_MODE, + ANDROID_LENS_APERTURE, + ANDROID_LENS_OPTICAL_STABILIZATION_MODE, + ANDROID_CONTROL_MODE, ANDROID_CONTROL_CAPTURE_INTENT, }; staticMetadata_->addEntry(ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS, @@ -825,9 +830,9 @@ const CameraMetadata *CameraDevice::captureTemplatePreview() { /* * \todo Keep this in sync with the actual number of entries. - * Currently: 12 entries, 15 bytes + * Currently: 20 entries, 35 bytes */ - CameraMetadata *requestTemplate = new CameraMetadata(15, 20); + CameraMetadata *requestTemplate = new CameraMetadata(20, 35); if (!requestTemplate->isValid()) return nullptr; @@ -847,6 +852,17 @@ const CameraMetadata *CameraDevice::captureTemplatePreview() requestTemplate->addEntry(ANDROID_CONTROL_AE_LOCK, &aeLock, 1); + std::vector aeFpsTarget = { + 15, 30, + }; + requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, + aeFpsTarget.data(), + aeFpsTarget.size()); + + uint8_t aeAntibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO; + requestTemplate->addEntry(ANDROID_CONTROL_AE_ANTIBANDING_MODE, + &aeAntibandingMode, 1); + uint8_t afTrigger = ANDROID_CONTROL_AF_TRIGGER_IDLE; requestTemplate->addEntry(ANDROID_CONTROL_AF_TRIGGER, &afTrigger, 1); @@ -875,6 +891,16 @@ const CameraMetadata *CameraDevice::captureTemplatePreview() requestTemplate->addEntry(ANDROID_COLOR_CORRECTION_ABERRATION_MODE, &aberrationMode, 1); + uint8_t controlMode = ANDROID_CONTROL_MODE_AUTO; + requestTemplate->addEntry(ANDROID_CONTROL_MODE, &controlMode, 1); + + float lensAperture = 2.53 / 100; + requestTemplate->addEntry(ANDROID_LENS_APERTURE, &lensAperture, 1); + + uint8_t opticalStabilization = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF; + requestTemplate->addEntry(ANDROID_LENS_OPTICAL_STABILIZATION_MODE, + &opticalStabilization, 1); + uint8_t captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW; requestTemplate->addEntry(ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1);