From patchwork Fri Dec 22 16:40:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 19338 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 419B3C3293 for ; Fri, 22 Dec 2023 16:40:53 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9C70D62B5C; Fri, 22 Dec 2023 17:40:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1703263252; bh=L1nZBbVzw9eXEQvoRnyKzXlyi4n9eV24kx6uDm1Hymc=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=LbkZJyvGEzQHoNkqhUpLXVpYnCF09kwW6V5kzht/1YcNxFh6sdDjL3oTvhDDyaE8O KfLQatEcqenamcQJypDAneJW9r5LIUxFD3EjMbD0bxwVOVRhI2lnkWEM6sd/U1/CTE RkscV8BE28znovpxPHKqboS0rbMuP6oQEJUanaA9wtpaPbb0TsRL3nJLvo33/jOdCu M4dixDNuOFjvDe75iO8gD0TQfoyUBA54e7tK4X0rAKf3J7UA3NM613n5nb64eEO0a8 DYNdXpPyQzzfN7Fjm7oruveqX9nWdLxgaUwpBfrHVK/oQHKWk2w4utnEPwsDLKa8XP TLf1+ybh7Ar6g== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8318962B31 for ; Fri, 22 Dec 2023 17:40:49 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Yo5aJFu2"; dkim-atps=neutral Received: from localhost.localdomain (93-61-96-190.ip145.fastwebnet.it [93.61.96.190]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 61E8A735; Fri, 22 Dec 2023 17:39:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1703263197; bh=L1nZBbVzw9eXEQvoRnyKzXlyi4n9eV24kx6uDm1Hymc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Yo5aJFu2kubqimf6UbdUnuUynf3waoJM0DgOa0+Vbnogx56TFmegQGpBzCMt54ro2 2EG4eTVsZJt6h4J8G0iCEFHJew5vLTBLNVwcbgjQJOpV4FWTilnpfmJhnv3yUiBvaB mokbzR9rLCxHR3luW9ePLCSs9muW76IRBk2uoHRw= To: libcamera-devel@lists.libcamera.org Date: Fri, 22 Dec 2023 17:40:32 +0100 Message-ID: <20231222164036.649245-2-jacopo.mondi@ideasonboard.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> References: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 1/5] apps: lc-compliance: Fix source file ordering in meson.build 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: , X-Patchwork-Original-From: Jacopo Mondi via libcamera-devel From: Jacopo Mondi Reply-To: Jacopo Mondi Cc: Jacopo Mondi Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Nícolas F. R. A. Prado The capture_test.cpp file was added in the source list of meson in the wrong place. Fix it so the list is alphabetically sorted. Signed-off-by: Nícolas F. R. A. Prado Reviewed-by: Paul Elder Signed-off-by: Paul Elder Reviewed-by: Umang Jain --- src/apps/lc-compliance/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/lc-compliance/meson.build b/src/apps/lc-compliance/meson.build index dd7b73abbcef..2f07a50f171b 100644 --- a/src/apps/lc-compliance/meson.build +++ b/src/apps/lc-compliance/meson.build @@ -11,10 +11,10 @@ endif lc_compliance_enabled = true lc_compliance_sources = files([ + 'capture_test.cpp', 'environment.cpp', 'main.cpp', 'simple_capture.cpp', - 'capture_test.cpp', ]) lc_compliance = executable('lc-compliance', lc_compliance_sources, From patchwork Fri Dec 22 16:40:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 19339 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 BD50DC31E9 for ; Fri, 22 Dec 2023 16:40:54 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D3C0462B31; Fri, 22 Dec 2023 17:40:53 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1703263253; bh=qneqtV9quvOjU67kpSxwhaJzfrt4bucT1eOPM/MgTvQ=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=4LMUBt6QkyVVl6RyDyNt6wB698ueMKXZPP/SBzd0MJXbhMoWy1s1hNtidaGu2qBM/ BSBTQgA1wQv8HeXS+U81vf/5W1XNafJ+ZEI4+lP4ORfbwgueTfi5cV3vXsrlP/E+qz i8L/orxu2IELszwnFSEGmxTVzDbla2YItCtmhK3JljX3sY85xbuJF8AgWX0QFz866O +I3MKRe8Bt5CYSRpkK2EtIg9cic80FNwtEhfwrM/F4TWhZhzOxCN5qSm8zVEVIBJnZ cKMhu0IAJXg04bTYMCPLFVGzaI3hC3Iyh7xk0qPDLPn6sitlKh6iO1FY14jHM+KvPN Xmi7O6DELqjFg== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C117361D8F for ; Fri, 22 Dec 2023 17:40:49 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="wErTc24o"; dkim-atps=neutral Received: from localhost.localdomain (93-61-96-190.ip145.fastwebnet.it [93.61.96.190]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DB645BB2; Fri, 22 Dec 2023 17:39:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1703263198; bh=qneqtV9quvOjU67kpSxwhaJzfrt4bucT1eOPM/MgTvQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wErTc24o8k/zP/1AsOUaAEPpNa5rjqA+LsA+vx6P/PDrWN6Cr7PZlFClO8iVYxahH McUchmxiSP8hYbcpYanf60F9zFDkh6dUs+z4Bq7UkBiZfKIWkogH2MepIRbldCRkov h7a6zvGn44FpWgxI0zmhX8cs7VYLD9gFBJUyKhUE= To: libcamera-devel@lists.libcamera.org Date: Fri, 22 Dec 2023 17:40:33 +0100 Message-ID: <20231222164036.649245-3-jacopo.mondi@ideasonboard.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> References: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/5] apps: lc-compliance: Check that requests complete successfully 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: , X-Patchwork-Original-From: Jacopo Mondi via libcamera-devel From: Jacopo Mondi Reply-To: Jacopo Mondi Cc: Jacopo Mondi Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Nícolas F. R. A. Prado When a request fails to queue it is completed but with its status set to RequestCancelled. Add a check in the requestComplete callback to make sure that the request was completed successfully. For the SimpleCaptureUnbalanced test we need to do this check only if the capture isn't over yet, otherwise the few extra requests that get cancelled at the end, which is the normal behavior, will make the test fail. Signed-off-by: Nícolas F. R. A. Prado Reviewed-by: Paul Elder Signed-off-by: Paul Elder --- src/apps/lc-compliance/simple_capture.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/apps/lc-compliance/simple_capture.cpp b/src/apps/lc-compliance/simple_capture.cpp index cf4d7cf38bc3..e22a339c4e1c 100644 --- a/src/apps/lc-compliance/simple_capture.cpp +++ b/src/apps/lc-compliance/simple_capture.cpp @@ -127,6 +127,9 @@ int SimpleCaptureBalanced::queueRequest(Request *request) void SimpleCaptureBalanced::requestComplete(Request *request) { + EXPECT_EQ(request->status(), Request::Status::RequestComplete) + << "Request didn't complete successfully"; + captureCount_++; if (captureCount_ >= captureLimit_) { loop_->exit(0); @@ -184,6 +187,9 @@ void SimpleCaptureUnbalanced::requestComplete(Request *request) return; } + EXPECT_EQ(request->status(), Request::Status::RequestComplete) + << "Request didn't complete successfully"; + request->reuse(Request::ReuseBuffers); if (camera_->queueRequest(request)) loop_->exit(-EINVAL); From patchwork Fri Dec 22 16:40:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 19340 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 864EEC32BC for ; Fri, 22 Dec 2023 16:40:55 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D11EB62B52; Fri, 22 Dec 2023 17:40:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1703263254; bh=vu7gZLg8v0uJiVSpxU/z38iKxQauEpH3HuZJOWOmcz8=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=rKy3+sPFWIa/KycMWvCg/bZVpqQHnnbkr2h4Bq4CXmW8zrratFiPawXz4nFxO7X0d JqKozzlytaOW2N6nUhjnj8IdnfBGaBk7qucdvrLebJUw0f3g6BR56jkvID9jdYKNl5 AenopcXhQUtkPh6zGwZhsnPyGJt/qJeNsuiO4zcbW5o2dzXKWKXDB9vqUZeJ8ThPxL aQYNodg4W0yUeevwkIThZqm7mvpVsX3GtWUmnBvb5Wys6sDGfXt03B7+mmHpwqiWS0 9nOcAhRnLkIGdFVzetUuY6W15+Jk/A61OkUGqBpaNawl44JKJTr9qhSUdWjqWCXuZg GPw+5bsRiw/1w== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 309AD61D8F for ; Fri, 22 Dec 2023 17:40:50 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="uDAS7iLE"; dkim-atps=neutral Received: from localhost.localdomain (93-61-96-190.ip145.fastwebnet.it [93.61.96.190]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 51EC0250; Fri, 22 Dec 2023 17:39:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1703263198; bh=vu7gZLg8v0uJiVSpxU/z38iKxQauEpH3HuZJOWOmcz8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uDAS7iLEdRTTzRbcdJFg81fFAgqFtYwBFjZeBfOFsDgiq1fmpRDGVKKs3pya0AAeB w31+7vEZhpseHkJHSnF7olJI+rnANEPuvN1FArlxl56IEzIMjPpn1Xoqo3O65FFDs1 LbHNnMdaePBMBeg8pNbChf/KQLNfkpnFtqA7lVCs= To: libcamera-devel@lists.libcamera.org Date: Fri, 22 Dec 2023 17:40:34 +0100 Message-ID: <20231222164036.649245-4-jacopo.mondi@ideasonboard.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> References: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 3/5] apps: lc-compliance: Fix typo in comment 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: , X-Patchwork-Original-From: Jacopo Mondi via libcamera-devel From: Jacopo Mondi Reply-To: Jacopo Mondi Cc: Jacopo Mondi Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Fix a small typo in a comment. Signed-off-by: Jacopo Mondi --- src/apps/lc-compliance/simple_capture.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/lc-compliance/simple_capture.cpp b/src/apps/lc-compliance/simple_capture.cpp index e22a339c4e1c..2d00daf4ea6e 100644 --- a/src/apps/lc-compliance/simple_capture.cpp +++ b/src/apps/lc-compliance/simple_capture.cpp @@ -95,7 +95,7 @@ void SimpleCaptureBalanced::capture(unsigned int numRequests) captureCount_ = 0; captureLimit_ = numRequests; - /* Queue the recommended number of reqeuests. */ + /* Queue the recommended number of requests. */ for (const std::unique_ptr &buffer : buffers) { std::unique_ptr request = camera_->createRequest(); ASSERT_TRUE(request) << "Can't create request"; From patchwork Fri Dec 22 16:40:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 19341 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 1525FC3293 for ; Fri, 22 Dec 2023 16:40:56 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 66A5962B4A; Fri, 22 Dec 2023 17:40:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1703263255; bh=XLurKvfqMIIkkINZM1lthsWeBDFBHs7AKNP/kEdJRwk=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=M7y/hn0C+/k2B6cxGDsAp7oqYzLN6MePj4f6B2iefcRl8rFpF43b/vcE+jWHUjJB8 jnNjlM4qREjATUKubwfoy3DmB471auUI4MDwGx+yRdBsTzU0ptbkcEI/kCFPTTx/ah YLaGops6ZgqlW2eWIT4wiRVxICeNsjrr6+T68lyvhmgqPZwrPG/4ALTxdA/V78ac6S I/JW/jZQjkMP3DMY3PhT2rbplXzHvi4U4cfaO6m26ufFNlWsVC7N99CGcml7IkRw8L rnrk2G33QpxTjY/yJW5ViFprityQrSMi0mf8+/sIOddFWGeApb7Uix4UMwrD/pKPN4 TwU5gh5DAzFvw== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7FC7361D8F for ; Fri, 22 Dec 2023 17:40:50 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="FKb9L0gS"; dkim-atps=neutral Received: from localhost.localdomain (93-61-96-190.ip145.fastwebnet.it [93.61.96.190]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id AFFEA735; Fri, 22 Dec 2023 17:39:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1703263198; bh=XLurKvfqMIIkkINZM1lthsWeBDFBHs7AKNP/kEdJRwk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FKb9L0gSYef0W7vfeeVDm1nUoXNcrxQANpEriFASRCyt1JzuTp/fch6pcfAdu3iTm vAJFXs2gzZoe81hsmju+ABkKlUAufCKbQB33Wr1obCvd5EZ4P7Zj/0bNcRDkfm4TBe LI0bJBdB5J6UazR9BHz8PP6YJ7l+zbIeWqb8tv0M= To: libcamera-devel@lists.libcamera.org Date: Fri, 22 Dec 2023 17:40:35 +0100 Message-ID: <20231222164036.649245-5-jacopo.mondi@ideasonboard.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> References: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 4/5] apps: lc-compliance: Re-organize source directory 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: , X-Patchwork-Original-From: Jacopo Mondi via libcamera-devel From: Jacopo Mondi Reply-To: Jacopo Mondi Cc: Jacopo Mondi Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Before adding more tests and more helper classes to lc-compliance, reorganize the source tree to split test and helpers in two separate directories. While at it, rename the 'SimpleCapture' class and its derived classes to just 'Capture'. Rename the source files accordingly. Re-sort headers inclusions to please checkstyle.py too. Signed-off-by: Jacopo Mondi --- .../capture.cpp} | 38 +++++++++---------- .../{simple_capture.h => helpers/capture.h} | 14 +++---- src/apps/lc-compliance/meson.build | 10 ++++- .../{ => tests}/capture_test.cpp | 9 +++-- 4 files changed, 39 insertions(+), 32 deletions(-) rename src/apps/lc-compliance/{simple_capture.cpp => helpers/capture.cpp} (81%) rename src/apps/lc-compliance/{simple_capture.h => helpers/capture.h} (76%) rename src/apps/lc-compliance/{ => tests}/capture_test.cpp (95%) diff --git a/src/apps/lc-compliance/simple_capture.cpp b/src/apps/lc-compliance/helpers/capture.cpp similarity index 81% rename from src/apps/lc-compliance/simple_capture.cpp rename to src/apps/lc-compliance/helpers/capture.cpp index 2d00daf4ea6e..d3c06f62ca51 100644 --- a/src/apps/lc-compliance/simple_capture.cpp +++ b/src/apps/lc-compliance/helpers/capture.cpp @@ -5,24 +5,24 @@ * simple_capture.cpp - Simple capture helper */ -#include +#include "capture.h" -#include "simple_capture.h" +#include using namespace libcamera; -SimpleCapture::SimpleCapture(std::shared_ptr camera) +Capture::Capture(std::shared_ptr camera) : loop_(nullptr), camera_(camera), allocator_(std::make_unique(camera)) { } -SimpleCapture::~SimpleCapture() +Capture::~Capture() { stop(); } -void SimpleCapture::configure(StreamRole role) +void Capture::configure(StreamRole role) { config_ = camera_->generateConfiguration({ role }); @@ -42,7 +42,7 @@ void SimpleCapture::configure(StreamRole role) } } -void SimpleCapture::start() +void Capture::start() { Stream *stream = config_->at(0).stream(); int count = allocator_->allocate(stream); @@ -50,12 +50,12 @@ void SimpleCapture::start() ASSERT_GE(count, 0) << "Failed to allocate buffers"; EXPECT_EQ(count, config_->at(0).bufferCount) << "Allocated less buffers than expected"; - camera_->requestCompleted.connect(this, &SimpleCapture::requestComplete); + camera_->requestCompleted.connect(this, &Capture::requestComplete); ASSERT_EQ(camera_->start(), 0) << "Failed to start camera"; } -void SimpleCapture::stop() +void Capture::stop() { if (!config_ || !allocator_->allocated()) return; @@ -69,14 +69,14 @@ void SimpleCapture::stop() allocator_->free(stream); } -/* SimpleCaptureBalanced */ +/* CaptureBalanced */ -SimpleCaptureBalanced::SimpleCaptureBalanced(std::shared_ptr camera) - : SimpleCapture(camera) +CaptureBalanced::CaptureBalanced(std::shared_ptr camera) + : Capture(camera) { } -void SimpleCaptureBalanced::capture(unsigned int numRequests) +void CaptureBalanced::capture(unsigned int numRequests) { start(); @@ -116,7 +116,7 @@ void SimpleCaptureBalanced::capture(unsigned int numRequests) ASSERT_EQ(captureCount_, captureLimit_); } -int SimpleCaptureBalanced::queueRequest(Request *request) +int CaptureBalanced::queueRequest(Request *request) { queueCount_++; if (queueCount_ > captureLimit_) @@ -125,7 +125,7 @@ int SimpleCaptureBalanced::queueRequest(Request *request) return camera_->queueRequest(request); } -void SimpleCaptureBalanced::requestComplete(Request *request) +void CaptureBalanced::requestComplete(Request *request) { EXPECT_EQ(request->status(), Request::Status::RequestComplete) << "Request didn't complete successfully"; @@ -141,14 +141,14 @@ void SimpleCaptureBalanced::requestComplete(Request *request) loop_->exit(-EINVAL); } -/* SimpleCaptureUnbalanced */ +/* CaptureUnbalanced */ -SimpleCaptureUnbalanced::SimpleCaptureUnbalanced(std::shared_ptr camera) - : SimpleCapture(camera) +CaptureUnbalanced::CaptureUnbalanced(std::shared_ptr camera) + : Capture(camera) { } -void SimpleCaptureUnbalanced::capture(unsigned int numRequests) +void CaptureUnbalanced::capture(unsigned int numRequests) { start(); @@ -179,7 +179,7 @@ void SimpleCaptureUnbalanced::capture(unsigned int numRequests) ASSERT_EQ(status, 0); } -void SimpleCaptureUnbalanced::requestComplete(Request *request) +void CaptureUnbalanced::requestComplete(Request *request) { captureCount_++; if (captureCount_ >= captureLimit_) { diff --git a/src/apps/lc-compliance/simple_capture.h b/src/apps/lc-compliance/helpers/capture.h similarity index 76% rename from src/apps/lc-compliance/simple_capture.h rename to src/apps/lc-compliance/helpers/capture.h index 2911d6019923..0574ab1c7ac7 100644 --- a/src/apps/lc-compliance/simple_capture.h +++ b/src/apps/lc-compliance/helpers/capture.h @@ -13,14 +13,14 @@ #include "../common/event_loop.h" -class SimpleCapture +class Capture { public: void configure(libcamera::StreamRole role); protected: - SimpleCapture(std::shared_ptr camera); - virtual ~SimpleCapture(); + Capture(std::shared_ptr camera); + virtual ~Capture(); void start(); void stop(); @@ -35,10 +35,10 @@ protected: std::vector> requests_; }; -class SimpleCaptureBalanced : public SimpleCapture +class CaptureBalanced : public Capture { public: - SimpleCaptureBalanced(std::shared_ptr camera); + CaptureBalanced(std::shared_ptr camera); void capture(unsigned int numRequests); @@ -51,10 +51,10 @@ private: unsigned int captureLimit_; }; -class SimpleCaptureUnbalanced : public SimpleCapture +class CaptureUnbalanced : public Capture { public: - SimpleCaptureUnbalanced(std::shared_ptr camera); + CaptureUnbalanced(std::shared_ptr camera); void capture(unsigned int numRequests); diff --git a/src/apps/lc-compliance/meson.build b/src/apps/lc-compliance/meson.build index 2f07a50f171b..ae8c6f4db51b 100644 --- a/src/apps/lc-compliance/meson.build +++ b/src/apps/lc-compliance/meson.build @@ -11,10 +11,15 @@ endif lc_compliance_enabled = true lc_compliance_sources = files([ - 'capture_test.cpp', 'environment.cpp', + 'helpers/capture.cpp', 'main.cpp', - 'simple_capture.cpp', + 'tests/capture_test.cpp', +]) + +lc_compliance_includes = ([ + include_directories('.'), + include_directories('helpers/') ]) lc_compliance = executable('lc-compliance', lc_compliance_sources, @@ -26,5 +31,6 @@ lc_compliance = executable('lc-compliance', lc_compliance_sources, libevent, libgtest, ], + include_directories : lc_compliance_includes, install : true, install_tag : 'bin-devel') diff --git a/src/apps/lc-compliance/capture_test.cpp b/src/apps/lc-compliance/tests/capture_test.cpp similarity index 95% rename from src/apps/lc-compliance/capture_test.cpp rename to src/apps/lc-compliance/tests/capture_test.cpp index 1dcfcf92fc8c..284d36307619 100644 --- a/src/apps/lc-compliance/capture_test.cpp +++ b/src/apps/lc-compliance/tests/capture_test.cpp @@ -6,12 +6,13 @@ * capture_test.cpp - Test camera capture */ +#include "capture.h" + #include #include #include "environment.h" -#include "simple_capture.h" using namespace libcamera; @@ -83,7 +84,7 @@ TEST_P(SingleStream, Capture) { auto [role, numRequests] = GetParam(); - SimpleCaptureBalanced capture(camera_); + CaptureBalanced capture(camera_); capture.configure(role); @@ -102,7 +103,7 @@ TEST_P(SingleStream, CaptureStartStop) auto [role, numRequests] = GetParam(); unsigned int numRepeats = 3; - SimpleCaptureBalanced capture(camera_); + CaptureBalanced capture(camera_); capture.configure(role); @@ -121,7 +122,7 @@ TEST_P(SingleStream, UnbalancedStop) { auto [role, numRequests] = GetParam(); - SimpleCaptureUnbalanced capture(camera_); + CaptureUnbalanced capture(camera_); capture.configure(role); From patchwork Fri Dec 22 16:40:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 19342 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 A8291C32BD for ; Fri, 22 Dec 2023 16:40:56 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id F15BE62B60; Fri, 22 Dec 2023 17:40:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1703263256; bh=k8Mbr2+JgGuhmFwIhLIu3QQyr3B588Uw/2u4g5cSFgE=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=dIgQTc4FlKkQrL/EDK9qE2pPaIg7L7R8Rfld9KFINkJ2viGmIZi4WQAY1g5apxaVC B8gsb1Hsm1sE6TROQerESfxQYarJp/2Zw5FS0xC+BrdYJqZppDMBPJH40gAGcD4Qqi znEn/O7sTAJalmV6E0HEwBl5DNWtcYtpZgWqktq00T9PA+lQHJzT3S9yE3ybupIOHT 4/1XtXyOt2zSphDXuMh5GJJ8RkZETZ2Ip+A/1/IeN3yTR9dnP6J2NlEzLR2XhW7UOS BmuEkPUu6E8P7pVgFsw1thGGi3YRbl3xLaUuDXiMMhgy6D4EK1GclBjiRzf1Fl0ArL H9f7QR98StpBw== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DFF3762B53 for ; Fri, 22 Dec 2023 17:40:50 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="IyJ8DDr8"; dkim-atps=neutral Received: from localhost.localdomain (93-61-96-190.ip145.fastwebnet.it [93.61.96.190]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 1040B250; Fri, 22 Dec 2023 17:39:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1703263199; bh=k8Mbr2+JgGuhmFwIhLIu3QQyr3B588Uw/2u4g5cSFgE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IyJ8DDr8Li3KRr97A7loKd9dp2AI2Bt3aKXJU9E+6b/6PGCBG8w4O3iWGMERXI5g/ UvJ1q+Yr/lQm6yp2UCzOMcLNEHmKl7gY1jEKOB7yxx+88DPeK/6FewDlVIV0Fd3FHa 2Jxou+j7E8wtRAKiOemnNYyizGcUnjfAG4vbMmSg= To: libcamera-devel@lists.libcamera.org Date: Fri, 22 Dec 2023 17:40:36 +0100 Message-ID: <20231222164036.649245-6-jacopo.mondi@ideasonboard.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> References: <20231222164036.649245-1-jacopo.mondi@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 5/5] apps: lc-compliance: Test for mandatory controls 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: , X-Patchwork-Original-From: Jacopo Mondi via libcamera-devel From: Jacopo Mondi Reply-To: Jacopo Mondi Cc: Jacopo Mondi Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Test for mandatory controls and properties to be supported by a Camera. Signed-off-by: Jacopo Mondi --- src/apps/lc-compliance/controls_test.cpp | 98 ++++++++++++++++++++++++ src/apps/lc-compliance/meson.build | 1 + 2 files changed, 99 insertions(+) create mode 100644 src/apps/lc-compliance/controls_test.cpp diff --git a/src/apps/lc-compliance/controls_test.cpp b/src/apps/lc-compliance/controls_test.cpp new file mode 100644 index 000000000000..e9bdf6fdb7e3 --- /dev/null +++ b/src/apps/lc-compliance/controls_test.cpp @@ -0,0 +1,98 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2023, Ideas On Board Oy + * + * controls_test.cpp - Test controls and properties + */ + +#include +#include + +#include +#include +#include + +#include + +#include "environment.h" + +using namespace libcamera; + +std::array controlMaps = { + &controls::controls, + &properties::properties, +}; + +class ControlTest : public testing::TestWithParam +{ +public: + static std::string nameParameters(const testing::TestParamInfo &info); + +protected: + void SetUp() override; + void TearDown() override; + + std::shared_ptr camera_; +}; + +void ControlTest::SetUp() +{ + Environment *env = Environment::get(); + + camera_ = env->cm()->get(env->cameraId()); + + ASSERT_EQ(camera_->acquire(), 0); +} + +void ControlTest::TearDown() +{ + if (!camera_) + return; + + camera_->release(); + camera_.reset(); +} + +std::string ControlTest::nameParameters(const testing::TestParamInfo &info) +{ + const ControlIdMap *idMap = info.param; + if (idMap == &controls::controls) + return "controls"; + else if (idMap == &properties::properties) + return "properties"; + + return "vendor"; +} + +/* Test that mandatory controls and properties are supported by a camera. */ +TEST_P(ControlTest, RequiredControls) +{ + auto controlMap = GetParam(); + + for (const auto &[id, ctrl] : *controlMap) { + if (!ctrl->required()) + continue; + + if (controlMap == &controls::controls) { + const auto it = camera_->controls().find(ctrl); + + if (it == camera_->controls().end()) + FAIL() << "Mandatory control \"" << ctrl->name() + << "\" not supported" << std::endl; + } else if (controlMap == &properties::properties) { + bool found = camera_->properties().contains(id); + + if (!found) + FAIL() << "Mandatory property \"" << ctrl->name() + << "\" not supported" << std::endl; + } + } +} + +/* + * Use a Value-Parametrized Test case so that vendors can easily test vendor + * control lists by expading 'controlMaps'. + */ +INSTANTIATE_TEST_SUITE_P(ControlsTest, ControlTest, + testing::ValuesIn(controlMaps), + ControlTest::nameParameters); diff --git a/src/apps/lc-compliance/meson.build b/src/apps/lc-compliance/meson.build index ae8c6f4db51b..c927dd12e9f4 100644 --- a/src/apps/lc-compliance/meson.build +++ b/src/apps/lc-compliance/meson.build @@ -15,6 +15,7 @@ lc_compliance_sources = files([ 'helpers/capture.cpp', 'main.cpp', 'tests/capture_test.cpp', + 'tests/controls_test.cpp' ]) lc_compliance_includes = ([