[libcamera-devel] [PATCH] cam: Fail capture if to few Requests asked for

Niklas Söderlund niklas.soderlund at ragnatech.se
Mon Feb 8 10:44:16 CET 2021


Running cam with the --capture=N option only queues N Requests to the
camera. If N is less then the number of requests needed by the camera to
operate cam may deadlock waiting for the camera to complete requests
while the camera waits for the application to give it more buffers.

Fix this by adding a check in cam to no attempt a capture session if to
few requests are requested.

Reported-by: Sebastian Fricke <sebastian.fricke at posteo.net>
Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
 src/cam/capture.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index 7b55fc6770225e2a..18aa97c7cdb55dcc 100644
--- a/src/cam/capture.cpp
+++ b/src/cam/capture.cpp
@@ -90,6 +90,13 @@ int Capture::capture(FrameBufferAllocator *allocator)
 		nbuffers = std::min(nbuffers, allocated);
 	}
 
+	if (captureLimit_ && captureLimit_ < nbuffers) {
+		std::cerr << "Camera requiers at least " << nbuffers
+			  << " reqests to function, " << captureLimit_
+			  << " requested" << std::endl;
+		return -EINVAL;
+	}
+
 	/*
 	 * TODO: make cam tool smarter to support still capture by for
 	 * example pushing a button. For now run all streams all the time.
-- 
2.30.0



More information about the libcamera-devel mailing list