From patchwork Mon May 10 17:43:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= X-Patchwork-Id: 12249 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 8A75BBF829 for ; Mon, 10 May 2021 17:43:57 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 07CBA688E5; Mon, 10 May 2021 19:43:57 +0200 (CEST) Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id A3D38602BE for ; Mon, 10 May 2021 19:43:55 +0200 (CEST) Received: from localhost.localdomain (unknown [IPv6:2804:14c:1a9:2978:985c:7892:ebcf:7a90]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: nfraprado) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 190E61F41EF4; Mon, 10 May 2021 18:43:52 +0100 (BST) From: =?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= To: libcamera-devel@lists.libcamera.org Date: Mon, 10 May 2021 14:43:04 -0300 Message-Id: <20210510174304.560185-1-nfraprado@collabora.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH] lc-compliance: Add test to call multiple configure() X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kernel@collabora.com, =?utf-8?q?Andr=C3=A9_Almeida?= Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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 --- This tests multiple generateConfiguration() -> validate() -> configure() sequences, but maybe it would be valuable to test repetitions of each one of those steps in the test? Although I think repeating the whole sequence should already catch any bug, it may be better for lc-compliance to test too much rather than too little. Repeating each step individually would duplicate a bit of code, and require SimpleCapture::config_ to be public, but that may be inevitable if we want to inspect and fiddle with those properties during the tests. Also, this doesn't really check if the last configured role is the one in effect during the capture. Is that even something verifiable? It doesn't seem to be since each pipeline handler decides what each role means. src/lc-compliance/single_stream.cpp | 44 ++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/lc-compliance/single_stream.cpp b/src/lc-compliance/single_stream.cpp index 8318b42f42d6..6f1c259547a7 100644 --- a/src/lc-compliance/single_stream.cpp +++ b/src/lc-compliance/single_stream.cpp @@ -12,6 +12,13 @@ using namespace libcamera; +static const std::vector> roles = { + { "raw", Raw }, + { "still", StillCapture }, + { "video", VideoRecording }, + { "viewfinder", Viewfinder }, +}; + Results::Result testRequestBalance(std::shared_ptr camera, StreamRole role, unsigned int startCycles, unsigned int numRequests) @@ -33,6 +40,25 @@ Results::Result testRequestBalance(std::shared_ptr camera, std::to_string(startCycles) + " start cycles" }; } +Results::Result testMultipleConfigures(std::shared_ptr camera, + StreamRole role, unsigned int numRequests) +{ + Results::Result ret; + + SimpleCaptureBalanced capture(camera); + + for (auto r: roles) { + ret = capture.configure(r.second); + 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, StreamRole role, unsigned int numRequests) { @@ -47,15 +73,9 @@ Results::Result testRequestUnbalance(std::shared_ptr camera, Results testSingleStream(std::shared_ptr camera) { - static const std::vector> roles = { - { "raw", Raw }, - { "still", StillCapture }, - { "video", VideoRecording }, - { "viewfinder", Viewfinder }, - }; static const std::vector 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 +111,16 @@ Results testSingleStream(std::shared_ptr 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;