{"id":12292,"url":"https://patchwork.libcamera.org/api/1.1/patches/12292/?format=json","web_url":"https://patchwork.libcamera.org/patch/12292/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210514092745.814353-1-paul.elder@ideasonboard.com>","date":"2021-05-14T09:27:45","name":"[libcamera-devel] android: camera_metadata: Add functions for instrumenting resizing","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"5daf0c5739c082c315704acdd56c246574fc7d71","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/1.1/people/17/?format=json","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"delegate":{"id":17,"url":"https://patchwork.libcamera.org/api/1.1/users/17/?format=json","username":"epaul","first_name":"Paul","last_name":"Elder","email":"paul.elder@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/patch/12292/mbox/","series":[{"id":2030,"url":"https://patchwork.libcamera.org/api/1.1/series/2030/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2030","date":"2021-05-14T09:27:45","name":"[libcamera-devel] android: camera_metadata: Add functions for instrumenting resizing","version":1,"mbox":"https://patchwork.libcamera.org/series/2030/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12292/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12292/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 969D1C31F6\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 14 May 2021 09:28:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C39E568920;\n\tFri, 14 May 2021 11:28:01 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 27B1968911\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 14 May 2021 11:28:01 +0200 (CEST)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 338101051;\n\tFri, 14 May 2021 11:27:58 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"IKOVf57m\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1620984480;\n\tbh=4etSeZv584BipLarYyXlvYzFVk+coXSUH6Y/AzpBp5k=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=IKOVf57mrv9WuLXXeQj85WSpKyy3x18csycJoFKp8fzyamm7kwdSybLfhhNTBCvJM\n\ti5T/uHGkr1pAWekIeCjm1OGuPcDd9F59B8n9HFcoFNYiNVPrzZD2J3dSJ0Sam/QSWX\n\t/wbhSDyTGiZEPB2yhEP9us5GuoknpaPWLRvHqZg8=","From":"Paul Elder <paul.elder@ideasonboard.com>","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\n\tfor instrumenting resizing","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Add utility functions to CameraMetadata to check if it has been resized,\nand for outputting the actual entry and data count. This is meant to be\nused to output information on resizing, to assist developers in\nchoosing proper initial sizes to avoid resizing. Also make CameraDevice\nuse these functions for static and result metadata.\n\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\n---\n src/android/camera_device.cpp   | 16 ++++++++++++++++\n src/android/camera_metadata.cpp | 14 +++++++++++++-\n src/android/camera_metadata.h   |  4 ++++\n 3 files changed, 33 insertions(+), 1 deletion(-)","diff":"diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex b32e8be5..15f81b04 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -1391,6 +1391,14 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n \t\treturn nullptr;\n \t}\n \n+\tif (staticMetadata_->resized()) {\n+\t\tsize_t entryCount, dataCount;\n+\t\tstd::tie(entryCount, dataCount) = staticMetadata_->usage();\n+\t\tLOG(HAL, Info)\n+\t\t\t<< \"Static metadata resized: \" << entryCount\n+\t\t\t<< \" entries and \" << dataCount << \" bytes used\";\n+\t}\n+\n \treturn staticMetadata_->get();\n }\n \n@@ -2269,5 +2277,13 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons\n \t\tLOG(HAL, Error) << \"Failed to construct result metadata\";\n \t}\n \n+\tif (resultMetadata->resized()) {\n+\t\tsize_t entryCount, dataCount;\n+\t\tstd::tie(entryCount, dataCount) = resultMetadata->usage();\n+\t\tLOG(HAL, Info)\n+\t\t\t<< \"Result metadata resized: \" << entryCount\n+\t\t\t<< \" entries and \" << dataCount << \" bytes used\";\n+\t}\n+\n \treturn resultMetadata;\n }\ndiff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp\nindex bf8d2781..0588ea4e 100644\n--- a/src/android/camera_metadata.cpp\n+++ b/src/android/camera_metadata.cpp\n@@ -14,17 +14,19 @@ using namespace libcamera;\n LOG_DEFINE_CATEGORY(CameraMetadata)\n \n CameraMetadata::CameraMetadata()\n-\t: metadata_(nullptr), valid_(false)\n+\t: metadata_(nullptr), valid_(false), resized_(false)\n {\n }\n \n CameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity)\n+\t: resized_(false)\n {\n \tmetadata_ = allocate_camera_metadata(entryCapacity, dataCapacity);\n \tvalid_ = metadata_ != nullptr;\n }\n \n CameraMetadata::CameraMetadata(const camera_metadata_t *metadata)\n+\t: resized_(false)\n {\n \tmetadata_ = clone_camera_metadata(metadata);\n \tvalid_ = metadata_ != nullptr;\n@@ -55,6 +57,14 @@ CameraMetadata &CameraMetadata::operator=(const CameraMetadata &other)\n \treturn *this;\n }\n \n+std::tuple<size_t, size_t> CameraMetadata::usage() const\n+{\n+\tsize_t currentEntryCount = get_camera_metadata_entry_count(metadata_);\n+\tsize_t currentDataCount = get_camera_metadata_data_count(metadata_);\n+\n+\treturn { currentEntryCount, currentDataCount };\n+}\n+\n bool CameraMetadata::getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const\n {\n \tif (find_camera_metadata_ro_entry(metadata_, tag, entry))\n@@ -104,6 +114,8 @@ bool CameraMetadata::resize(size_t count, size_t size)\n \n \t\tappend_camera_metadata(metadata_, oldMetadata);\n \t\tfree_camera_metadata(oldMetadata);\n+\n+\t\tresized_ = true;\n \t}\n \n \treturn true;\ndiff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h\nindex 07afd4b2..b291fbf9 100644\n--- a/src/android/camera_metadata.h\n+++ b/src/android/camera_metadata.h\n@@ -23,6 +23,9 @@ public:\n \n \tCameraMetadata &operator=(const CameraMetadata &other);\n \n+\tstd::tuple<size_t, size_t> usage() const;\n+\tbool resized() const { return resized_; }\n+\n \tbool isValid() const { return valid_; }\n \tbool resize(size_t count, size_t size);\n \tbool getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const;\n@@ -81,6 +84,7 @@ public:\n private:\n \tcamera_metadata_t *metadata_;\n \tbool valid_;\n+\tbool resized_;\n };\n \n #endif /* __ANDROID_CAMERA_METADATA_H__ */\n","prefixes":["libcamera-devel"]}