From patchwork Thu Jun 24 10:50:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 12698 X-Patchwork-Delegate: paul.elder@ideasonboard.com 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 DD0AFC321C for ; Thu, 24 Jun 2021 10:51:09 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C449A68937; Thu, 24 Jun 2021 12:51:08 +0200 (CEST) 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="eJDpZmu7"; 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 74FB36050B for ; Thu, 24 Jun 2021 12:51:07 +0200 (CEST) Received: from pyrite.rasen.tech (unknown [IPv6:2400:4051:61:600:2c71:1b79:d06d:5032]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 69CB32C51; Thu, 24 Jun 2021 12:51:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1624531866; bh=vKjntS2wrnhYN9pjrJQJW38winROU1gCwEmPf4H5Po4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eJDpZmu79k/fnqkE2lks4/Jqcz/yaDehvvPH3YBU/U1PDlQ0gLEh5Zieox0n6NCJW KQbbbmpqIopl/OGd/+ylMoCkSn5FAQLN0NfUIIwbv+/dWHGB1N/SaQlDYjDEiciLH0 2OMJVmfbe8+y+Kb2Z3xyacPCYti1adBUMKlmlD9w= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Thu, 24 Jun 2021 19:50:52 +0900 Message-Id: <20210624105054.51700-2-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210624105054.51700-1-paul.elder@ideasonboard.com> References: <20210624105054.51700-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [RFC PATCH v2 1/3] android: Add helpers for setting android metadata from libcamera controls 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 helpers for setting android metadata from libcamera controls. There are two versions, for scalars and collections, both of which take a default value to fill in the android control if the libcamera control is not found. A version for scalars exists for no default, to not set the android control at all if it is not found in libcamera. The last one requires the type to be specified, but the other two do not. The versions that take a default value return the value that was set in the android metadata. Signed-off-by: Paul Elder --- New in v2 TODO: make ControlList versions so that we can use them in result metadata --- src/android/camera_capabilities.cpp | 81 +++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index 00224a6d..7d795bf5 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -113,6 +113,87 @@ const std::map camera3FormatsMap = { }, }; +enum ControlRange { + Min, + Def, + Max, +}; + +template> * = nullptr> +void setMetadata(CameraMetadata *metadata, uint32_t tag, + const ControlInfoMap &controlsInfo, const ControlId *control, + enum ControlRange controlRange) +{ + const auto &info = controlsInfo.find(control); + if (info == controlsInfo.end()) + return; + + T ret; + switch (controlRange) { + case Min: + ret = info->second.min().get(); + break; + case Def: + ret = info->second.def().get(); + break; + case Max: + ret = info->second.max().get(); + break; + } + + metadata->addEntry(tag, ret); + return; +} + +template> * = nullptr> +T setMetadata(CameraMetadata *metadata, uint32_t tag, + const ControlInfoMap &controlsInfo, const ControlId *control, + const T defaultValue, enum ControlRange controlRange) +{ + T ret = defaultValue; + + const auto &info = controlsInfo.find(control); + if (info != controlsInfo.end()) { + switch (controlRange) { + case Min: + ret = info->second.min().get(); + break; + case Def: + ret = info->second.def().get(); + break; + case Max: + ret = info->second.max().get(); + break; + } + } + + metadata->addEntry(tag, ret); + return ret; +} + +template +S setMetadata(CameraMetadata *metadata, uint32_t tag, + const ControlInfoMap &controlsInfo, const ControlId *control, + const S &defaultVector) +{ + S ret = {}; + + const auto &info = controlsInfo.find(control); + if (info != controlsInfo.end()) { + ret.reserve(info->second.values().size()); + for (const auto &value : info->second.values()) + ret.push_back(value.get()); + } else { + ret = defaultVector; + } + + metadata->addEntry(tag, ret); + return ret; +} + } /* namespace */ int CameraCapabilities::initialize(std::shared_ptr camera, From patchwork Thu Jun 24 10:50:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 12699 X-Patchwork-Delegate: paul.elder@ideasonboard.com 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 5D1ADC321A for ; Thu, 24 Jun 2021 10:51:13 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 1EE6A68EA1; Thu, 24 Jun 2021 12:51:13 +0200 (CEST) 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="OXlA0uie"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7E12D6893C for ; Thu, 24 Jun 2021 12:51:09 +0200 (CEST) Received: from pyrite.rasen.tech (unknown [IPv6:2400:4051:61:600:2c71:1b79:d06d:5032]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DB0822C51; Thu, 24 Jun 2021 12:51:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1624531869; bh=7QYSs0V7onZo95wqhgLWnac4UNvDgbW9n5kMigWUo1c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OXlA0uie3rzyYc3kW0uZQ7pXA38jaCv8XE+tnfBR8JerL3wRlQ6/P+atOL7Nagj3Q hPFWfKQ+qKbBfnQzX8G2aoSsMLwba9hhqe7JnfNnXu/vIQ1aez2vMh278zt0BngmF2 7ArScMlDOCUzuQijV4E6SiH6N6FmZByZSJdN4xHE= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Thu, 24 Jun 2021 19:50:53 +0900 Message-Id: <20210624105054.51700-3-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210624105054.51700-1-paul.elder@ideasonboard.com> References: <20210624105054.51700-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [RFC PATCH v2 2/3] android: Plumb AwbMode control 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" Plumb the AwbMode control into the HAL for CONTROL_AWB_AVAILABLE_MODES for static metadata. Bug: https://bugs.libcamera.org/show_bug.cgi?id=44 Signed-off-by: Paul Elder --- Changes in v2: - use new setMetadata - rebase on camera capabilities refactor TODO: plumb result metadata --- src/android/camera_capabilities.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index 7d795bf5..212d61d9 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -573,15 +573,16 @@ int CameraCapabilities::initializeStaticMetadata() staticMetadata_->addEntry(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, availableStabilizationModes); - /* - * \todo Inspect the camera capabilities to report the available - * AWB modes. Default to AUTO as CTS tests require it. - */ - std::vector availableAwbModes = { - ANDROID_CONTROL_AWB_MODE_AUTO, - }; - staticMetadata_->addEntry(ANDROID_CONTROL_AWB_AVAILABLE_MODES, - availableAwbModes); + std::vector awbModes = + setMetadata(staticMetadata_.get(), ANDROID_CONTROL_AWB_AVAILABLE_MODES, + controlsInfo, &controls::AwbMode, + std::vector({ ANDROID_CONTROL_AWB_MODE_AUTO })); + if (std::find(awbModes.begin(), awbModes.end(), + ANDROID_CONTROL_AWB_MODE_OFF) == awbModes.end()) { + fullSupport = false; + /* \todo Double check if this is the correct capability */ + capabilities[ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING] = false; + } std::vector availableMaxRegions = { 0, 0, 0, From patchwork Thu Jun 24 10:50:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 12700 X-Patchwork-Delegate: paul.elder@ideasonboard.com 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 B77DFC321C for ; Thu, 24 Jun 2021 10:51:13 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 7815B68EA4; Thu, 24 Jun 2021 12:51:13 +0200 (CEST) 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="NV+SBRaV"; 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 4BC8968936 for ; Thu, 24 Jun 2021 12:51:11 +0200 (CEST) Received: from pyrite.rasen.tech (unknown [IPv6:2400:4051:61:600:2c71:1b79:d06d:5032]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E538B2C51; Thu, 24 Jun 2021 12:51:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1624531871; bh=PQvVp+NzeQqrwNKqYJIbiU1nHFPvRx5gmj0ipim3fxQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NV+SBRaVskdFsZNOxwSCeU9ahSPt9/4Dy7/P6xAjFxwZQWvQRBz62wvhJKLYRh+NP 6A0+tnGiVCmgxY/VUpa2nWvW+BqwZkFn1tPkEqIpgGpxIMkjP1gA4awle1Zw+J59zN x4/0Ge5kevCQbuMb8oicV9y/yh+KTTlqIgAYn9aY= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Thu, 24 Jun 2021 19:50:54 +0900 Message-Id: <20210624105054.51700-4-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210624105054.51700-1-paul.elder@ideasonboard.com> References: <20210624105054.51700-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [RFC PATCH v2 3/3] android: Plumb AwbLock control 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" Plumb the AwbLock control into the HAL for CONTROL_AWB_LOCK_AVAILABLE_MODES for static metadata. Bug: https://bugs.libcamera.org/show_bug.cgi?id=45 Signed-off-by: Paul Elder --- Changes in v2: - use new setMetadata - rebase on camera capabilities refactor TODO: plumb result metadata --- src/android/camera_capabilities.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index 212d61d9..164006f2 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -602,9 +602,14 @@ int CameraCapabilities::initializeStaticMetadata() staticMetadata_->addEntry(ANDROID_CONTROL_AE_LOCK_AVAILABLE, aeLockAvailable); - uint8_t awbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE; - staticMetadata_->addEntry(ANDROID_CONTROL_AWB_LOCK_AVAILABLE, - awbLockAvailable); + uint8_t awbLockAvailable = + setMetadata(staticMetadata_.get(), ANDROID_CONTROL_AWB_LOCK_AVAILABLE, + controlsInfo, &controls::AwbLock, + (uint8_t)ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE, Max); + if (!awbLockAvailable) { + capabilities[ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE] = false; + capabilities[ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING] = false; + } char availableControlModes = ANDROID_CONTROL_MODE_AUTO; staticMetadata_->addEntry(ANDROID_CONTROL_AVAILABLE_MODES,