[libcamera-devel,v3,1/3] cam: fix order camera is operated on

Message ID 20190228185126.32475-2-niklas.soderlund@ragnatech.se
State Accepted
Headers show
Series
  • libcamera: improve validation of camera operations
Related show

Commit Message

Niklas Söderlund Feb. 28, 2019, 6:51 p.m. UTC
Upcoming enforcing of order the camera shall be operate on is not
compatible with the cam utility. Requests shall be queued after the
camera is started, not before.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/cam/main.cpp | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

Patch

diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index 4c2df583fe8e99b7..8df8844c33a2d052 100644
--- a/src/cam/main.cpp
+++ b/src/cam/main.cpp
@@ -133,6 +133,7 @@  static int capture()
 	int ret;
 
 	std::vector<Stream *> streams = camera->streams();
+	std::vector<Request *> requests;
 
 	ret = configureStreams(camera.get(), streams);
 	if (ret < 0) {
@@ -169,21 +170,24 @@  static int capture()
 			goto out;
 		}
 
-		ret = camera->queueRequest(request);
-		if (ret < 0) {
-			std::cerr << "Can't queue request" << std::endl;
-			goto out;
-		}
+		requests.push_back(request);
 	}
 
-	std::cout << "Capture until user interrupts by SIGINT" << std::endl;
-
 	ret = camera->start();
 	if (ret) {
 		std::cout << "Failed to start capture" << std::endl;
 		goto out;
 	}
 
+	for (Request *request : requests) {
+		ret = camera->queueRequest(request);
+		if (ret < 0) {
+			std::cerr << "Can't queue request" << std::endl;
+			goto out;
+		}
+	}
+
+	std::cout << "Capture until user interrupts by SIGINT" << std::endl;
 	ret = loop->exec();
 
 	ret = camera->stop();