From 4c4a333c8879bde4b499db85e1731f32d3b50287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Tue, 3 Jun 2025 11:11:40 +0200 Subject: [PATCH] apps: lc-compliance: Commit camera configuration last MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Save the result of `Camera::generateConfiguration()` in a local variable, and only commit it to the member variable `config_` if it passes all checks. This removes the need for explicit `config_.reset()` calls in error paths, hence making things simpler. Signed-off-by: Barnabás Pőcze Reviewed-by: Jacopo Mondi Reviewed-by: Stefan Klug --- src/apps/lc-compliance/helpers/capture.cpp | 26 +++++++++------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/apps/lc-compliance/helpers/capture.cpp b/src/apps/lc-compliance/helpers/capture.cpp index dbccc3ff..d83269d4 100644 --- a/src/apps/lc-compliance/helpers/capture.cpp +++ b/src/apps/lc-compliance/helpers/capture.cpp @@ -27,38 +27,34 @@ void Capture::configure(libcamera::Span roles) { assert(!roles.empty()); - config_ = camera_->generateConfiguration(roles); - if (!config_) + auto config = camera_->generateConfiguration(roles); + if (!config) GTEST_SKIP() << "Roles not supported by camera"; - ASSERT_EQ(config_->size(), roles.size()) << "Unexpected number of streams in configuration"; + ASSERT_EQ(config->size(), roles.size()) << "Unexpected number of streams in configuration"; /* * Set the buffers count to the largest value across all streams. * \todo: Should all streams from a Camera have the same buffer count ? */ auto largest = - std::max_element(config_->begin(), config_->end(), + std::max_element(config->begin(), config->end(), [](const StreamConfiguration &l, const StreamConfiguration &r) { return l.bufferCount < r.bufferCount; }); - assert(largest != config_->end()); + assert(largest != config->end()); - for (auto &cfg : *config_) + for (auto &cfg : *config) cfg.bufferCount = largest->bufferCount; - if (config_->validate() != CameraConfiguration::Valid) { - config_.reset(); - FAIL() << "Configuration not valid"; - } + ASSERT_EQ(config->validate(), CameraConfiguration::Valid); - for (const auto &cfg : *config_) + for (const auto &cfg : *config) EXPECT_TRUE(cfg.colorSpace) << "Colorspace not set for " << cfg; - if (camera_->configure(config_.get())) { - config_.reset(); - FAIL() << "Failed to configure camera"; - } + ASSERT_EQ(camera_->configure(config.get()), 0); + + config_ = std::move(config); } void Capture::run(unsigned int captureLimit, std::optional queueLimit)