From patchwork Thu Feb 11 13:34:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 11239 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 EFDCABD162 for ; Thu, 11 Feb 2021 13:34:51 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 0578563745; Thu, 11 Feb 2021 14:34:51 +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="GwaZlBOw"; 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 4FE6561661 for ; Thu, 11 Feb 2021 14:34:48 +0100 (CET) Received: from Q.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id CD5F045E; Thu, 11 Feb 2021 14:34:47 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1613050488; bh=+5h03PsthcwfZKzhw/S8i9/yWivYhHzcNQHhd3vXTJc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GwaZlBOwBXMN2KYqBaO2Sn17QHGWxYKU1DYPMa7iN8OtSSmXmuvbu6X3v6ZKV0dz1 WdU82yDFVTWJQW0YbOTOKDo+5N1RfeOX6W89oMI2m0AM35CQcACsLC40Ofc3q7jn8G n89MGQ+ZZdQ72Mz86z5pYi3BbbXQLlVR06+8i+Rs= From: Kieran Bingham To: libcamera devel Date: Thu, 11 Feb 2021 13:34:39 +0000 Message-Id: <20210211133444.764808-2-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> References: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 1/6] libcamera: Move extensible to class 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 Extensible concept is a generic Class helper. To prepare for further class helper additions, move the specific extensible implementation and header to a more generic class header and source. Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- include/libcamera/camera.h | 2 +- include/libcamera/camera_manager.h | 2 +- include/libcamera/{extensible.h => class.h} | 8 ++++---- include/libcamera/meson.build | 1 - src/libcamera/{extensible.cpp => class.cpp} | 11 +++++++---- src/libcamera/meson.build | 2 +- 6 files changed, 14 insertions(+), 12 deletions(-) rename include/libcamera/{extensible.h => class.h} (86%) rename src/libcamera/{extensible.cpp => class.cpp} (94%) diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h index f94f859988fe..cff9f46e801b 100644 --- a/include/libcamera/camera.h +++ b/include/libcamera/camera.h @@ -12,8 +12,8 @@ #include #include +#include #include -#include #include #include #include diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h index 8c8830e7ff1d..7b8e533fadd6 100644 --- a/include/libcamera/camera_manager.h +++ b/include/libcamera/camera_manager.h @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include diff --git a/include/libcamera/extensible.h b/include/libcamera/class.h similarity index 86% rename from include/libcamera/extensible.h rename to include/libcamera/class.h index 3f25a47c5064..2d9b7ebfdb08 100644 --- a/include/libcamera/extensible.h +++ b/include/libcamera/class.h @@ -2,10 +2,10 @@ /* * Copyright (C) 2020, Google Inc. * - * extensible.h - Utilities to create extensible public classes with stable ABIs + * class.h - Utilities and helpers for public classes */ -#ifndef __LIBCAMERA_EXTENSIBLE_H__ -#define __LIBCAMERA_EXTENSIBLE_H__ +#ifndef __LIBCAMERA_CLASS_H__ +#define __LIBCAMERA_CLASS_H__ #include @@ -84,4 +84,4 @@ private: } /* namespace libcamera */ -#endif /* __LIBCAMERA_EXTENSIBLE_H__ */ +#endif /* __LIBCAMERA_CLASS_H__ */ diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build index 13e9eeb6d6ad..aefc60d8c9b4 100644 --- a/include/libcamera/meson.build +++ b/include/libcamera/meson.build @@ -7,7 +7,6 @@ libcamera_public_headers = files([ 'camera_manager.h', 'compiler.h', 'controls.h', - 'extensible.h', 'file_descriptor.h', 'framebuffer_allocator.h', 'geometry.h', diff --git a/src/libcamera/extensible.cpp b/src/libcamera/class.cpp similarity index 94% rename from src/libcamera/extensible.cpp rename to src/libcamera/class.cpp index 1dcb0bf1b12f..8a608edb369b 100644 --- a/src/libcamera/extensible.cpp +++ b/src/libcamera/class.cpp @@ -2,14 +2,17 @@ /* * Copyright (C) 2020, Google Inc. * - * extensible.cpp - Utilities to create extensible public classes with stable ABIs + * class.cpp - Utilities and helpers for public classes */ -#include +#include /** - * \file extensible.h - * \brief Utilities to create extensible public classes with stable ABIs + * \file class.h + * \brief Utilities to help constructing public class interfaces + * + * The extensible class can be inheritted to create public classes with stable + * ABIs. */ namespace libcamera { diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build index 5a4bf0d7ba4f..552893a29dc0 100644 --- a/src/libcamera/meson.build +++ b/src/libcamera/meson.build @@ -9,6 +9,7 @@ libcamera_sources = files([ 'camera_controls.cpp', 'camera_manager.cpp', 'camera_sensor.cpp', + 'class.cpp', 'controls.cpp', 'control_serializer.cpp', 'control_validator.cpp', @@ -18,7 +19,6 @@ libcamera_sources = files([ 'event_dispatcher.cpp', 'event_dispatcher_poll.cpp', 'event_notifier.cpp', - 'extensible.cpp', 'file.cpp', 'file_descriptor.cpp', 'formats.cpp', From patchwork Thu Feb 11 13:34:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 11240 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 AD96EBD162 for ; Thu, 11 Feb 2021 13:34:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C86DC63733; Thu, 11 Feb 2021 14:34:51 +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="jgioIMq0"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 832C4601B5 for ; Thu, 11 Feb 2021 14:34:48 +0100 (CET) Received: from Q.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 2196999D; Thu, 11 Feb 2021 14:34:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1613050488; bh=vaNO8wpv7TTP0Ei1xXlxB2UStxTDudgc0PVEQp5TYdA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jgioIMq0x6FJkEyT9DN+ocILDhDgVQc9U4o7nliJMxcIJaxMykN46WTQPY6mLFdKF 0Xc2SLFT73bcHsGbOUOtSWWtQZ7jz/TctjsPj2HFr6blIvwSbGiXk/W+BRVwTwjyGR YGzH0th+JokEjC5Hu9nPjeUIXqBtVXmWv9cAyR7A= From: Kieran Bingham To: libcamera devel Date: Thu, 11 Feb 2021 13:34:40 +0000 Message-Id: <20210211133444.764808-3-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> References: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/6] libcamera: class: Provide move and copy disablers 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" It can be difficult to correctly parse the syntax for copy/move and the associated assignment operators. Provide helpers as syntactic sugar to facilitate disabling either the copy constructor, and copy assignment operator, and the move constructor and move assignment operator in a way which is explicit and clear. Signed-off-by: Kieran Bingham --- include/libcamera/class.h | 12 ++++++++++++ src/libcamera/class.cpp | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/libcamera/class.h b/include/libcamera/class.h index 2d9b7ebfdb08..5cd31d1b9f37 100644 --- a/include/libcamera/class.h +++ b/include/libcamera/class.h @@ -11,6 +11,18 @@ namespace libcamera { +#define LIBCAMERA_DISABLE_COPY(klass) \ + klass(const klass &) = delete; \ + klass &operator=(const klass &) = delete + +#define LIBCAMERA_DISABLE_MOVE(klass) \ + klass(klass &&) = delete; \ + klass &operator=(klass &&) = delete + +#define LIBCAMERA_DISABLE_COPY_AND_MOVE(klass) \ + LIBCAMERA_DISABLE_COPY(klass); \ + LIBCAMERA_DISABLE_MOVE(klass) + #ifndef __DOXYGEN__ #define LIBCAMERA_DECLARE_PRIVATE(klass) \ public: \ diff --git a/src/libcamera/class.cpp b/src/libcamera/class.cpp index 8a608edb369b..b081d05ec3ac 100644 --- a/src/libcamera/class.cpp +++ b/src/libcamera/class.cpp @@ -17,6 +17,24 @@ namespace libcamera { +/** + * \def LIBCAMERA_DISABLE_COPY + * \brief Delete the copy constructor and assignment operator. + * \param klass The identifier of the class to modify + */ + +/** + * \def LIBCAMERA_DISABLE_MOVE + * \brief Delete the move construtor and assignment operator. + * \param klass The identifier of the class to modify + */ + +/** + * \def LIBCAMERA_DISABLE_COPY_AND_MOVE + * \brief Delete all copy and move constructors, and assignment operators. + * \param klass The identifier of the class to modify + */ + /** * \def LIBCAMERA_DECLARE_PRIVATE * \brief Declare private data for a public class From patchwork Thu Feb 11 13:34:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 11241 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 2C873BD162 for ; Thu, 11 Feb 2021 13:34:53 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 174AD63749; Thu, 11 Feb 2021 14:34: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="lvLEqEpl"; 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 CCC18601B5 for ; Thu, 11 Feb 2021 14:34:48 +0100 (CET) Received: from Q.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 68D8ABB8; Thu, 11 Feb 2021 14:34:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1613050488; bh=FB1s+iz4kmcj39ojfKPl8kzhw83A4CAnUksJqWzCo7g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lvLEqEplU12kUlao4xHIu9mPDKldmZwGzOTskmJhpA/Z0H2gRFIyYpD4iWBFQaivr +VW+nemzv8LxZWyfAH5wUPxjuDKutnx0Nb2KjZXoVLTsme7gSh8ZncG+QO15GOxhw1 H1trFiUhEBPHVC2eRpD9D+Ts48Nki9UPD+AtiwAc= From: Kieran Bingham To: libcamera devel Date: Thu, 11 Feb 2021 13:34:41 +0000 Message-Id: <20210211133444.764808-4-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> References: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 3/6] libcamera: buffer: Utilise DISABLE_COPY_AND_MOVE 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" Convert the existing copy, move and assignment operators to use the new macros. Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- include/libcamera/buffer.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h index a26c8927d37a..d03af787cc08 100644 --- a/include/libcamera/buffer.h +++ b/include/libcamera/buffer.h @@ -10,6 +10,7 @@ #include #include +#include #include namespace libcamera { @@ -43,12 +44,6 @@ public: FrameBuffer(const std::vector &planes, unsigned int cookie = 0); - FrameBuffer(const FrameBuffer &) = delete; - FrameBuffer(FrameBuffer &&) = delete; - - FrameBuffer &operator=(const FrameBuffer &) = delete; - FrameBuffer &operator=(FrameBuffer &&) = delete; - const std::vector &planes() const { return planes_; } Request *request() const { return request_; } @@ -57,7 +52,10 @@ public: unsigned int cookie() const { return cookie_; } void setCookie(unsigned int cookie) { cookie_ = cookie; } + private: + LIBCAMERA_DISABLE_COPY_AND_MOVE(FrameBuffer); + friend class Request; /* Needed to update request_. */ friend class V4L2VideoDevice; /* Needed to update metadata_. */ From patchwork Thu Feb 11 13:34:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 11242 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 B26ADBD162 for ; Thu, 11 Feb 2021 13:34:53 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5EB6D601B5; Thu, 11 Feb 2021 14:34: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="M6EpL+9f"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1FE37601B5 for ; Thu, 11 Feb 2021 14:34:49 +0100 (CET) Received: from Q.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B4A71FDB; Thu, 11 Feb 2021 14:34:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1613050488; bh=9aPHg1DTBI+FrTV/p638nYtS/E4azvN99HWBETb7zOg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=M6EpL+9fzyjyaH8OCOZEq2O3nTlzBU8gYVLhWNB5LnaCy60e/B/DHA7bNIsHEymc9 rxV1ZZpzT68+fEh/fZim1hbVxeQF6hD6bjEcL8UMgMhXqzpJyee15+gnYU5PSSkDTD ikSwcXTjHCBXH/0kG3EE2bHCv9Urc1L/vMuRhULQ= From: Kieran Bingham To: libcamera devel Date: Thu, 11 Feb 2021 13:34:42 +0000 Message-Id: <20210211133444.764808-5-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> References: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 4/6] libcamera: media_object: Utilise LIBCAMERA_DISABLE_COPY 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" Convert MediaLink, MediaPad, and MediaEntity to declare LIBCAMERA_DISABLE_COPY. These classes already deleted their copy constructor but not the assignment operator. Utilising the LIBCAMERA_DISABLE_COPY fully prevents all copying of these classes. Signed-off-by: Kieran Bingham --- include/libcamera/internal/media_object.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/libcamera/internal/media_object.h b/include/libcamera/internal/media_object.h index 2b336961f98d..058f5b413837 100644 --- a/include/libcamera/internal/media_object.h +++ b/include/libcamera/internal/media_object.h @@ -12,6 +12,8 @@ #include +#include + namespace libcamera { class MediaDevice; @@ -47,11 +49,12 @@ public: int setEnabled(bool enable); private: + LIBCAMERA_DISABLE_COPY(MediaLink); + friend class MediaDevice; MediaLink(const struct media_v2_link *link, MediaPad *source, MediaPad *sink); - MediaLink(const MediaLink &) = delete; MediaPad *source_; MediaPad *sink_; @@ -72,7 +75,7 @@ private: friend class MediaDevice; MediaPad(const struct media_v2_pad *pad, MediaEntity *entity); - MediaPad(const MediaPad &) = delete; + LIBCAMERA_DISABLE_COPY(MediaPad); unsigned int index_; MediaEntity *entity_; @@ -103,7 +106,7 @@ private: MediaEntity(MediaDevice *dev, const struct media_v2_entity *entity, unsigned int major = 0, unsigned int minor = 0); - MediaEntity(const MediaEntity &) = delete; + LIBCAMERA_DISABLE_COPY(MediaEntity); void addPad(MediaPad *pad); From patchwork Thu Feb 11 13:34:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 11243 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 15297BD16C for ; Thu, 11 Feb 2021 13:34:54 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E7CB063753; Thu, 11 Feb 2021 14:34: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="DbkFrdMt"; 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 6862361661 for ; Thu, 11 Feb 2021 14:34:49 +0100 (CET) Received: from Q.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 094611210; Thu, 11 Feb 2021 14:34:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1613050489; bh=BDHCZ/d888fBgFBOFsqwRGAykJ9IxyQAZmcw03bD4v8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DbkFrdMt9LdQjOgh/+u7omXGHppDHRZY4wKoRv8qYc6xtjccn0pYl3hJQV+tWQPpu tczSqEg7S4APqF0B4q0mvZmLJ2/vdtKb9CjX2biYZaHYKCvx0c3Pu93z6Tvot5UD+T DrW7fVgy4wgzc0M4Nri+0GJG+bgKIvGXS9VdRzAo= From: Kieran Bingham To: libcamera devel Date: Thu, 11 Feb 2021 13:34:43 +0000 Message-Id: <20210211133444.764808-6-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> References: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 5/6] libcamera: Utilise LIBCAMERA_DISABLE_COPY 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" Replace existing use cases where the copy constructor and copy assignment operator are deleted with the LIBCAMERA_DISABLE_COPY statement Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- include/libcamera/camera.h | 6 +++--- include/libcamera/camera_manager.h | 4 ++-- include/libcamera/controls.h | 7 +++---- include/libcamera/framebuffer_allocator.h | 7 ++++--- include/libcamera/internal/byte_stream_buffer.h | 4 ++-- include/libcamera/internal/camera_sensor.h | 6 +++--- include/libcamera/internal/file.h | 6 +++--- include/libcamera/internal/log.h | 6 +++++- include/libcamera/internal/pipeline_handler.h | 4 ++-- include/libcamera/internal/v4l2_subdevice.h | 5 +++-- include/libcamera/internal/v4l2_videodevice.h | 6 +++--- include/libcamera/request.h | 5 +++-- 12 files changed, 36 insertions(+), 30 deletions(-) diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h index cff9f46e801b..568740a37778 100644 --- a/include/libcamera/camera.h +++ b/include/libcamera/camera.h @@ -81,9 +81,6 @@ public: const std::string &id, const std::set &streams); - Camera(const Camera &) = delete; - Camera &operator=(const Camera &) = delete; - const std::string &id() const; Signal bufferCompleted; @@ -109,6 +106,9 @@ public: private: Camera(PipelineHandler *pipe, const std::string &id, const std::set &streams); + + LIBCAMERA_DISABLE_COPY(Camera); + ~Camera(); friend class PipelineHandler; diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h index 7b8e533fadd6..467cfd0ac4ac 100644 --- a/include/libcamera/camera_manager.h +++ b/include/libcamera/camera_manager.h @@ -25,8 +25,6 @@ class CameraManager : public Object, public Extensible LIBCAMERA_DECLARE_PRIVATE(CameraManager) public: CameraManager(); - CameraManager(const CameraManager &) = delete; - CameraManager &operator=(const CameraManager &) = delete; ~CameraManager(); int start(); @@ -46,6 +44,8 @@ public: Signal> cameraRemoved; private: + LIBCAMERA_DISABLE_COPY(CameraManager); + static const std::string version_; static CameraManager *self_; }; diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 3b7f3347761e..a5c9bda28661 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -220,8 +221,7 @@ public: ControlType type() const { return type_; } private: - ControlId &operator=(const ControlId &) = delete; - ControlId(const ControlId &) = delete; + LIBCAMERA_DISABLE_COPY(ControlId); unsigned int id_; std::string name_; @@ -260,8 +260,7 @@ public: } private: - Control(const Control &) = delete; - Control &operator=(const Control &) = delete; + LIBCAMERA_DISABLE_COPY(Control); }; class ControlInfo diff --git a/include/libcamera/framebuffer_allocator.h b/include/libcamera/framebuffer_allocator.h index a96aaeae58ce..9e42de280c98 100644 --- a/include/libcamera/framebuffer_allocator.h +++ b/include/libcamera/framebuffer_allocator.h @@ -11,6 +11,8 @@ #include #include +#include + namespace libcamera { class Camera; @@ -21,9 +23,6 @@ class FrameBufferAllocator { public: FrameBufferAllocator(std::shared_ptr camera); - FrameBufferAllocator(const FrameBufferAllocator &) = delete; - FrameBufferAllocator &operator=(const FrameBufferAllocator &) = delete; - ~FrameBufferAllocator(); int allocate(Stream *stream); @@ -33,6 +32,8 @@ public: const std::vector> &buffers(Stream *stream) const; private: + LIBCAMERA_DISABLE_COPY(FrameBufferAllocator); + std::shared_ptr camera_; std::map>> buffers_; }; diff --git a/include/libcamera/internal/byte_stream_buffer.h b/include/libcamera/internal/byte_stream_buffer.h index db59577dc332..ec8b0b2ada86 100644 --- a/include/libcamera/internal/byte_stream_buffer.h +++ b/include/libcamera/internal/byte_stream_buffer.h @@ -11,6 +11,7 @@ #include #include +#include #include namespace libcamera { @@ -65,8 +66,7 @@ public: } private: - ByteStreamBuffer(const ByteStreamBuffer &other) = delete; - ByteStreamBuffer &operator=(const ByteStreamBuffer &other) = delete; + LIBCAMERA_DISABLE_COPY(ByteStreamBuffer); void setOverflow(); diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h index c8f81882a958..9d26bd24a321 100644 --- a/include/libcamera/internal/camera_sensor.h +++ b/include/libcamera/internal/camera_sensor.h @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -45,9 +46,6 @@ public: explicit CameraSensor(const MediaEntity *entity); ~CameraSensor(); - CameraSensor(const CameraSensor &) = delete; - CameraSensor &operator=(const CameraSensor &) = delete; - int init(); const std::string &model() const { return model_; } @@ -74,6 +72,8 @@ protected: std::string logPrefix() const override; private: + LIBCAMERA_DISABLE_COPY(CameraSensor); + int generateId(); int validateSensorDriver(); void initVimcDefaultProperties(); diff --git a/include/libcamera/internal/file.h b/include/libcamera/internal/file.h index 9b6d011f5e9d..2f75aaf00dab 100644 --- a/include/libcamera/internal/file.h +++ b/include/libcamera/internal/file.h @@ -11,6 +11,7 @@ #include #include +#include #include namespace libcamera { @@ -34,9 +35,6 @@ public: File(); ~File(); - File(const File &) = delete; - File &operator=(const File &) = delete; - const std::string &fileName() const { return name_; } void setFileName(const std::string &name); bool exists() const; @@ -62,6 +60,8 @@ public: static bool exists(const std::string &name); private: + LIBCAMERA_DISABLE_COPY(File); + void unmapAll(); std::string name_; diff --git a/include/libcamera/internal/log.h b/include/libcamera/internal/log.h index 4b10087a4718..5c44d623797a 100644 --- a/include/libcamera/internal/log.h +++ b/include/libcamera/internal/log.h @@ -10,6 +10,8 @@ #include #include +#include + #include "libcamera/internal/utils.h" namespace libcamera { @@ -57,7 +59,7 @@ public: LogSeverity severity); LogMessage(const char *fileName, unsigned int line, const LogCategory &category, LogSeverity severity); - LogMessage(const LogMessage &) = delete; + LogMessage(LogMessage &&); ~LogMessage(); @@ -70,6 +72,8 @@ public: const std::string msg() const { return msgStream_.str(); } private: + LIBCAMERA_DISABLE_COPY(LogMessage); + void init(const char *fileName, unsigned int line); std::ostringstream msgStream_; diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h index 0748f8634608..d5913eae88ca 100644 --- a/include/libcamera/internal/pipeline_handler.h +++ b/include/libcamera/internal/pipeline_handler.h @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -49,8 +50,7 @@ public: std::unique_ptr ipa_; private: - CameraData(const CameraData &) = delete; - CameraData &operator=(const CameraData &) = delete; + LIBCAMERA_DISABLE_COPY(CameraData); }; class PipelineHandler : public std::enable_shared_from_this, diff --git a/include/libcamera/internal/v4l2_subdevice.h b/include/libcamera/internal/v4l2_subdevice.h index eb25fa2fd01b..f983ae6302bb 100644 --- a/include/libcamera/internal/v4l2_subdevice.h +++ b/include/libcamera/internal/v4l2_subdevice.h @@ -11,6 +11,7 @@ #include #include +#include #include #include "libcamera/internal/formats.h" @@ -41,8 +42,6 @@ public: }; explicit V4L2Subdevice(const MediaEntity *entity); - V4L2Subdevice(const V4L2Subdevice &) = delete; - V4L2Subdevice &operator=(const V4L2Subdevice &) = delete; ~V4L2Subdevice(); int open(); @@ -68,6 +67,8 @@ protected: std::string logPrefix() const override; private: + LIBCAMERA_DISABLE_COPY(V4L2Subdevice); + std::vector enumPadCodes(unsigned int pad); std::vector enumPadSizes(unsigned int pad, unsigned int code); diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h index 626dfbcd6113..f8da608603ef 100644 --- a/include/libcamera/internal/v4l2_videodevice.h +++ b/include/libcamera/internal/v4l2_videodevice.h @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -175,11 +176,8 @@ public: explicit V4L2VideoDevice(const std::string &deviceNode); explicit V4L2VideoDevice(const MediaEntity *entity); - V4L2VideoDevice(const V4L2VideoDevice &) = delete; ~V4L2VideoDevice(); - V4L2VideoDevice &operator=(const V4L2VideoDevice &) = delete; - int open(); int open(int handle, enum v4l2_buf_type type); void close(); @@ -219,6 +217,8 @@ protected: std::string logPrefix() const override; private: + LIBCAMERA_DISABLE_COPY(V4L2VideoDevice); + int getFormatMeta(V4L2DeviceFormat *format); int trySetFormatMeta(V4L2DeviceFormat *format, bool set); diff --git a/include/libcamera/request.h b/include/libcamera/request.h index 655b1324bae8..3354ae9083f1 100644 --- a/include/libcamera/request.h +++ b/include/libcamera/request.h @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -39,8 +40,6 @@ public: using BufferMap = std::map; Request(Camera *camera, uint64_t cookie = 0); - Request(const Request &) = delete; - Request &operator=(const Request &) = delete; ~Request(); void reuse(ReuseFlag flags = Default); @@ -57,6 +56,8 @@ public: bool hasPendingBuffers() const { return !pending_.empty(); } private: + LIBCAMERA_DISABLE_COPY(Request); + friend class PipelineHandler; void complete(); From patchwork Thu Feb 11 13:34:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 11244 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 5A755BD162 for ; Thu, 11 Feb 2021 13:34:54 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B83626374C; Thu, 11 Feb 2021 14:34:53 +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="p0clltTY"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id A72C96373E for ; Thu, 11 Feb 2021 14:34:49 +0100 (CET) Received: from Q.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 522921231; Thu, 11 Feb 2021 14:34:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1613050489; bh=tiUgSTDGAJdFfObIjl6SLnN7J2AUgSIKWMC6P0sKttk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p0clltTYQG4uZOelRLB1O8w248ZW2ahZfYO56QeDiLU6edAvYN6GfZkesb7bNbkN7 8OpTduys4bAk+zPNuU/ozRIRosQ10Zo5Bb3VhAr5mcDw1wabRW6tWHLxK+pyGiAroZ r6i9ATPDpD9ktWQ+FwsOLtQyaEvRwboNt2EHPc2U= From: Kieran Bingham To: libcamera devel Date: Thu, 11 Feb 2021 13:34:44 +0000 Message-Id: <20210211133444.764808-7-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> References: <20210211133444.764808-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 6/6] libcamera: MappedBuffer: Disable copy and assignment 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" Prevent copying and assignment of MappedBuffer types, which could invoke undesired unmapping of mapped memory. Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- include/libcamera/internal/buffer.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/libcamera/internal/buffer.h b/include/libcamera/internal/buffer.h index b7b0173f93f5..b980deaf58d5 100644 --- a/include/libcamera/internal/buffer.h +++ b/include/libcamera/internal/buffer.h @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -34,6 +35,9 @@ protected: int error_; std::vector maps_; + +private: + LIBCAMERA_DISABLE_COPY(MappedBuffer); }; class MappedFrameBuffer : public MappedBuffer