[libcamera-devel] [RFC v3 1/5] HACK: Camera public destructor

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Dec 9 11:10:09 CET 2021


Quoting Kieran Bingham (2021-12-09 10:05:56)
> Quoting Tomi Valkeinen (2021-12-09 09:29:02)
> > pybind11 needs a public destructor for Camera to be able to manage the
> > shared_ptr. It's not clear why this is needed, and can it be fixed in
> > pybind11.

Ok - so now I thought about it, it's clear why it's needed.
The shared_ptr means that it holds the reference until the 'end' and
therefore might be the cause of calling the destructor, therefore it
needs to be public...

So this really is part of the 'returning a shared_ptr to Camera in the
public API', and should be in the next patch.

Either that, or the Camera just gets returned as a non-shared pointer.
--
Kieran


> > 
> 
> :-( The 'HACK' here seems to be the only thing that would count as a
> blocker to integration.
> 
> I wonder if this is really a HACK or if we just need to explain that the
> destructor needs to be public to support the python bindings, but I
> myself don't understand the reasoning itself.
> 
> Is the python code the only instance where we create a shared_ptr for
> the Camera? If that's true - then perhaps this patch should actually be
> squashed with the one that returns the Camera as a shared_ptr...
> 
> --
> Kieran
> 
> 
> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
> > ---
> >  include/libcamera/camera.h | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h
> > index a7759ccb..88a61ff5 100644
> > --- a/include/libcamera/camera.h
> > +++ b/include/libcamera/camera.h
> > @@ -104,12 +104,12 @@ public:
> >         int start(const ControlList *controls = nullptr);
> >         int stop();
> >  
> > +       ~Camera();
> >  private:
> >         LIBCAMERA_DISABLE_COPY(Camera)
> >  
> >         Camera(std::unique_ptr<Private> d, const std::string &id,
> >                const std::set<Stream *> &streams);
> > -       ~Camera();
> >  
> >         friend class PipelineHandler;
> >         void disconnect();
> > -- 
> > 2.25.1
> >


More information about the libcamera-devel mailing list