[libcamera-devel] [PATCH 1/2] libcamera: Add a PipelineHandler::releaseDevice method
Naushir Patuck
naush at raspberrypi.com
Fri Nov 11 15:20:54 CET 2022
Hi David,
Thank you for fixing this.
On Fri, 11 Nov 2022 at 13:30, David Plowman via libcamera-devel <
libcamera-devel at lists.libcamera.org> wrote:
> This notifies pipeline handlers when a camera is released, in case
> they want to free any resources or memory buffers.
>
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
>
Reviewed-by: Naushir Patuck <naush at raspberrypi.com>
> ---
> include/libcamera/internal/pipeline_handler.h | 4 +++-
> src/libcamera/camera.cpp | 2 +-
> src/libcamera/pipeline_handler.cpp | 16 +++++++++++++++-
> 3 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/include/libcamera/internal/pipeline_handler.h
> b/include/libcamera/internal/pipeline_handler.h
> index 96aab9d6..ec4f662d 100644
> --- a/include/libcamera/internal/pipeline_handler.h
> +++ b/include/libcamera/internal/pipeline_handler.h
> @@ -46,7 +46,7 @@ public:
> const DeviceMatch &dm);
>
> bool acquire();
> - void release();
> + void release(Camera *camera);
>
> virtual std::unique_ptr<CameraConfiguration>
> generateConfiguration(Camera *camera,
> const StreamRoles &roles) = 0;
> @@ -74,6 +74,8 @@ protected:
> virtual int queueRequestDevice(Camera *camera, Request *request) =
> 0;
> virtual void stopDevice(Camera *camera) = 0;
>
> + virtual void releaseDevice(Camera *camera);
> +
> CameraManager *manager_;
>
> private:
> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
> index c4f65c1a..2d947a44 100644
> --- a/src/libcamera/camera.cpp
> +++ b/src/libcamera/camera.cpp
> @@ -870,7 +870,7 @@ int Camera::release()
> return ret == -EACCES ? -EBUSY : ret;
>
> if (d->isAcquired())
> - d->pipe_->release();
> + d->pipe_->release(this);
>
> d->setState(Private::CameraAvailable);
>
> diff --git a/src/libcamera/pipeline_handler.cpp
> b/src/libcamera/pipeline_handler.cpp
> index 825aff5a..cfade490 100644
> --- a/src/libcamera/pipeline_handler.cpp
> +++ b/src/libcamera/pipeline_handler.cpp
> @@ -183,6 +183,7 @@ bool PipelineHandler::acquire()
>
> /**
> * \brief Release exclusive access to the pipeline handler
> + * \param[in] camera The camera for which to release data
> *
> * This function releases access to the pipeline handler previously
> acquired by
> * a call to acquire(). Every release() call shall match a previous
> successful
> @@ -196,7 +197,7 @@ bool PipelineHandler::acquire()
> *
> * \sa acquire()
> */
> -void PipelineHandler::release()
> +void PipelineHandler::release(Camera *camera)
> {
> MutexLocker locker(lock_);
>
> @@ -204,9 +205,22 @@ void PipelineHandler::release()
>
> unlockMediaDevices();
>
> + releaseDevice(camera);
> +
> --useCount_;
> }
>
> +/**
> + * \brief Release resources associated with this camera
> + * \param[in] camera The camera for which to release resources
> + *
> + * Pipeline handlers may override this in order to perform cleanup
> operations
> + * when a camera is released, such as freeing memory.
> + */
> +void PipelineHandler::releaseDevice([[maybe_unused]] Camera *camera)
> +{
> +}
> +
> void PipelineHandler::unlockMediaDevices()
> {
> for (std::shared_ptr<MediaDevice> &media : mediaDevices_)
> --
> 2.30.2
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20221111/87d25859/attachment.htm>
More information about the libcamera-devel
mailing list