From patchwork Thu Jan 21 16:52:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 10929 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 E05EABD808 for ; Thu, 21 Jan 2021 16:52:58 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 42FA06820B; Thu, 21 Jan 2021 17:52:57 +0100 (CET) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6880768201 for ; Thu, 21 Jan 2021 17:52:56 +0100 (CET) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 0B15A1C0003; Thu, 21 Jan 2021 16:52:55 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org, Paul Elder Date: Thu, 21 Jan 2021 17:52:59 +0100 Message-Id: <20210121165305.367801-2-jacopo@jmondi.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210121165305.367801-1-jacopo@jmondi.org> References: <20210121165305.367801-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 1/7] android: camera_metadata: 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" From: Paul Elder Add a copy constructor and assignment operator to CameraMetadata, as well 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 from camera_metadata_t. Reviewed-by: Jacopo Mondi Signed-off-by: Paul Elder Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Reviewed-by: Paul Elder --- src/android/camera_metadata.cpp | 33 +++++++++++++++++++++++++++++++++ src/android/camera_metadata.h | 5 +++++ 2 files changed, 38 insertions(+) diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp index edea48fe5581..8e36e758d231 100644 --- a/src/android/camera_metadata.cpp +++ b/src/android/camera_metadata.cpp @@ -19,12 +19,45 @@ 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) + : CameraMetadata(other.get()) +{ +} + CameraMetadata::~CameraMetadata() { if (metadata_) free_camera_metadata(metadata_); } +CameraMetadata &CameraMetadata::operator=(const CameraMetadata &other) +{ + if (this == &other) + return *this; + + if (metadata_) + free_camera_metadata(metadata_); + + metadata_ = clone_camera_metadata(other.get()); + valid_ = metadata_ != nullptr; + + return *this; +} + +bool CameraMetadata::getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const +{ + if (find_camera_metadata_ro_entry(metadata_, tag, entry)) + return false; + + return true; +} + 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 9d047b1bb534..720b760d44da 100644 --- a/src/android/camera_metadata.h +++ b/src/android/camera_metadata.h @@ -15,9 +15,14 @@ class CameraMetadata { public: CameraMetadata(size_t entryCapacity, size_t dataCapacity); + CameraMetadata(const camera_metadata_t *metadata); + CameraMetadata(const CameraMetadata &other); ~CameraMetadata(); + CameraMetadata &operator=(const CameraMetadata &other); + bool isValid() const { return valid_; } + bool 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); From patchwork Thu Jan 21 16:53:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 10930 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 D109ABD808 for ; Thu, 21 Jan 2021 16:52:59 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6505268212; Thu, 21 Jan 2021 17:52:59 +0100 (CET) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id F153668203 for ; Thu, 21 Jan 2021 17:52:56 +0100 (CET) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 8ED501C0003; Thu, 21 Jan 2021 16:52:56 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org, Paul Elder Date: Thu, 21 Jan 2021 17:53:00 +0100 Message-Id: <20210121165305.367801-3-jacopo@jmondi.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210121165305.367801-1-jacopo@jmondi.org> References: <20210121165305.367801-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/7] android: camera_device: Pass camera3 request to descriptor 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" The Camera3RequestDescriptor class can access the number of buffers and the frame number from the camera3_capture_request_t instead of having the caller passing them to the constructor. This change allows to access other fields of the capture request, such as the capture settings. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Reviewed-by: Paul Elder --- src/android/camera_device.cpp | 13 +++++++------ src/android/camera_device.h | 3 +-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 7c70a0b314e6..f10b572749eb 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -295,16 +295,18 @@ MappedCamera3Buffer::MappedCamera3Buffer(const buffer_handle_t camera3buffer, */ CameraDevice::Camera3RequestDescriptor::Camera3RequestDescriptor( - Camera *camera, unsigned int frameNumber, unsigned int numBuffers) - : frameNumber_(frameNumber), numBuffers_(numBuffers) + Camera *camera, const camera3_capture_request_t *camera3Request) { - buffers_ = new camera3_stream_buffer_t[numBuffers]; + frameNumber_ = camera3Request->frame_number; + + numBuffers_ = camera3Request->num_output_buffers; + buffers_ = new camera3_stream_buffer_t[numBuffers_]; /* * FrameBuffer instances created by wrapping a camera3 provided dmabuf * are emplaced in this vector of unique_ptr<> for lifetime management. */ - frameBuffers_.reserve(numBuffers); + frameBuffers_.reserve(numBuffers_); /* * Create the libcamera::Request unique_ptr<> to tie its lifetime @@ -1683,8 +1685,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques * at request complete time. */ Camera3RequestDescriptor *descriptor = - new Camera3RequestDescriptor(camera_.get(), camera3Request->frame_number, - camera3Request->num_output_buffers); + new Camera3RequestDescriptor(camera_.get(), camera3Request); LOG(HAL, Debug) << "Queueing Request to libcamera with " << descriptor->numBuffers_ << " HAL streams"; diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 912e54a60d4b..ab3c848edd0a 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -75,8 +75,7 @@ private: struct Camera3RequestDescriptor { Camera3RequestDescriptor(libcamera::Camera *camera, - unsigned int frameNumber, - unsigned int numBuffers); + const camera3_capture_request_t *camera3Request); ~Camera3RequestDescriptor(); uint32_t frameNumber_; From patchwork Thu Jan 21 16:53:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 10931 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 1CC0DBD808 for ; Thu, 21 Jan 2021 16:53:01 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E5E1C68216; Thu, 21 Jan 2021 17:53:00 +0100 (CET) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 81AA468206 for ; Thu, 21 Jan 2021 17:52:57 +0100 (CET) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 225241C0012; Thu, 21 Jan 2021 16:52:56 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org, Paul Elder Date: Thu, 21 Jan 2021 17:53:01 +0100 Message-Id: <20210121165305.367801-4-jacopo@jmondi.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210121165305.367801-1-jacopo@jmondi.org> References: <20210121165305.367801-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 3/7] android: camera_device: Copy camera3 buffers in descriptor 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" The camera3_stream_buffer_t instances part of a capture request contain information on the stream for which capture has been requested (size, format and fences) and an handle to the stream's memory buffers. Those information are copied in the descriptor one at the time while processing the camera3 streams to be re-used at request completion time. Simplyify the code by copying the stream information in the descriptor at construction time. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index f10b572749eb..578fb2271a9e 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -299,8 +299,11 @@ CameraDevice::Camera3RequestDescriptor::Camera3RequestDescriptor( { frameNumber_ = camera3Request->frame_number; + /* Copy the camera3 request stream information for later access. */ numBuffers_ = camera3Request->num_output_buffers; buffers_ = new camera3_stream_buffer_t[numBuffers_]; + for (unsigned int i = 0; i < numBuffers_; ++i) + buffers_[i] = camera3Request->output_buffers[i]; /* * FrameBuffer instances created by wrapping a camera3 provided dmabuf @@ -1672,13 +1675,6 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques running_ = true; } - /* - * Queue a request for the Camera with the provided dmabuf file - * descriptors. - */ - const camera3_stream_buffer_t *camera3Buffers = - camera3Request->output_buffers; - /* * Save the request descriptors for use at completion time. * The descriptor and the associated memory reserved here are freed @@ -1690,16 +1686,9 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques LOG(HAL, Debug) << "Queueing Request to libcamera with " << descriptor->numBuffers_ << " HAL streams"; for (unsigned int i = 0; i < descriptor->numBuffers_; ++i) { - camera3_stream *camera3Stream = camera3Buffers[i].stream; - CameraStream *cameraStream = - static_cast(camera3Buffers[i].stream->priv); - - /* - * Keep track of which stream the request belongs to and store - * the native buffer handles. - */ - descriptor->buffers_[i].stream = camera3Buffers[i].stream; - descriptor->buffers_[i].buffer = camera3Buffers[i].buffer; + const camera3_stream_buffer_t *camera3Buffer = &descriptor->buffers_[i]; + camera3_stream *camera3Stream = camera3Buffer->stream; + CameraStream *cameraStream = static_cast(camera3Stream->priv); std::stringstream ss; ss << i << " - (" << camera3Stream->width << "x" @@ -1729,7 +1718,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques * associate it with the Camera3RequestDescriptor for * lifetime management only. */ - buffer = createFrameBuffer(*camera3Buffers[i].buffer); + buffer = createFrameBuffer(*camera3Buffer->buffer); descriptor->frameBuffers_.emplace_back(buffer); LOG(HAL, Debug) << ss.str() << " (direct)"; break; @@ -1754,7 +1743,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques } descriptor->request_->addBuffer(cameraStream->stream(), buffer, - camera3Buffers[i].acquire_fence); + camera3Buffer->acquire_fence); } /* From patchwork Thu Jan 21 16:53:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 10932 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 63538BD808 for ; Thu, 21 Jan 2021 16:53:03 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 3F0B96821A; Thu, 21 Jan 2021 17:53:03 +0100 (CET) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1068E6820F for ; Thu, 21 Jan 2021 17:52:58 +0100 (CET) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id A69E61C0004; Thu, 21 Jan 2021 16:52:57 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org, Paul Elder Date: Thu, 21 Jan 2021 17:53:02 +0100 Message-Id: <20210121165305.367801-5-jacopo@jmondi.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210121165305.367801-1-jacopo@jmondi.org> References: <20210121165305.367801-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 4/7] android: camera_metadata: Add defaul constructor 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 default constructor that initializes a non valid CameraMetadata to allow embedding instances of the class in other types. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Reviewed-by: Paul Elder --- src/android/camera_metadata.cpp | 5 +++++ src/android/camera_metadata.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp index 8e36e758d231..6f1bcdbe274a 100644 --- a/src/android/camera_metadata.cpp +++ b/src/android/camera_metadata.cpp @@ -13,6 +13,11 @@ using namespace libcamera; LOG_DEFINE_CATEGORY(CameraMetadata) +CameraMetadata::CameraMetadata() + : metadata_(nullptr), valid_(false) +{ +} + CameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity) { metadata_ = allocate_camera_metadata(entryCapacity, dataCapacity); diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h index 720b760d44da..d653e2f0f502 100644 --- a/src/android/camera_metadata.h +++ b/src/android/camera_metadata.h @@ -14,6 +14,7 @@ class CameraMetadata { public: + CameraMetadata(); CameraMetadata(size_t entryCapacity, size_t dataCapacity); CameraMetadata(const camera_metadata_t *metadata); CameraMetadata(const CameraMetadata &other); From patchwork Thu Jan 21 16:53:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 10933 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 C2EFCC0F2B for ; Thu, 21 Jan 2021 16:53:03 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 831AF6821E; Thu, 21 Jan 2021 17:53:03 +0100 (CET) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9FFBF68202 for ; Thu, 21 Jan 2021 17:52:58 +0100 (CET) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 317B21C0012; Thu, 21 Jan 2021 16:52:58 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org, Paul Elder Date: Thu, 21 Jan 2021 17:53:03 +0100 Message-Id: <20210121165305.367801-6-jacopo@jmondi.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210121165305.367801-1-jacopo@jmondi.org> References: <20210121165305.367801-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 5/7] android: camera_device: Clone settings in request descriptor 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" When a Camera3RequestDescriptor instance is created to wrap a camera3_capture_request_t the settings associated with the request are cloned for later re-use. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Reviewed-by: Paul Elder --- src/android/camera_device.cpp | 4 +++- src/android/camera_device.h | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 578fb2271a9e..9733c84612bd 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -22,7 +22,6 @@ #include "libcamera/internal/log.h" #include "libcamera/internal/utils.h" -#include "camera_metadata.h" #include "system/graphics.h" using namespace libcamera; @@ -311,6 +310,9 @@ CameraDevice::Camera3RequestDescriptor::Camera3RequestDescriptor( */ frameBuffers_.reserve(numBuffers_); + /* Clone the controls associated with the camera3 request. */ + settings_ = CameraMetadata(camera3Request->settings); + /* * Create the libcamera::Request unique_ptr<> to tie its lifetime * to the descriptor's one. Set the descriptor's address as the diff --git a/src/android/camera_device.h b/src/android/camera_device.h index ab3c848edd0a..bad3be8e8066 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -24,12 +24,11 @@ #include "libcamera/internal/log.h" #include "libcamera/internal/message.h" +#include "camera_metadata.h" #include "camera_stream.h" #include "camera_worker.h" #include "jpeg/encoder.h" -class CameraMetadata; - class MappedCamera3Buffer : public libcamera::MappedBuffer { public: @@ -82,6 +81,7 @@ private: uint32_t numBuffers_; camera3_stream_buffer_t *buffers_; std::vector> frameBuffers_; + CameraMetadata settings_; std::unique_ptr request_; }; From patchwork Thu Jan 21 16:53:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 10934 X-Patchwork-Delegate: jacopo@jmondi.org 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 49318BD808 for ; Thu, 21 Jan 2021 16:53:04 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 08E8968204; Thu, 21 Jan 2021 17:53:04 +0100 (CET) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 4031568210 for ; Thu, 21 Jan 2021 17:52:59 +0100 (CET) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id D1B891C0012; Thu, 21 Jan 2021 16:52:58 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org, Paul Elder Date: Thu, 21 Jan 2021 17:53:04 +0100 Message-Id: <20210121165305.367801-7-jacopo@jmondi.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210121165305.367801-1-jacopo@jmondi.org> References: <20210121165305.367801-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 6/7] android: camera_device: Use CameraMetadata in processControls() 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" Use the CameraMetadata API to retrieve the values of the request associated settings in CameraDevice::processControls() function. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Reviewed-by: Paul Elder --- src/android/camera_device.cpp | 15 ++++++--------- src/android/camera_device.h | 3 +-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 9733c84612bd..d185fdf7fb2f 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1623,10 +1623,10 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer return new FrameBuffer(std::move(planes)); } -int CameraDevice::processControls(const camera3_capture_request_t *camera3Request, - Camera3RequestDescriptor *descriptor) +int CameraDevice::processControls(Camera3RequestDescriptor *descriptor) { - if (!camera3Request->settings) + const CameraMetadata &settings = descriptor->settings_; + if (!settings.isValid()) return 0; /* @@ -1635,12 +1635,9 @@ int CameraDevice::processControls(const camera3_capture_request_t *camera3Reques * \todo As soon as more controls are handled, this part should be * broken out to a dedicated function. */ - const camera_metadata_t *camera3Settings = camera3Request->settings; camera_metadata_ro_entry_t entry; - int ret = find_camera_metadata_ro_entry(camera3Settings, - ANDROID_SCALER_CROP_REGION, - &entry); - if (!ret) { + bool found = settings.getEntry(ANDROID_SCALER_CROP_REGION, &entry); + if (found) { const int32_t *data = entry.data.i32; Rectangle cropRegion{ data[0], data[1], static_cast(data[2]), @@ -1752,7 +1749,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques * Translate controls from Android to libcamera and queue the request * to the CameraWorker thread. */ - int ret = processControls(camera3Request, descriptor); + int ret = processControls(descriptor); if (ret) return ret; diff --git a/src/android/camera_device.h b/src/android/camera_device.h index bad3be8e8066..597d11fcda2e 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -104,8 +104,7 @@ private: void notifyError(uint32_t frameNumber, camera3_stream_t *stream); CameraMetadata *requestTemplatePreview(); libcamera::PixelFormat toPixelFormat(int format) const; - int processControls(const camera3_capture_request_t *camera3Request, - Camera3RequestDescriptor *descriptor); + int processControls(Camera3RequestDescriptor *descriptor); std::unique_ptr getResultMetadata( Camera3RequestDescriptor *descriptor, int64_t timestamp); From patchwork Thu Jan 21 16:53:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 10935 X-Patchwork-Delegate: jacopo@jmondi.org 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 B2ADCBD808 for ; Thu, 21 Jan 2021 16:53:04 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 774B668211; Thu, 21 Jan 2021 17:53:04 +0100 (CET) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id CC11868215 for ; Thu, 21 Jan 2021 17:52:59 +0100 (CET) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 645D61C0015; Thu, 21 Jan 2021 16:52:59 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org, Paul Elder Date: Thu, 21 Jan 2021 17:53:05 +0100 Message-Id: <20210121165305.367801-8-jacopo@jmondi.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210121165305.367801-1-jacopo@jmondi.org> References: <20210121165305.367801-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 7/7] android: camera_metadata: Remove outdated comment 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" The comment was moot, as the translation of Android's settings to libcamera controls is already implemented in a dedicated function. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Reviewed-by: Paul Elder --- src/android/camera_device.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index d185fdf7fb2f..f9af038412b1 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1629,12 +1629,7 @@ int CameraDevice::processControls(Camera3RequestDescriptor *descriptor) if (!settings.isValid()) return 0; - /* - * Translate the Android controls to libcamera. - * - * \todo As soon as more controls are handled, this part should be - * broken out to a dedicated function. - */ + /* Translate the Android request settings to libcamera controls. */ camera_metadata_ro_entry_t entry; bool found = settings.getEntry(ANDROID_SCALER_CROP_REGION, &entry); if (found) {