From patchwork Tue Aug 10 16:11:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 13291 X-Patchwork-Delegate: kieran.bingham@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 0C6E5C3240 for ; Tue, 10 Aug 2021 16:11:41 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 25C296884F; Tue, 10 Aug 2021 18:11:40 +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="fRrccUhT"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6A64E68822 for ; Tue, 10 Aug 2021 18:11:37 +0200 (CEST) Received: from Monstersaurus.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id EEC5D4A3; Tue, 10 Aug 2021 18:11:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1628611897; bh=pzdpimxjBSbOq/vVvZim7cHr4+lv4OH0LEiPERJ4PaQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fRrccUhTu6vSqKr94xKimv7mAT/PPIlYs28/wbjNvAGBf+ixmwCNAgN9V9sv2Xnhf nD5o8AzrFZvw/rSEDG6rkB1BLatHC6EU1oasIt8TclE+a87qZZ2jBuuMUgVg6RyYhS 6WlEbTJXPRo2cKsIeExtba4S+62SwKwXC2roC4Mw= From: Kieran Bingham To: libcamera devel Date: Tue, 10 Aug 2021 17:11:32 +0100 Message-Id: <20210810161134.2243796-2-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210810161134.2243796-1-kieran.bingham@ideasonboard.com> References: <20210810161134.2243796-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 1/3] libcamera: controls: Use a const ControlValidator 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 ControlValidator passed to a ControlList constructor is used, but not modified. Make it const. Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- include/libcamera/controls.h | 6 +++--- src/libcamera/controls.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index de733bd868a6..2c38b23ad443 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -354,8 +354,8 @@ private: public: ControlList(); - ControlList(const ControlIdMap &idmap, ControlValidator *validator = nullptr); - ControlList(const ControlInfoMap &infoMap, ControlValidator *validator = nullptr); + ControlList(const ControlIdMap &idmap, const ControlValidator *validator = nullptr); + ControlList(const ControlInfoMap &infoMap, const ControlValidator *validator = nullptr); using iterator = ControlListMap::iterator; using const_iterator = ControlListMap::const_iterator; @@ -413,7 +413,7 @@ private: const ControlValue *find(unsigned int id) const; ControlValue *find(unsigned int id); - ControlValidator *validator_; + const ControlValidator *validator_; const ControlIdMap *idmap_; const ControlInfoMap *infoMap_; diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp index 64fd5c296226..a5943700ea89 100644 --- a/src/libcamera/controls.cpp +++ b/src/libcamera/controls.cpp @@ -836,7 +836,8 @@ ControlList::ControlList() * controls is provided by controls::controls and can be used as the \a idmap * argument. */ -ControlList::ControlList(const ControlIdMap &idmap, ControlValidator *validator) +ControlList::ControlList(const ControlIdMap &idmap, + const ControlValidator *validator) : validator_(validator), idmap_(&idmap), infoMap_(nullptr) { } @@ -846,7 +847,8 @@ ControlList::ControlList(const ControlIdMap &idmap, ControlValidator *validator) * \param[in] infoMap The ControlInfoMap for the control list target object * \param[in] validator The validator (may be null) */ -ControlList::ControlList(const ControlInfoMap &infoMap, ControlValidator *validator) +ControlList::ControlList(const ControlInfoMap &infoMap, + const ControlValidator *validator) : validator_(validator), idmap_(&infoMap.idmap()), infoMap_(&infoMap) { } From patchwork Tue Aug 10 16:11:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 13292 X-Patchwork-Delegate: kieran.bingham@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 989C0C3241 for ; Tue, 10 Aug 2021 16:11:41 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9A07B68889; Tue, 10 Aug 2021 18:11:40 +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="Q19egqXp"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 865536882A for ; Tue, 10 Aug 2021 18:11:37 +0200 (CEST) Received: from Monstersaurus.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 35E2D51D; Tue, 10 Aug 2021 18:11:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1628611897; bh=GYAGZA65zSTTH4oYxRWQzmpCkpgf3bwVqLP0gekS1iY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q19egqXpDMOJ0XPZuvBDqgePEkMx7dfK7Kv0TwlOmIcGA4QsvXl53fnXU81+38Lhu UOcgi0FQ4fJALcDVMruFP/8NLfxuMTIo/iOs/2cIQ8BMuHOojkJPxQ53Wr0aJUylHb KsxhIirqikAyPnCfBwR8aa4eR9ufKI6jfFqjX8UY= From: Kieran Bingham To: libcamera devel Date: Tue, 10 Aug 2021 17:11:33 +0100 Message-Id: <20210810161134.2243796-3-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210810161134.2243796-1-kieran.bingham@ideasonboard.com> References: <20210810161134.2243796-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/3] libcamera: camera: Create a CameraControlValidator 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" Create a Camera specific CameraControlValidator for the Camera instance. This will allow requests to use a single validor instance without having to construct their own. Signed-off-by: Kieran Bingham --- Laurent: - Is the use of the _o() reference valid here in the initialiser list? include/libcamera/internal/camera.h | 6 ++++++ src/libcamera/camera.cpp | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h index b60ed140356a..f14bafc75e05 100644 --- a/include/libcamera/internal/camera.h +++ b/include/libcamera/internal/camera.h @@ -16,6 +16,8 @@ #include +#include "libcamera/internal/camera_controls.h" + namespace libcamera { class PipelineHandler; @@ -30,6 +32,8 @@ public: const std::set &streams); ~Private(); + const CameraControlValidator &validator() const { return validator_; } + private: enum State { CameraAvailable, @@ -56,6 +60,8 @@ private: bool disconnected_; std::atomic state_; + + CameraControlValidator validator_; }; } /* namespace libcamera */ diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 6281e92057e4..b914bf188d57 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -336,7 +336,7 @@ Camera::Private::Private(PipelineHandler *pipe, const std::string &id, const std::set &streams) : pipe_(pipe->shared_from_this()), id_(id), streams_(streams), - disconnected_(false), state_(CameraAvailable) + disconnected_(false), state_(CameraAvailable), validator_(_o()) { } From patchwork Tue Aug 10 16:11:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 13293 X-Patchwork-Delegate: kieran.bingham@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 BC334C3242 for ; Tue, 10 Aug 2021 16:11:41 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id DF3EF6888C; Tue, 10 Aug 2021 18:11:40 +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="kqYpNDlR"; 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 BE2DE687F0 for ; Tue, 10 Aug 2021 18:11:37 +0200 (CEST) Received: from Monstersaurus.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6E4E43F0; Tue, 10 Aug 2021 18:11:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1628611897; bh=E2al2TTS7/EVKTrISR8n83R4O7/TJ9m2ZkLc/j+JELA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kqYpNDlReDZzpkw/indMPExyF+CJ3g/1P0FuT969e4kPcJyWgJHn7xx0+XixFNKSY uA8xD6Ppog6Pqym3fnpp9A786F8tIY6QqUqpa959Gn3hQgLIbawYqq8oz0VWZFeIha XLa9212mcwePh2NPDpb1bIeGvvzvujbJ1EdhWc5w= From: Kieran Bingham To: libcamera devel Date: Tue, 10 Aug 2021 17:11:34 +0100 Message-Id: <20210810161134.2243796-4-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210810161134.2243796-1-kieran.bingham@ideasonboard.com> References: <20210810161134.2243796-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 3/3] libcamera: request: Use external CameraControlValidator 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" Each Request is currently creating its own CameraControlValidator using the Camera instance at construction. Now that the Camera exposes its own CameraControlValidator on its private interface, use that one on all Requests. Signed-off-by: Kieran Bingham --- include/libcamera/request.h | 1 - src/libcamera/request.cpp | 11 ++++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/include/libcamera/request.h b/include/libcamera/request.h index 2d361c9d97dc..d16904e6b679 100644 --- a/include/libcamera/request.h +++ b/include/libcamera/request.h @@ -71,7 +71,6 @@ private: bool completeBuffer(FrameBuffer *buffer); Camera *camera_; - CameraControlValidator *validator_; ControlList *controls_; ControlList *metadata_; BufferMap bufferMap_; diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp index f95ce4db5eaa..4cb4963ea352 100644 --- a/src/libcamera/request.cpp +++ b/src/libcamera/request.cpp @@ -17,6 +17,7 @@ #include #include +#include "libcamera/internal/camera.h" #include "libcamera/internal/camera_controls.h" #include "libcamera/internal/framebuffer.h" #include "libcamera/internal/tracepoints.h" @@ -77,12 +78,9 @@ Request::Request(Camera *camera, uint64_t cookie) : camera_(camera), sequence_(0), cookie_(cookie), status_(RequestPending), cancelled_(false) { - /** - * \todo Should the Camera expose a validator instance, to avoid - * creating a new instance for each request? - */ - validator_ = new CameraControlValidator(camera); - controls_ = new ControlList(controls::controls, validator_); + const CameraControlValidator &validator = camera->_d()->validator(); + + controls_ = new ControlList(controls::controls, &validator); /** * \todo: Add a validator for metadata controls. @@ -100,7 +98,6 @@ Request::~Request() delete metadata_; delete controls_; - delete validator_; } /**