diff options
author | Jacopo Mondi <jacopo@jmondi.org> | 2021-05-08 10:41:02 +0200 |
---|---|---|
committer | Jacopo Mondi <jacopo@jmondi.org> | 2021-06-14 12:26:27 +0200 |
commit | d09838ef3e83abc2ad37752b64c91267d7309d95 (patch) | |
tree | 8a42cc70b34030d1e9ddda0ff99b12b2266ff56d /src | |
parent | a86d281e52c772c4d40c6b9578c1eec8de8c5ca2 (diff) |
libcamera: request: Add Request::cancel()
Add a cancel() function to the Request class that allows to forcefully
complete the request and its associated buffers in error state.
Only pending requests can be forcefully cancelled. Enforce that
by asserting the request state to be RequestPending.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-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/request.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp index ce2dd7b1..6611e74d 100644 --- a/src/libcamera/request.cpp +++ b/src/libcamera/request.cpp @@ -293,6 +293,29 @@ void Request::complete() } /** + * \brief Cancel a queued request + * + * Mark the request and its associated buffers as cancelled and complete it. + * + * Set each pending buffer in error state and emit the buffer completion signal + * before completing the Request. + */ +void Request::cancel() +{ + LIBCAMERA_TRACEPOINT(request_cancel, this); + + ASSERT(status_ == RequestPending); + + for (FrameBuffer *buffer : pending_) { + buffer->cancel(); + camera_->bufferCompleted.emit(this, buffer); + } + + pending_.clear(); + cancelled_ = true; +} + +/** * \brief Complete a buffer for the request * \param[in] buffer The buffer that has completed * |