[libcamera-devel] [PATCH v4 4/8] libcamera: pipeline: rkisp1: Add clear() to RkISP1Frames
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Apr 13 23:36:37 CEST 2020
Hi Niklas,
Thank you for the patch.
On Mon, Apr 13, 2020 at 11:26:56PM +0200, Niklas Söderlund wrote:
> When the camera is stopping the helper that keeps track of which buffers
> are associated with a request is not cleared. Add a clear operation and
> call it when the camera is stopped.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index de90615edf217cca..c4e46bea1cc9a47f 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -64,6 +64,7 @@ public:
>
> RkISP1FrameInfo *create(unsigned int frame, Request *request, Stream *stream);
> int destroy(unsigned int frame);
> + void clear();
>
> RkISP1FrameInfo *find(unsigned int frame);
> RkISP1FrameInfo *find(FrameBuffer *buffer);
> @@ -279,6 +280,21 @@ int RkISP1Frames::destroy(unsigned int frame)
> return 0;
> }
>
> +void RkISP1Frames::clear()
> +{
> + auto it = frameInfo_.cbegin();
> + while (it != frameInfo_.cend()) {
> + RkISP1FrameInfo *info = it->second;
> +
> + pipe_->availableParamBuffers_.push(info->paramBuffer);
> + pipe_->availableStatBuffers_.push(info->statBuffer);
> +
> + it = frameInfo_.erase(it);
> +
> + delete info;
> + }
I think you can simplify this:
for (const auto &entry : frameInfo_) {
RkISP1FrameInfo *info = entry.second;
pipe_->availableParamBuffers_.push(info->paramBuffer);
pipe_->availableStatBuffers_.push(info->statBuffer);
delete info;
}
frameInfo_.clear();
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> +}
> +
> RkISP1FrameInfo *RkISP1Frames::find(unsigned int frame)
> {
> auto itInfo = frameInfo_.find(frame);
> @@ -832,6 +848,8 @@ void PipelineHandlerRkISP1::stop(Camera *camera)
>
> data->timeline_.reset();
>
> + data->frameInfo_.clear();
> +
> freeBuffers(camera);
>
> activeCamera_ = nullptr;
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list