[{"id":18099,"web_url":"https://patchwork.libcamera.org/comment/18099/","msgid":"<20210712081804.ebq4czd4xubcfji5@uno.localdomain>","date":"2021-07-12T08:18:04","subject":"Re: [libcamera-devel] [PATCH v2 2/3] libcamera: Drop the\n\tLIBCAMERA_D_PTR macro in favour of the _d() function","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi\n\nOn Sun, Jul 11, 2021 at 08:03:58PM +0300, Laurent Pinchart wrote:\n> Now that all Extensible classes expose a _d() function that performs\n> appropriate casts, the LIBCAMERA_D_PTR brings no real additional value.\n> Replace it with direct calls to the _d() function.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nAh well, I should have read this before answering to the previous\nversion.\n\nIf deemed better by the majority\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\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(-)\n>\n> diff --git a/include/libcamera/base/class.h b/include/libcamera/base/class.h\n> index 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>\n> diff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h\n> index 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__ */\n> diff --git a/src/android/camera_hal_config.cpp b/src/android/camera_hal_config.cpp\n> index 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;\n> diff --git a/src/libcamera/base/class.cpp b/src/libcamera/base/class.cpp\n> index 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>  /**\n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index 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);\n> diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> index 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> --\n> Regards,\n>\n> Laurent Pinchart\n>","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 93700BD794\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 12 Jul 2021 08:17:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F0D3068524;\n\tMon, 12 Jul 2021 10:17:16 +0200 (CEST)","from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net\n\t[217.70.183.195])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8A6F368506\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Jul 2021 10:17:15 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay3-d.mail.gandi.net (Postfix) with ESMTPSA id E41B260009;\n\tMon, 12 Jul 2021 08:17:14 +0000 (UTC)"],"Date":"Mon, 12 Jul 2021 10:18:04 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210712081804.ebq4czd4xubcfji5@uno.localdomain>","References":"<20210711170359.300-1-laurent.pinchart@ideasonboard.com>\n\t<20210711170359.300-3-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210711170359.300-3-laurent.pinchart@ideasonboard.com>","Subject":"Re: [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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18102,"web_url":"https://patchwork.libcamera.org/comment/18102/","msgid":"<06ca889b-5c6d-3b03-54ca-3a6fad273d72@ideasonboard.com>","date":"2021-07-12T08:30:50","subject":"Re: [libcamera-devel] [PATCH v2 2/3] libcamera: Drop the\n\tLIBCAMERA_D_PTR macro in favour of the _d() function","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 11/07/2021 18:03, Laurent Pinchart wrote:\n> Now that all Extensible classes expose a _d() function that performs\n> appropriate casts, the LIBCAMERA_D_PTR brings no real additional value.\n> Replace it with direct calls to the _d() function.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\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(-)\n> \n> diff --git a/include/libcamera/base/class.h b/include/libcamera/base/class.h\n> index 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>  \n> diff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h\n> index 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__ */\n> diff --git a/src/android/camera_hal_config.cpp b/src/android/camera_hal_config.cpp\n> index 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;\n> diff --git a/src/libcamera/base/class.cpp b/src/libcamera/base/class.cpp\n> index 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>  /**\n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index 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);\n> diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> index 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>","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 62BC8BD794\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 12 Jul 2021 08:30:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CDFF268521;\n\tMon, 12 Jul 2021 10:30:55 +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 A50B768506\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Jul 2021 10:30:53 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 2E159CC;\n\tMon, 12 Jul 2021 10:30:53 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"qvv1xVTg\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1626078653;\n\tbh=ELf+PODorBho0lyyhgH1kStbLWgtwbF3VjFUZxeFeyc=;\n\th=To:References:From:Subject:Date:In-Reply-To:From;\n\tb=qvv1xVTg1O/6V/Jf7WC4NdbcXM4N7OtjKDkNcm1xpUJWNRKoQIZDbrVYCIAZd49g5\n\tc48A5fXNq4eT5II+L3NWYP3qeZxJ80+XiiZRFD3vBvCWFuTZ2x+8TyuXl7+zkmphQ5\n\tRJ4vdkErP+tghAAHCOwOk3XQDcoVHLoVGxWy9rTo=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210711170359.300-1-laurent.pinchart@ideasonboard.com>\n\t<20210711170359.300-3-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<06ca889b-5c6d-3b03-54ca-3a6fad273d72@ideasonboard.com>","Date":"Mon, 12 Jul 2021 09:30:50 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.11.0","MIME-Version":"1.0","In-Reply-To":"<20210711170359.300-3-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [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>"}},{"id":18104,"web_url":"https://patchwork.libcamera.org/comment/18104/","msgid":"<YOv+1RpZ1Di77BU0@pendragon.ideasonboard.com>","date":"2021-07-12T08:35:33","subject":"Re: [libcamera-devel] [PATCH v2 2/3] libcamera: Drop the\n\tLIBCAMERA_D_PTR macro in favour of the _d() function","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn Mon, Jul 12, 2021 at 10:18:04AM +0200, Jacopo Mondi wrote:\n> On Sun, Jul 11, 2021 at 08:03:58PM +0300, Laurent Pinchart wrote:\n> > Now that all Extensible classes expose a _d() function that performs\n> > appropriate casts, the LIBCAMERA_D_PTR brings no real additional value.\n> > Replace it with direct calls to the _d() function.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> Ah well, I should have read this before answering to the previous\n> version.\n> \n> If deemed better by the majority\n\nThat's what I'm not sure about :-) What's your opinion, do you like it\nbetter or not ?\n\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> \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(-)\n> >\n> > diff --git a/include/libcamera/base/class.h b/include/libcamera/base/class.h\n> > index 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> >\n> > diff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h\n> > index 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__ */\n> > diff --git a/src/android/camera_hal_config.cpp b/src/android/camera_hal_config.cpp\n> > index 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;\n> > diff --git a/src/libcamera/base/class.cpp b/src/libcamera/base/class.cpp\n> > index 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> >  /**\n> > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > index 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);\n> > diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> > index 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> > --\n> > Regards,\n> >\n> > Laurent Pinchart\n> >","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 3150CC3224\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 12 Jul 2021 08:36:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E5FEF68506;\n\tMon, 12 Jul 2021 10:36:21 +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 B54DE68506\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Jul 2021 10:36:20 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3FE8ACC;\n\tMon, 12 Jul 2021 10:36:20 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Zwj1Z6aA\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1626078980;\n\tbh=SyYf6DLeU7+mNheLs3wlrI8DZN2yOZvW/YdMcOmccok=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Zwj1Z6aAyNIjzO6RQ3a1hzQVo/55BMRLtcLp6DenVircKOpxl5/26U+nAVu8pBb03\n\tif2jjKskLF/bu8t5mcJIB4VwA6LrjRcPDcjhOPcj1mfspC7BwPTTDSryfGFMQK9TcK\n\taSGGp9ufYRt1sDZxq/WWAOQ1aqbkRLxvR2aJAcxE=","Date":"Mon, 12 Jul 2021 11:35:33 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YOv+1RpZ1Di77BU0@pendragon.ideasonboard.com>","References":"<20210711170359.300-1-laurent.pinchart@ideasonboard.com>\n\t<20210711170359.300-3-laurent.pinchart@ideasonboard.com>\n\t<20210712081804.ebq4czd4xubcfji5@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210712081804.ebq4czd4xubcfji5@uno.localdomain>","Subject":"Re: [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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18105,"web_url":"https://patchwork.libcamera.org/comment/18105/","msgid":"<20210712085525.e5efycgcfvxvdxto@uno.localdomain>","date":"2021-07-12T08:55:25","subject":"Re: [libcamera-devel] [PATCH v2 2/3] libcamera: Drop the\n\tLIBCAMERA_D_PTR macro in favour of the _d() function","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Mon, Jul 12, 2021 at 11:35:33AM +0300, Laurent Pinchart wrote:\n> Hi Jacopo,\n>\n> On Mon, Jul 12, 2021 at 10:18:04AM +0200, Jacopo Mondi wrote:\n> > On Sun, Jul 11, 2021 at 08:03:58PM +0300, Laurent Pinchart wrote:\n> > > Now that all Extensible classes expose a _d() function that performs\n> > > appropriate casts, the LIBCAMERA_D_PTR brings no real additional value.\n> > > Replace it with direct calls to the _d() function.\n> > >\n> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> >\n> > Ah well, I should have read this before answering to the previous\n> > version.\n> >\n> > If deemed better by the majority\n>\n> That's what I'm not sure about :-) What's your opinion, do you like it\n> better or not ?\n>\n\nNot really, but Kieran has a convincing argument about two ways to\nachieve the same being confusing, so my tag stands :)\n\n\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> >\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(-)\n> > >\n> > > diff --git a/include/libcamera/base/class.h b/include/libcamera/base/class.h\n> > > index 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> > >\n> > > diff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h\n> > > index 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__ */\n> > > diff --git a/src/android/camera_hal_config.cpp b/src/android/camera_hal_config.cpp\n> > > index 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;\n> > > diff --git a/src/libcamera/base/class.cpp b/src/libcamera/base/class.cpp\n> > > index 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> > >  /**\n> > > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > > index 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);\n> > > diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> > > index 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> > > --\n> > > Regards,\n> > >\n> > > Laurent Pinchart\n> > >\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","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 3E7BDC3225\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 12 Jul 2021 08:54:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9C77068521;\n\tMon, 12 Jul 2021 10:54:37 +0200 (CEST)","from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[217.70.183.201])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6181A68506\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Jul 2021 10:54:36 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 96D8F1BF211;\n\tMon, 12 Jul 2021 08:54:35 +0000 (UTC)"],"Date":"Mon, 12 Jul 2021 10:55:25 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210712085525.e5efycgcfvxvdxto@uno.localdomain>","References":"<20210711170359.300-1-laurent.pinchart@ideasonboard.com>\n\t<20210711170359.300-3-laurent.pinchart@ideasonboard.com>\n\t<20210712081804.ebq4czd4xubcfji5@uno.localdomain>\n\t<YOv+1RpZ1Di77BU0@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<YOv+1RpZ1Di77BU0@pendragon.ideasonboard.com>","Subject":"Re: [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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]