[libcamera-devel,v3] lc-compliance: Add test to call multiple configure()
diff mbox series

Message ID 20210524170055.74178-1-nfraprado@collabora.com
State New
Headers show
Series
  • [libcamera-devel,v3] lc-compliance: Add test to call multiple configure()
Related show

Commit Message

Nícolas F. R. A. Prado May 24, 2021, 5 p.m. UTC
Add a test to lc-compliance that calls configure() multiple times on the
camera before starting to capture. This isn't a common pattern for
applications but is allowed and so should be tested by lc-compliance.

Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
---
Changes in v3:
- Thanks to Niklas:
  - Add missing blank line

Changes in v2:
- Thanks to Niklas:
  - Move roles vector inside the configure test

 src/lc-compliance/single_stream.cpp | 33 ++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

Patch
diff mbox series

diff --git a/src/lc-compliance/single_stream.cpp b/src/lc-compliance/single_stream.cpp
index 8318b42f42d6..cdc13461c7de 100644
--- a/src/lc-compliance/single_stream.cpp
+++ b/src/lc-compliance/single_stream.cpp
@@ -33,6 +33,27 @@  Results::Result testRequestBalance(std::shared_ptr<Camera> camera,
 		std::to_string(startCycles) + " start cycles" };
 }
 
+Results::Result testMultipleConfigures(std::shared_ptr<Camera> camera,
+				       StreamRole role, unsigned int numRequests)
+{
+	const std::vector<StreamRole> roles = { Raw, StillCapture, VideoRecording, Viewfinder };
+	Results::Result ret;
+
+	SimpleCaptureBalanced capture(camera);
+
+	for (auto r: roles) {
+		ret = capture.configure(r);
+		if (ret.first == Results::Fail)
+			return ret;
+	}
+
+	ret = capture.configure(role);
+	if (ret.first != Results::Pass)
+		return ret;
+
+	return capture.capture(numRequests);
+}
+
 Results::Result testRequestUnbalance(std::shared_ptr<Camera> camera,
 				     StreamRole role, unsigned int numRequests)
 {
@@ -55,7 +76,7 @@  Results testSingleStream(std::shared_ptr<Camera> camera)
 	};
 	static const std::vector<unsigned int> numRequests = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
 
-	Results results(numRequests.size() * roles.size() * 3);
+	Results results(numRequests.size() * roles.size() * 3 + roles.size());
 
 	for (const auto &role : roles) {
 		std::cout << "= Test role " << role.first << std::endl;
@@ -91,6 +112,16 @@  Results testSingleStream(std::shared_ptr<Camera> camera)
 		std::cout << "* Test unbalanced stop" << std::endl;
 		for (unsigned int num : numRequests)
 			results.add(testRequestUnbalance(camera, role.second, num));
+
+		/*
+		 * Test multiple configure()
+		 *
+		 * Makes sure that the camera supports being configured multiple
+		 * times, with only the last one taking effect, before starting
+		 * to capture.
+		 */
+		std::cout << "* Test multiple configure()" << std::endl;
+		results.add(testMultipleConfigures(camera, role.second, numRequests.back()));
 	}
 
 	return results;