[libcamera-devel] [PATCH 2/3] libcamera: Request: Add an error value
Hirokazu Honda
hiroh at chromium.org
Mon Mar 29 02:27:14 CEST 2021
libcamera::Request returned by Camera::requestComplete() is
always assumed. Therefore, an error occurred in
PipelineHandler::queueRequest() is ignored.
This adds an error value, which is zero on success, to
libcamera::Request() so that a Camera client can know the request
error in completing request.
Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
---
include/libcamera/request.h | 2 ++
src/libcamera/pipeline_handler.cpp | 6 ++++--
src/libcamera/request.cpp | 21 ++++++++++++++++-----
3 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/include/libcamera/request.h b/include/libcamera/request.h
index 6e5aad5f..60e91d5f 100644
--- a/include/libcamera/request.h
+++ b/include/libcamera/request.h
@@ -52,6 +52,7 @@ public:
uint64_t cookie() const { return cookie_; }
Status status() const { return status_; }
+ int result() const { return result_; }
bool hasPendingBuffers() const { return !pending_.empty(); }
@@ -73,6 +74,7 @@ private:
const uint64_t cookie_;
Status status_;
+ int result_;
bool cancelled_;
};
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 05b807d6..a9a5523b 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -383,8 +383,10 @@ void PipelineHandler::queueRequest(Request *request)
data->queuedRequests_.push_back(request);
int ret = queueRequestDevice(camera, request);
- if (ret)
- data->queuedRequests_.remove(request);
+ if (ret) {
+ request->result_ = ret;
+ completeRequest(request);
+ }
}
/**
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index 0071667e..8106437e 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -72,7 +72,7 @@ LOG_DEFINE_CATEGORY(Request)
*
*/
Request::Request(Camera *camera, uint64_t cookie)
- : camera_(camera), cookie_(cookie), status_(RequestPending),
+ : camera_(camera), cookie_(cookie), status_(RequestPending), result_(0),
cancelled_(false)
{
/**
@@ -236,15 +236,26 @@ FrameBuffer *Request::findBuffer(const Stream *stream) const
* \fn Request::status()
* \brief Retrieve the request completion status
*
- * The request status indicates whether the request has completed successfully
- * or with an error. When requests are created and before they complete the
- * request status is set to RequestPending, and is updated at completion time
- * to RequestComplete. If a request is cancelled at capture stop before it has
+ * The request status indicates whether the request has pended, completed or
+ * cancelled.. When requests are created and before they complete the request
+ * status is set to RequestPending, and is updated at completion time to
+ * RequestComplete. If a request is cancelled at capture stop before it has
* completed, its status is set to RequestCancelled.
*
* \return The request completion status
*/
+/**
+ * \fn Request::result()
+ * \brief Retrieve the error value of the request .
+ *
+ * The request error indicates whether the request has completed successfully or
+ * with an error. It is a negative value if an error happens in queueing and
+ * processing the request, or 0 on success.
+ *
+ * \return The request error value.
+ */
+
/**
* \fn Request::hasPendingBuffers()
* \brief Check if a request has buffers yet to be completed
--
2.31.0.291.g576ba9dcdaf-goog
More information about the libcamera-devel
mailing list