{"id":12895,"url":"https://patchwork.libcamera.org/api/patches/12895/?format=json","web_url":"https://patchwork.libcamera.org/patch/12895/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/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":"<20210711170359.300-3-laurent.pinchart@ideasonboard.com>","date":"2021-07-11T17:03:58","name":"[libcamera-devel,v2,2/3] libcamera: Drop the LIBCAMERA_D_PTR macro in favour of the _d() function","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"bb88355200af411ae3a1f5ffa3d3069c79cd6315","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/?format=json","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/12895/mbox/","series":[{"id":2225,"url":"https://patchwork.libcamera.org/api/series/2225/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2225","date":"2021-07-11T17:03:56","name":"libcamera: Make Framebuffer class Extensible","version":2,"mbox":"https://patchwork.libcamera.org/series/2225/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12895/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12895/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 BA18EC3224\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 11 Jul 2021 17:04:52 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B08886851B;\n\tSun, 11 Jul 2021 19:04:51 +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 59AB46851B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 11 Jul 2021 19:04:49 +0200 (CEST)","from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id ED37DCC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 11 Jul 2021 19:04:48 +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=\"Esc1f8Nw\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1626023089;\n\tbh=lHGpSk5xmnEew1Bjoj550UvIH1RtL2lO8RVfAf9k17Q=;\n\th=From:To:Subject:Date:In-Reply-To:References:From;\n\tb=Esc1f8NwjbdIL/7mdCoqYjDPms/IY+5ypX2WdA6nFSXjb0RU5eiibr/8mI9OGH/4X\n\ttZ0YtPUmpYcePJGdu/ugdEYbGN6+xxqlYAnpgOyGfnwLEsh/DPhgCjjYP7Y9m1DTrY\n\tT9wEYYeEKeual684vDVh6xbDe8HuVQ4c+iJpcj3Y=","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Sun, 11 Jul 2021 20:03:58 +0300","Message-Id":"<20210711170359.300-3-laurent.pinchart@ideasonboard.com>","X-Mailer":"git-send-email 2.31.1","In-Reply-To":"<20210711170359.300-1-laurent.pinchart@ideasonboard.com>","References":"<20210711170359.300-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v2 2/3] libcamera: Drop the\n\tLIBCAMERA_D_PTR macro in favour of the _d() function","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Now that all Extensible classes expose a _d() function that performs\nappropriate casts, the LIBCAMERA_D_PTR brings no real additional value.\nReplace it with direct calls to the _d() function.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n include/libcamera/base/class.h    |  4 ---\n src/android/camera_buffer.h       | 15 ++++-------\n src/android/camera_hal_config.cpp |  3 +--\n src/libcamera/base/class.cpp      | 17 +++---------\n src/libcamera/camera.cpp          | 44 ++++++++++++-------------------\n src/libcamera/camera_manager.cpp  | 16 +++++------\n 6 files changed, 34 insertions(+), 65 deletions(-)","diff":"diff --git a/include/libcamera/base/class.h b/include/libcamera/base/class.h\nindex 8212c3d4a5ae..c2e1d3534ed1 100644\n--- a/include/libcamera/base/class.h\n+++ b/include/libcamera/base/class.h\n@@ -49,16 +49,12 @@ public:\t\t\t\t\t\t\t\t\t\\\n \tfriend class klass;\t\t\t\t\t\t\\\n \tusing Public = klass;\n \n-#define LIBCAMERA_D_PTR()\t\t\t\t\t\t\\\n-\t_d();\n-\n #define LIBCAMERA_O_PTR()\t\t\t\t\t\t\\\n \t_o<Public>();\n \n #else\n #define LIBCAMERA_DECLARE_PRIVATE()\n #define LIBCAMERA_DECLARE_PUBLIC(klass)\n-#define LIBCAMERA_D_PTR()\n #define LIBCAMERA_O_PTR()\n #endif\n \ndiff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h\nindex 2617ff6b11a1..21373fa25bf8 100644\n--- a/src/android/camera_buffer.h\n+++ b/src/android/camera_buffer.h\n@@ -40,27 +40,22 @@ CameraBuffer::~CameraBuffer()\t\t\t\t\t\t\\\n }\t\t\t\t\t\t\t\t\t\\\n bool CameraBuffer::isValid() const\t\t\t\t\t\\\n {\t\t\t\t\t\t\t\t\t\\\n-\tconst Private *const d = LIBCAMERA_D_PTR();\t\t\t\\\n-\treturn d->isValid();\t\t\t\t\t\t\\\n+\treturn _d()->isValid();\t\t\t\t\t\t\\\n }\t\t\t\t\t\t\t\t\t\\\n unsigned int CameraBuffer::numPlanes() const\t\t\t\t\\\n {\t\t\t\t\t\t\t\t\t\\\n-\tconst Private *const d = LIBCAMERA_D_PTR();\t\t\t\\\n-\treturn d->numPlanes();\t\t\t\t\t\t\\\n+\treturn _d()->numPlanes();\t\t\t\t\t\\\n }\t\t\t\t\t\t\t\t\t\\\n Span<const uint8_t> CameraBuffer::plane(unsigned int plane) const\t\\\n {\t\t\t\t\t\t\t\t\t\\\n-\tconst Private *const d = LIBCAMERA_D_PTR();\t\t\t\\\n-\treturn const_cast<Private *>(d)->plane(plane);\t\t\t\\\n+\treturn const_cast<Private *>(_d())->plane(plane);\t\t\\\n }\t\t\t\t\t\t\t\t\t\\\n Span<uint8_t> CameraBuffer::plane(unsigned int plane)\t\t\t\\\n {\t\t\t\t\t\t\t\t\t\\\n-\tPrivate *const d = LIBCAMERA_D_PTR();\t\t\t\t\\\n-\treturn d->plane(plane);\t\t\t\t\t\t\\\n+\treturn _d()->plane(plane);\t\t\t\t\t\\\n }\t\t\t\t\t\t\t\t\t\\\n size_t CameraBuffer::jpegBufferSize(size_t maxJpegBufferSize) const\t\\\n {\t\t\t\t\t\t\t\t\t\\\n-\tconst Private *const d = LIBCAMERA_D_PTR();\t\t\t\\\n-\treturn d->jpegBufferSize(maxJpegBufferSize);\t\t\t\\\n+\treturn _d()->jpegBufferSize(maxJpegBufferSize);\t\t\t\\\n }\n #endif /* __ANDROID_CAMERA_BUFFER_H__ */\ndiff --git a/src/android/camera_hal_config.cpp b/src/android/camera_hal_config.cpp\nindex d84de4fd6f90..833cf4ba98a9 100644\n--- a/src/android/camera_hal_config.cpp\n+++ b/src/android/camera_hal_config.cpp\n@@ -375,8 +375,7 @@ int CameraHalConfig::parseConfigurationFile()\n \n \texists_ = true;\n \n-\tPrivate *const d = LIBCAMERA_D_PTR();\n-\tint ret = d->parseConfigFile(fh, &cameras_);\n+\tint ret = _d()->parseConfigFile(fh, &cameras_);\n \tfclose(fh);\n \tif (ret)\n \t\treturn -EINVAL;\ndiff --git a/src/libcamera/base/class.cpp b/src/libcamera/base/class.cpp\nindex 165beafc243d..26b4967726d6 100644\n--- a/src/libcamera/base/class.cpp\n+++ b/src/libcamera/base/class.cpp\n@@ -94,23 +94,12 @@ namespace libcamera {\n  * name passed as the \\a klass parameter.\n  */\n \n-/**\n- * \\def LIBCAMERA_D_PTR()\n- * \\brief Retrieve the private data pointer\n- *\n- * This macro can be used in any member function of a class that inherits,\n- * directly or indirectly, from the Extensible class, to create a local\n- * variable named 'd' that points to the class' private data instance.\n- */\n-\n /**\n  * \\def LIBCAMERA_O_PTR()\n  * \\brief Retrieve the public instance corresponding to the private data\n  *\n- * This macro is the counterpart of LIBCAMERA_D_PTR() for private data classes.\n- * It can be used in any member function of the private data class to create a\n- * local variable named 'o' that points to the public class instance\n- * corresponding to the private data.\n+ * This macro is used in any member function of the private data class to access\n+ * the public class instance corresponding to the private data.\n  */\n \n /**\n@@ -148,6 +137,8 @@ namespace libcamera {\n  * class need to be qualified with appropriate access specifiers. The\n  * PublicClass and Private classes always have full access to each other's\n  * protected and private members.\n+ *\n+ * The PublicClass exposes its Private data pointer through the _d() function.\n  */\n \n /**\ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 29f2d91d05d3..c8858e71d105 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -604,8 +604,7 @@ std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,\n  */\n const std::string &Camera::id() const\n {\n-\tconst Private *const d = LIBCAMERA_D_PTR();\n-\treturn d->id_;\n+\treturn _d()->id_;\n }\n \n /**\n@@ -655,18 +654,16 @@ Camera::~Camera()\n  */\n void Camera::disconnect()\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n-\n \tLOG(Camera, Debug) << \"Disconnecting camera \" << id();\n \n-\td->disconnect();\n+\t_d()->disconnect();\n \tdisconnected.emit(this);\n }\n \n int Camera::exportFrameBuffers(Stream *stream,\n \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tint ret = d->isAccessAllowed(Private::CameraConfigured);\n \tif (ret < 0)\n@@ -709,7 +706,7 @@ int Camera::exportFrameBuffers(Stream *stream,\n  */\n int Camera::acquire()\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \t/*\n \t * No manual locking is required as PipelineHandler::lock() is\n@@ -746,7 +743,7 @@ int Camera::acquire()\n  */\n int Camera::release()\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tint ret = d->isAccessAllowed(Private::CameraAvailable,\n \t\t\t\t     Private::CameraConfigured, true);\n@@ -772,8 +769,7 @@ int Camera::release()\n  */\n const ControlInfoMap &Camera::controls() const\n {\n-\tconst Private *const d = LIBCAMERA_D_PTR();\n-\treturn d->pipe_->controls(this);\n+\treturn _d()->pipe_->controls(this);\n }\n \n /**\n@@ -786,8 +782,7 @@ const ControlInfoMap &Camera::controls() const\n  */\n const ControlList &Camera::properties() const\n {\n-\tconst Private *const d = LIBCAMERA_D_PTR();\n-\treturn d->pipe_->properties(this);\n+\treturn _d()->pipe_->properties(this);\n }\n \n /**\n@@ -803,8 +798,7 @@ const ControlList &Camera::properties() const\n  */\n const std::set<Stream *> &Camera::streams() const\n {\n-\tconst Private *const d = LIBCAMERA_D_PTR();\n-\treturn d->streams_;\n+\treturn _d()->streams_;\n }\n \n /**\n@@ -825,7 +819,7 @@ const std::set<Stream *> &Camera::streams() const\n  */\n std::unique_ptr<CameraConfiguration> Camera::generateConfiguration(const StreamRoles &roles)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tint ret = d->isAccessAllowed(Private::CameraAvailable,\n \t\t\t\t     Private::CameraRunning);\n@@ -886,7 +880,7 @@ std::unique_ptr<CameraConfiguration> Camera::generateConfiguration(const StreamR\n  */\n int Camera::configure(CameraConfiguration *config)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tint ret = d->isAccessAllowed(Private::CameraAcquired,\n \t\t\t\t     Private::CameraConfigured);\n@@ -958,10 +952,8 @@ int Camera::configure(CameraConfiguration *config)\n  */\n std::unique_ptr<Request> Camera::createRequest(uint64_t cookie)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n-\n-\tint ret = d->isAccessAllowed(Private::CameraConfigured,\n-\t\t\t\t     Private::CameraRunning);\n+\tint ret = _d()->isAccessAllowed(Private::CameraConfigured,\n+\t\t\t\t\tPrivate::CameraRunning);\n \tif (ret < 0)\n \t\treturn nullptr;\n \n@@ -992,7 +984,7 @@ std::unique_ptr<Request> Camera::createRequest(uint64_t cookie)\n  */\n int Camera::queueRequest(Request *request)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tint ret = d->isAccessAllowed(Private::CameraRunning);\n \tif (ret < 0)\n@@ -1044,7 +1036,7 @@ int Camera::queueRequest(Request *request)\n  */\n int Camera::start(const ControlList *controls)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tint ret = d->isAccessAllowed(Private::CameraConfigured);\n \tif (ret < 0)\n@@ -1079,7 +1071,7 @@ int Camera::start(const ControlList *controls)\n  */\n int Camera::stop()\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \t/*\n \t * \\todo Make calling stop() when not in 'Running' part of the state\n@@ -1115,11 +1107,9 @@ int Camera::stop()\n  */\n void Camera::requestComplete(Request *request)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n-\n \t/* Disconnected cameras are still able to complete requests. */\n-\tif (d->isAccessAllowed(Private::CameraStopping, Private::CameraRunning,\n-\t\t\t       true))\n+\tif (_d()->isAccessAllowed(Private::CameraStopping, Private::CameraRunning,\n+\t\t\t\t  true))\n \t\tLOG(Camera, Fatal) << \"Trying to complete a request when stopped\";\n \n \trequestCompleted.emit(request);\ndiff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\nindex fc3bd88c737b..1c79308ad4b5 100644\n--- a/src/libcamera/camera_manager.cpp\n+++ b/src/libcamera/camera_manager.cpp\n@@ -291,11 +291,9 @@ CameraManager::~CameraManager()\n  */\n int CameraManager::start()\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n-\n \tLOG(Camera, Info) << \"libcamera \" << version_;\n \n-\tint ret = d->start();\n+\tint ret = _d()->start();\n \tif (ret)\n \t\tLOG(Camera, Error) << \"Failed to start camera manager: \"\n \t\t\t\t   << strerror(-ret);\n@@ -315,7 +313,7 @@ int CameraManager::start()\n  */\n void CameraManager::stop()\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \td->exit();\n \td->wait();\n }\n@@ -333,7 +331,7 @@ void CameraManager::stop()\n  */\n std::vector<std::shared_ptr<Camera>> CameraManager::cameras() const\n {\n-\tconst Private *const d = LIBCAMERA_D_PTR();\n+\tconst Private *const d = _d();\n \n \tMutexLocker locker(d->mutex_);\n \n@@ -353,7 +351,7 @@ std::vector<std::shared_ptr<Camera>> CameraManager::cameras() const\n  */\n std::shared_ptr<Camera> CameraManager::get(const std::string &id)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tMutexLocker locker(d->mutex_);\n \n@@ -383,7 +381,7 @@ std::shared_ptr<Camera> CameraManager::get(const std::string &id)\n  */\n std::shared_ptr<Camera> CameraManager::get(dev_t devnum)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tMutexLocker locker(d->mutex_);\n \n@@ -439,7 +437,7 @@ std::shared_ptr<Camera> CameraManager::get(dev_t devnum)\n void CameraManager::addCamera(std::shared_ptr<Camera> camera,\n \t\t\t      const std::vector<dev_t> &devnums)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tASSERT(Thread::current() == d);\n \n@@ -459,7 +457,7 @@ void CameraManager::addCamera(std::shared_ptr<Camera> camera,\n  */\n void CameraManager::removeCamera(std::shared_ptr<Camera> camera)\n {\n-\tPrivate *const d = LIBCAMERA_D_PTR();\n+\tPrivate *const d = _d();\n \n \tASSERT(Thread::current() == d);\n \n","prefixes":["libcamera-devel","v2","2/3"]}