libcamera: pipeline: ipu3: Cancel unused buffers
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. Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
0abed64843
commit
883334135b
3 changed files with 15 additions and 2 deletions
|
@ -53,6 +53,8 @@ public:
|
|||
unsigned int cookie() const { return cookie_; }
|
||||
void setCookie(unsigned int cookie) { cookie_ = cookie; }
|
||||
|
||||
void cancel() { metadata_.status = FrameMetadata::FrameCancelled; }
|
||||
|
||||
private:
|
||||
LIBCAMERA_DISABLE_COPY_AND_MOVE(FrameBuffer)
|
||||
|
||||
|
|
|
@ -226,6 +226,14 @@ FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
|
|||
* core never modifies the buffer cookie.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn FrameBuffer::cancel()
|
||||
* \brief Marks the buffer as cancelled
|
||||
*
|
||||
* If a buffer is not used by a request, it shall be marked as cancelled to
|
||||
* indicate that the metadata is invalid.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \class MappedBuffer
|
||||
* \brief Provide an interface to support managing memory mapped buffers
|
||||
|
|
|
@ -1257,8 +1257,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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue