summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-04-13 22:56:53 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-04-14 00:28:28 +0200
commite349ec8c6623edfdcf66149d68dc9858c0fa5435 (patch)
tree3b81072b0acc185bbc31f08999c8dc8a2f669152 /src
parentc1f3261679f41d66f593debd920a1b0c00959d1a (diff)
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>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index de90615e..dcc787a8 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,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;