[libcamera-devel] [PATCH 09/10] android: mm: Provide helper macro for PIMPL

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Mar 2 01:07:05 CET 2021


Hi Jacopo,

Thank you for the patch.

On Mon, Mar 01, 2021 at 04:01:10PM +0100, Jacopo Mondi wrote:
> Each memory backend has to declare a CameraBuffer class implementation
> that bridges the API calls to each CameraBufferImpl implementation.
> 
> As the code is likely the same for most (if not all) backends, provide
> a convenience macro that expands to the CameraBuffer class declaration.
> 
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
>  src/android/camera_buffer.h              | 28 ++++++++++++++++++++
>  src/android/mm/generic_camera_buffer.cpp | 33 +-----------------------
>  2 files changed, 29 insertions(+), 32 deletions(-)
> 
> diff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h
> index 2311cdaf96b2..ea73bf5b0ede 100644
> --- a/src/android/camera_buffer.h
> +++ b/src/android/camera_buffer.h
> @@ -28,4 +28,32 @@ public:
>  	libcamera::Span<uint8_t> plane(unsigned int plane);
>  };
>  
> +#define PUBLIC_CAMERA_BUFFER						\

Maybe PUBLIC_CAMERA_BUFFER_IMPLEMENTATION ? Up to you.

> +CameraBuffer::CameraBuffer(buffer_handle_t camera3Buffer, int flags)	\
> +	: Extensible(new Private(this, camera3Buffer, flags))		\
> +{                                                                       \
> +}									\
> +CameraBuffer::~CameraBuffer()                                           \
> +{									\
> +}							                \
> +bool CameraBuffer::isValid() const				        \
> +{                                                                       \
> +	const Private *const d = LIBCAMERA_D_PTR();                     \
> +	return d->isValid();                                            \
> +}									\
> +unsigned int CameraBuffer::numPlanes() const                            \
> +{                                                                       \
> +	const Private *const d = LIBCAMERA_D_PTR();                     \
> +	return d->numPlanes();                                          \
> +}                                                                       \
> +Span<const uint8_t> CameraBuffer::plane(unsigned int plane) const            \

I think indentation is incorrect here.

> +{									\
> +	const Private *const d = LIBCAMERA_D_PTR();                     \
> +	return d->plane(plane);                                         \
> +}                                                                       \
> +Span<uint8_t> CameraBuffer::plane(unsigned int plane)                        \

And here too.

I would normally say it would be nice to avoid duplicating the
implementation, but we only compile one of the .cpp file, so there's
actually no duplication in the binary.

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> +{                                                                       \
> +	Private *const d = LIBCAMERA_D_PTR();				\
> +	return d->plane(plane);						\
> +}
>  #endif /* __ANDROID_CAMERA_BUFFER_H__ */
> diff --git a/src/android/mm/generic_camera_buffer.cpp b/src/android/mm/generic_camera_buffer.cpp
> index ea85be805260..5ea1339bc0ec 100644
> --- a/src/android/mm/generic_camera_buffer.cpp
> +++ b/src/android/mm/generic_camera_buffer.cpp
> @@ -86,35 +86,4 @@ Span<uint8_t> CameraBuffer::Private::plane(unsigned int plane)
>  	return maps_[plane];
>  }
>  
> -CameraBuffer::CameraBuffer(buffer_handle_t camera3Buffer, int flags)
> -	: Extensible(new Private(this, camera3Buffer, flags))
> -{
> -}
> -
> -CameraBuffer::~CameraBuffer()
> -{
> -}
> -
> -bool CameraBuffer::isValid() const
> -{
> -	const Private *const d = LIBCAMERA_D_PTR();
> -	return d->isValid();
> -}
> -
> -unsigned int CameraBuffer::numPlanes() const
> -{
> -	const Private *const d = LIBCAMERA_D_PTR();
> -	return d->numPlanes();
> -}
> -
> -Span<const uint8_t> CameraBuffer::plane(unsigned int plane) const
> -{
> -	const Private *const d = LIBCAMERA_D_PTR();
> -	return d->plane(plane);
> -}
> -
> -Span<uint8_t> CameraBuffer::plane(unsigned int plane)
> -{
> -	Private *const d = LIBCAMERA_D_PTR();
> -	return d->plane(plane);
> -}
> +PUBLIC_CAMERA_BUFFER

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list