[libcamera-devel] [PATCH] libcamera: camera: Simplify create() implementation
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu May 23 10:51:48 CEST 2019
Hi Laurent,
On 23/05/2019 09:10, Laurent Pinchart wrote:
> Hi Jacopo,
>
> On Thu, May 23, 2019 at 09:53:37AM +0200, Jacopo Mondi wrote:
>> Hi Laurent,
>> this looks nicer indeed!
>
> Not just that, but it now compiles :-)
Well we can't argue with that then :-)
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
>> 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
--
Kieran
More information about the libcamera-devel
mailing list