From patchwork Thu Nov 18 09:48:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 14622 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 37AD9BF415 for ; Thu, 18 Nov 2021 09:48:56 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E01ED6033C; Thu, 18 Nov 2021 10:48:55 +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="tOom0ckt"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id EFD6260230 for ; Thu, 18 Nov 2021 10:48:54 +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 02CFF3E5; Thu, 18 Nov 2021 10:48:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1637228934; bh=Q8m9QKp7h8z3kU5K1p8+fiGfiene5tHcdWlV5XgD9gQ=; h=From:To:Cc:Subject:Date:From; b=tOom0cktdqIpDPFLT9FeNFoSBBjetqfbYzOnR44KKTEgE4VVrKX4N27Kt8L5hqFvK EurvwiIkah8vWmz7yuFrEBAw/2Qe0RRWGXpS2hkbQRam339CCXyzS6XAygXtMkjBKv mQZjyXZBHy3vQ53G6MaZi4xOWM1yHTGvyYOwRemg= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Thu, 18 Nov 2021 18:48:23 +0900 Message-Id: <20211118094823.344496-1-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2] android: Check exposure time range for manual sensor capability 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" In the manual sensor capability validator, add a check for the exposure time range. While at it, since the minimum exposure time is not limited to the manual sensor capability, add a check for it when initializing static metadata. Signed-off-by: Paul Elder Reviewed-by: Laurent Pinchart Reviewed-by: Jean-Michel Hautbois Reviewed-by: Kieran Bingham --- Changes in v2: - fix comparator order (cosmetic) - change comparators and comments to "equal or", as that is what is specificied in the hal docs - add check for minimum exposure time when initializing static metadata - this only prints error, should we return -EINVAL instead? --- src/android/camera_capabilities.cpp | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index f357902e..6e46f163 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -217,6 +217,8 @@ std::vector setMetadata(CameraMetadata *metadata, uint32_t tag, bool CameraCapabilities::validateManualSensorCapability() { + camera_metadata_ro_entry_t entry; + const char *noMode = "Manual sensor capability unavailable: "; if (!staticMetadata_->entryContains(ANDROID_CONTROL_AE_AVAILABLE_MODES, @@ -231,6 +233,26 @@ bool CameraCapabilities::validateManualSensorCapability() return false; } + if (!staticMetadata_->hasEntry(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE)) { + LOG(HAL, Info) << noMode << "missing exposure time range"; + return false; + } + + staticMetadata_->getEntry(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, &entry); + if (entry.data.i32[0] >= 100000) { + LOG(HAL, Info) + << noMode + << "exposure time range minimum must not be equal nor larger than 100us"; + return false; + } + + if (entry.data.i32[1] <= 100000000) { + LOG(HAL, Info) + << noMode + << "exposure time range maximum must not be equal nor smaller than 100ms"; + return false; + } + /* * \todo Return true here after we satisfy all the requirements: * https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR @@ -1074,6 +1096,14 @@ int CameraCapabilities::initializeStaticMetadata() exposureInfo->second.min().get() * 1000LL, exposureInfo->second.max().get() * 1000LL, }; + + if (exposureTimeRange[0] >= 100000) { + LOG(HAL, Error) + << "Minimum exposure time " + << exposureTimeRange[0] + << "ns is too big (should be smaller than 100us)"; + } + staticMetadata_->addEntry(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, exposureTimeRange, 2); }