[RFC,v1,34/54] libcamera: pipeline_handler: completeRequest(): Return request count
diff mbox series

Message ID 20260629163017.863145-35-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • libcamera: Split requests and buffers
Related show

Commit Message

Barnabás Pőcze June 29, 2026, 4:29 p.m. UTC
Return the number of requests that were consumed from the head of
the `queuedRequests_` queue. This can be used by pipeline handlers
using the `queuedRequests_` queue for their bookeeing.

Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 include/libcamera/internal/pipeline_handler.h | 2 +-
 src/libcamera/pipeline_handler.cpp            | 9 ++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

Patch
diff mbox series

diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
index d5b8fdb730..5aced40cea 100644
--- a/include/libcamera/internal/pipeline_handler.h
+++ b/include/libcamera/internal/pipeline_handler.h
@@ -70,7 +70,7 @@  public:
 		return request->_d()->completeBuffer(buffer);
 	}
 
-	void completeRequest(Request *request);
+	size_t completeRequest(Request *request);
 	void cancelRequest(Request *request);
 
 	void addBuffer(Camera *camera,
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index ad1174d043..755c78b308 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -636,14 +636,18 @@  void PipelineHandler::doQueueRequests(Camera *camera)
  * without any ordering constraint.
  *
  * \context This function shall be called from the CameraManager thread.
+ *
+ * \return The number of requests that were removed from the head of the queued
+ * requests queue.
  */
-void PipelineHandler::completeRequest(Request *request)
+size_t PipelineHandler::completeRequest(Request *request)
 {
 	Camera *camera = request->_d()->camera();
 
 	request->_d()->complete();
 
 	Camera::Private *data = camera->_d();
+	size_t consumed = 0;
 
 	while (!data->queuedRequests_.empty()) {
 		Request *req = data->queuedRequests_.front();
@@ -653,10 +657,13 @@  void PipelineHandler::completeRequest(Request *request)
 		ASSERT(!req->hasPendingBuffers());
 		data->queuedRequests_.pop_front();
 		camera->requestComplete(req);
+		consumed += 1;
 	}
 
 	/* Allow any waiting requests to be queued to the pipeline. */
 	doQueueRequests(camera);
+
+	return consumed;
 }
 
 /**