From patchwork Thu Jan 14 10:40:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 10858 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 E59B8BD808 for ; Thu, 14 Jan 2021 10:40:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id AEAAC680ED; Thu, 14 Jan 2021 11:40:52 +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="nphq3Txh"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 382A9680DF for ; Thu, 14 Jan 2021 11:40:51 +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 94DF08D7; Thu, 14 Jan 2021 11:40:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1610620850; bh=O3ZevUqiO+qWSjpkBzvMsXGCq+YhyK2zeRIne6/fq3g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nphq3TxhzNqjYE4LHV0qDN8X3w8IDcxSGNnWQCHss/GDKcNSkoQYShsuW1g+RcG+Z A6boARpfp7DxVfkJEtBnKUGOAB6W99qYhDraYIueK86qNg+8ZiD7FmIitmVp9nb2ZW VzKwY71iptm3dAPE/cRkHPBMXwqFyvVGxkFEaUao= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Thu, 14 Jan 2021 19:40:31 +0900 Message-Id: <20210114104035.302968-3-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210114104035.302968-1-paul.elder@ideasonboard.com> References: <20210114104035.302968-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/6] android: CameraMetadata: Add copy constructor and getEntry 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 copy constructor to CameraMetadata, as well as a constructor from camera_metadata_t. Also add a function getEntry to allow getting metadata entries from CameraMetadata. This allows us to use CameraMetadata for reading form camera_metadata_t. Signed-off-by: Paul Elder --- src/android/camera_metadata.cpp | 23 +++++++++++++++++++++++ src/android/camera_metadata.h | 3 +++ 2 files changed, 26 insertions(+) diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp index edea48fe..57ac6009 100644 --- a/src/android/camera_metadata.cpp +++ b/src/android/camera_metadata.cpp @@ -19,12 +19,35 @@ CameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity) valid_ = metadata_ != nullptr; } +CameraMetadata::CameraMetadata(const camera_metadata_t *metadata) +{ + metadata_ = clone_camera_metadata(metadata); + valid_ = metadata_ != nullptr; +} + +CameraMetadata::CameraMetadata(const CameraMetadata &other) +{ + metadata_ = clone_camera_metadata(other.get()); + valid_ = metadata_ != nullptr; +} + CameraMetadata::~CameraMetadata() { if (metadata_) free_camera_metadata(metadata_); } +int CameraMetadata::getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const +{ + if (!entry) + return -EINVAL; + + if (find_camera_metadata_ro_entry(metadata_, tag, entry)) + return -EINVAL; + + return 0; +} + bool CameraMetadata::addEntry(uint32_t tag, const void *data, size_t count) { if (!valid_) diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h index 9d047b1b..fa1c4983 100644 --- a/src/android/camera_metadata.h +++ b/src/android/camera_metadata.h @@ -15,9 +15,12 @@ class CameraMetadata { public: CameraMetadata(size_t entryCapacity, size_t dataCapacity); + CameraMetadata(const camera_metadata_t *metadata); + CameraMetadata(const CameraMetadata &other); ~CameraMetadata(); bool isValid() const { return valid_; } + int getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const; bool addEntry(uint32_t tag, const void *data, size_t data_count); bool updateEntry(uint32_t tag, const void *data, size_t data_count);