summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2021-05-08 10:45:53 +0200
committerJacopo Mondi <jacopo@jmondi.org>2021-06-14 12:26:27 +0200
commitf461ffb69a85b6df6a8413cb7716e2b89414d64e (patch)
tree093645dd6813f46d0e30013c3e4e4d3e20263177 /src
parentd09838ef3e83abc2ad37752b64c91267d7309d95 (diff)
libcamera: pipeline_handler: Cancel Request on queueing failure
Capture requests are queued by the PipelineHandler base class to each pipeline handler implementation using the virtual queueRequestDevice() function. However, if the pipeline handler fails to queue the request to the hardware, the request gets silently deleted from the list of queued ones, without notifying application of the error. Reporting to applications that a Request has failed to queue by cancelling and then completing it allows applications to maintain their request-tracking mechanism consistent with the one internal to the library. Signed-off-by: Jacopo Mondi <jacopo@jmondi.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/pipeline_handler.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index f41b7a7b..e507a8bb 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -391,6 +391,8 @@ bool PipelineHandler::hasPendingRequests(const Camera *camera) const
* This method queues a capture request to the pipeline handler for processing.
* The request is first added to the internal list of queued requests, and
* then passed to the pipeline handler with a call to queueRequestDevice().
+ * If the pipeline handler fails in queuing the request to the hardware the
+ * request is cancelled.
*
* Keeping track of queued requests ensures automatic completion of all requests
* when the pipeline handler is stopped with stop(). Request completion shall be
@@ -409,8 +411,10 @@ void PipelineHandler::queueRequest(Request *request)
request->sequence_ = data->requestSequence_++;
int ret = queueRequestDevice(camera, request);
- if (ret)
- data->queuedRequests_.remove(request);
+ if (ret) {
+ request->cancel();
+ completeRequest(request);
+ }
}
/**