From patchwork Fri May 14 09:27:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 12292 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 969D1C31F6 for ; Fri, 14 May 2021 09:28:02 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C39E568920; Fri, 14 May 2021 11:28:01 +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="IKOVf57m"; 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 27B1968911 for ; Fri, 14 May 2021 11:28:01 +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 338101051; Fri, 14 May 2021 11:27:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1620984480; bh=4etSeZv584BipLarYyXlvYzFVk+coXSUH6Y/AzpBp5k=; h=From:To:Cc:Subject:Date:From; b=IKOVf57mrv9WuLXXeQj85WSpKyy3x18csycJoFKp8fzyamm7kwdSybLfhhNTBCvJM i5T/uHGkr1pAWekIeCjm1OGuPcDd9F59B8n9HFcoFNYiNVPrzZD2J3dSJ0Sam/QSWX /wbhSDyTGiZEPB2yhEP9us5GuoknpaPWLRvHqZg8= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Fri, 14 May 2021 18:27:45 +0900 Message-Id: <20210514092745.814353-1-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH] android: camera_metadata: Add functions for instrumenting resizing 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 utility functions to CameraMetadata to check if it has been resized, and for outputting the actual entry and data count. This is meant to be used to output information on resizing, to assist developers in choosing proper initial sizes to avoid resizing. Also make CameraDevice use these functions for static and result metadata. Signed-off-by: Paul Elder Reviewed-by: Kieran Bingham Reviewed-by: Hirokazu Honda --- src/android/camera_device.cpp | 16 ++++++++++++++++ src/android/camera_metadata.cpp | 14 +++++++++++++- src/android/camera_metadata.h | 4 ++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index b32e8be5..15f81b04 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1391,6 +1391,14 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() return nullptr; } + if (staticMetadata_->resized()) { + size_t entryCount, dataCount; + std::tie(entryCount, dataCount) = staticMetadata_->usage(); + LOG(HAL, Info) + << "Static metadata resized: " << entryCount + << " entries and " << dataCount << " bytes used"; + } + return staticMetadata_->get(); } @@ -2269,5 +2277,13 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons LOG(HAL, Error) << "Failed to construct result metadata"; } + if (resultMetadata->resized()) { + size_t entryCount, dataCount; + std::tie(entryCount, dataCount) = resultMetadata->usage(); + LOG(HAL, Info) + << "Result metadata resized: " << entryCount + << " entries and " << dataCount << " bytes used"; + } + return resultMetadata; } diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp index bf8d2781..0588ea4e 100644 --- a/src/android/camera_metadata.cpp +++ b/src/android/camera_metadata.cpp @@ -14,17 +14,19 @@ using namespace libcamera; LOG_DEFINE_CATEGORY(CameraMetadata) CameraMetadata::CameraMetadata() - : metadata_(nullptr), valid_(false) + : metadata_(nullptr), valid_(false), resized_(false) { } CameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity) + : resized_(false) { metadata_ = allocate_camera_metadata(entryCapacity, dataCapacity); valid_ = metadata_ != nullptr; } CameraMetadata::CameraMetadata(const camera_metadata_t *metadata) + : resized_(false) { metadata_ = clone_camera_metadata(metadata); valid_ = metadata_ != nullptr; @@ -55,6 +57,14 @@ CameraMetadata &CameraMetadata::operator=(const CameraMetadata &other) return *this; } +std::tuple CameraMetadata::usage() const +{ + size_t currentEntryCount = get_camera_metadata_entry_count(metadata_); + size_t currentDataCount = get_camera_metadata_data_count(metadata_); + + return { currentEntryCount, currentDataCount }; +} + bool CameraMetadata::getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const { if (find_camera_metadata_ro_entry(metadata_, tag, entry)) @@ -104,6 +114,8 @@ bool CameraMetadata::resize(size_t count, size_t size) append_camera_metadata(metadata_, oldMetadata); free_camera_metadata(oldMetadata); + + resized_ = true; } return true; diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h index 07afd4b2..b291fbf9 100644 --- a/src/android/camera_metadata.h +++ b/src/android/camera_metadata.h @@ -23,6 +23,9 @@ public: CameraMetadata &operator=(const CameraMetadata &other); + std::tuple usage() const; + bool resized() const { return resized_; } + bool isValid() const { return valid_; } bool resize(size_t count, size_t size); bool getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const; @@ -81,6 +84,7 @@ public: private: camera_metadata_t *metadata_; bool valid_; + bool resized_; }; #endif /* __ANDROID_CAMERA_METADATA_H__ */