[RFC PATCH 2/4] libcamera: internal: Allow to limit the number of queued requests

Stefan Klug stefan.klug at ideasonboard.com
Mon May 26 23:42:16 CEST 2025


Allow pipeline handler classes to limit the maximum number of requests that
get queued using queueRequestDevice().

Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
---
 include/libcamera/internal/pipeline_handler.h | 5 +++++
 src/libcamera/pipeline_handler.cpp            | 3 +++
 2 files changed, 8 insertions(+)

diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
index dedc29e815fb..86b86d5971dc 100644
--- a/include/libcamera/internal/pipeline_handler.h
+++ b/include/libcamera/internal/pipeline_handler.h
@@ -79,6 +79,11 @@ protected:
 	virtual bool acquireDevice(Camera *camera);
 	virtual void releaseDevice(Camera *camera);
 
+	virtual unsigned int maxQueuedRequestsDevice() const
+	{
+		return std::numeric_limits<unsigned int>::max();
+	}
+
 	CameraManager *manager_;
 
 private:
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 14d8602e67d8..1853bca71371 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -490,6 +490,9 @@ void PipelineHandler::doQueueRequests()
 
 		Camera::Private *data = camera->_d();
 		while (!data->waitingRequests_.empty()) {
+			if (data->queuedRequests_.size() == maxQueuedRequestsDevice())
+				break;
+
 			Request *request = data->waitingRequests_.front();
 			if (!request->_d()->prepared_)
 				break;
-- 
2.43.0



More information about the libcamera-devel mailing list