[libcamera-devel] [PATCH v3.1] libcamera: pipeline: ipu3: Cancel unused buffers
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed Mar 24 21:06:24 CET 2021
When the CIO2 returns a cancelled buffer, we will not queue buffers
to the IMGU.
These buffers should be explicitly marked as cancelled to ensure
the application knows there is no valid metadata or frame data
provided in the buffer.
Provide a cancel() method on the FrameBuffer to allow explicitly
cancelling a buffer.
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
include/libcamera/buffer.h | 1 +
src/libcamera/pipeline/ipu3/ipu3.cpp | 7 +++++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h
index 302fe3d3e86b..6557fb1e59b5 100644
--- a/include/libcamera/buffer.h
+++ b/include/libcamera/buffer.h
@@ -49,6 +49,7 @@ public:
Request *request() const { return request_; }
void setRequest(Request *request) { request_ = request; }
const FrameMetadata &metadata() const { return metadata_; }
+ void cancel() { metadata_.status = FrameMetadata::FrameCancelled; }
unsigned int cookie() const { return cookie_; }
void setCookie(unsigned int cookie) { cookie_ = cookie; }
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index fc40dcb381ea..44bd5a9d042b 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -1256,8 +1256,11 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
/* If the buffer is cancelled force a complete of the whole request. */
if (buffer->metadata().status == FrameMetadata::FrameCancelled) {
- for (auto it : request->buffers())
- pipe_->completeBuffer(request, it.second);
+ for (auto it : request->buffers()) {
+ FrameBuffer *b = it.second;
+ b->cancel();
+ pipe_->completeBuffer(request, b);
+ }
frameInfos_.remove(info);
pipe_->completeRequest(request);
--
2.25.1
More information about the libcamera-devel
mailing list