libcamera: pipeline: rkisp1: Add clear() to RkISP1Frames

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@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Niklas Söderlund
2020-04-13 22:56:53 +02:00
parent c1f3261679
commit e349ec8c66

View File

@@ -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,20 @@ int RkISP1Frames::destroy(unsigned int frame)
return 0;
}
void RkISP1Frames::clear()
{
for (const auto &entry : frameInfo_) {
RkISP1FrameInfo *info = entry.second;
pipe_->availableParamBuffers_.push(info->paramBuffer);
pipe_->availableStatBuffers_.push(info->statBuffer);
delete info;
}
frameInfo_.clear();
}
RkISP1FrameInfo *RkISP1Frames::find(unsigned int frame)
{
auto itInfo = frameInfo_.find(frame);
@@ -832,6 +847,8 @@ void PipelineHandlerRkISP1::stop(Camera *camera)
data->timeline_.reset();
data->frameInfo_.clear();
freeBuffers(camera);
activeCamera_ = nullptr;