[libcamera-devel] [PATCH] libcamera: camera: Simplify create() implementation

Jacopo Mondi jacopo at jmondi.org
Thu May 23 09:53:37 CEST 2019


Hi Laurent,
   this looks nicer indeed!

Thanks
   j

On Thu, May 23, 2019 at 01:12:37AM +0300, Laurent Pinchart wrote:
> Now that the Camera class inherits from std::enable_shared_from_this, we
> don't need to use std::allocate_shared anymore and can simplify the
> Camera::create() implementation. This fixes compilation with recent
> versions of libc++ whose std::allocate_shared implementation isn't
> compatible with classes that are not publicly constructible.
>
> The custom allocator is removed, but a custom deleter is needed as the
> Camera destructor is private.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
>  src/libcamera/camera.cpp | 17 +++++------------
>  1 file changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
> index 0f45ab7e4358..617ea99cdf71 100644
> --- a/src/libcamera/camera.cpp
> +++ b/src/libcamera/camera.cpp
> @@ -358,24 +358,17 @@ std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,
>  				       const std::string &name,
>  				       const std::set<Stream *> &streams)
>  {
> -	struct Allocator : std::allocator<Camera> {
> -		void construct(void *p, PipelineHandler *pipe,
> -			       const std::string &name)
> +	struct Deleter : std::default_delete<Camera> {
> +		void operator()(Camera *camera)
>  		{
> -			::new(p) Camera(pipe, name);
> -		}
> -		void destroy(Camera *p)
> -		{
> -			p->~Camera();
> +			delete camera;
>  		}
>  	};
>
> -	std::shared_ptr<Camera> camera =
> -		std::allocate_shared<Camera>(Allocator(), pipe, name);
> -
> +	Camera *camera = new Camera(pipe, name);
>  	camera->streams_ = streams;
>
> -	return camera;
> +	return std::shared_ptr<Camera>(camera, Deleter());
>  }
>
>  /**
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20190523/93809773/attachment.sig>


More information about the libcamera-devel mailing list