From 75de3bff9e165e512be5f53e19f31c7388dc08b1 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 29 Apr 2019 20:58:34 +0300 Subject: libcamera: camera: Return a pointer from generateConfiguration() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To prepare for specialising the CameraConfiguration class in pipeline handlers, return a pointer to a camera configuration instead of a reference from Camera::generateConfiguration(). The camera configuration always needs to be allocated from the pipeline handler, and its ownership is passed to the application. For symmetry, change Camera::configure() to take a CameraConfiguration pointer instead of a reference. This aligns with our coding practice of passing parameters that are modified by the callee by pointer. Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund Reviewed-by: Jacopo Mondi --- test/camera/capture.cpp | 32 ++++++++++++++++++++--------- test/camera/configuration_default.cpp | 8 ++++---- test/camera/configuration_set.cpp | 38 ++++++++++++++++++++++++----------- test/camera/statemachine.cpp | 30 ++++++++++++++++++--------- 4 files changed, 74 insertions(+), 34 deletions(-) (limited to 'test') diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp index bfd11eef..bb7d380c 100644 --- a/test/camera/capture.cpp +++ b/test/camera/capture.cpp @@ -40,13 +40,25 @@ protected: camera_->queueRequest(request); } - int run() + int init() override { - CameraConfiguration config = - camera_->generateConfiguration({ StreamRole::VideoRecording }); - StreamConfiguration *cfg = &config[0]; + CameraTest::init(); - if (!config.isValid()) { + config_ = camera_->generateConfiguration({ StreamRole::VideoRecording }); + if (!config_) { + cout << "Failed to generate default configuration" << endl; + CameraTest::cleanup(); + return TestFail; + } + + return TestPass; + } + + int run() override + { + StreamConfiguration &cfg = config_->at(0); + + if (!config_->isValid()) { cout << "Failed to read default configuration" << endl; return TestFail; } @@ -56,7 +68,7 @@ protected: return TestFail; } - if (camera_->configure(config)) { + if (camera_->configure(config_.get())) { cout << "Failed to set default configuration" << endl; return TestFail; } @@ -66,7 +78,7 @@ protected: return TestFail; } - Stream *stream = cfg->stream(); + Stream *stream = cfg.stream(); BufferPool &pool = stream->bufferPool(); std::vector requests; for (Buffer &buffer : pool.buffers()) { @@ -110,10 +122,10 @@ protected: while (timer.isRunning()) dispatcher->processEvents(); - if (completeRequestsCount_ <= cfg->bufferCount * 2) { + if (completeRequestsCount_ <= cfg.bufferCount * 2) { cout << "Failed to capture enough frames (got " << completeRequestsCount_ << " expected at least " - << cfg->bufferCount * 2 << ")" << endl; + << cfg.bufferCount * 2 << ")" << endl; return TestFail; } @@ -134,6 +146,8 @@ protected: return TestPass; } + + std::unique_ptr config_; }; } /* namespace */ diff --git a/test/camera/configuration_default.cpp b/test/camera/configuration_default.cpp index 8c4a03db..8a767d23 100644 --- a/test/camera/configuration_default.cpp +++ b/test/camera/configuration_default.cpp @@ -18,21 +18,21 @@ class ConfigurationDefault : public CameraTest protected: int run() { - CameraConfiguration config; + std::unique_ptr config; /* Test asking for configuration for a video stream. */ config = camera_->generateConfiguration({ StreamRole::VideoRecording }); - if (!config.isValid()) { + if (!config || !config->isValid()) { cout << "Default configuration invalid" << endl; return TestFail; } /* * Test that asking for configuration for an empty array of - * stream roles returns an empty list of configurations. + * stream roles returns an empty camera configuration. */ config = camera_->generateConfiguration({}); - if (config.isValid()) { + if (!config || config->isValid()) { cout << "Failed to retrieve configuration for empty roles list" << endl; return TestFail; diff --git a/test/camera/configuration_set.cpp b/test/camera/configuration_set.cpp index 25b5db67..ece987c7 100644 --- a/test/camera/configuration_set.cpp +++ b/test/camera/configuration_set.cpp @@ -16,13 +16,25 @@ namespace { class ConfigurationSet : public CameraTest { protected: - int run() + int init() override { - CameraConfiguration config = - camera_->generateConfiguration({ StreamRole::VideoRecording }); - StreamConfiguration *cfg = &config[0]; + CameraTest::init(); - if (!config.isValid()) { + config_ = camera_->generateConfiguration({ StreamRole::VideoRecording }); + if (!config_) { + cout << "Failed to generate default configuration" << endl; + CameraTest::cleanup(); + return TestFail; + } + + return TestPass; + } + + int run() override + { + StreamConfiguration &cfg = config_->at(0); + + if (!config_->isValid()) { cout << "Failed to read default configuration" << endl; return TestFail; } @@ -33,7 +45,7 @@ protected: } /* Test that setting the default configuration works. */ - if (camera_->configure(config)) { + if (camera_->configure(config_.get())) { cout << "Failed to set default configuration" << endl; return TestFail; } @@ -48,7 +60,7 @@ protected: return TestFail; } - if (!camera_->configure(config)) { + if (!camera_->configure(config_.get())) { cout << "Setting configuration on a camera not acquired succeeded when it should have failed" << endl; return TestFail; @@ -64,9 +76,9 @@ protected: * the default configuration of the VIMC camera is known to * work. */ - cfg->size.width *= 2; - cfg->size.height *= 2; - if (camera_->configure(config)) { + cfg.size.width *= 2; + cfg.size.height *= 2; + if (camera_->configure(config_.get())) { cout << "Failed to set modified configuration" << endl; return TestFail; } @@ -74,14 +86,16 @@ protected: /* * Test that setting an invalid configuration fails. */ - cfg->size = { 0, 0 }; - if (!camera_->configure(config)) { + cfg.size = { 0, 0 }; + if (!camera_->configure(config_.get())) { cout << "Invalid configuration incorrectly accepted" << endl; return TestFail; } return TestPass; } + + std::unique_ptr config_; }; } /* namespace */ diff --git a/test/camera/statemachine.cpp b/test/camera/statemachine.cpp index 7a74cd85..d489f197 100644 --- a/test/camera/statemachine.cpp +++ b/test/camera/statemachine.cpp @@ -19,7 +19,7 @@ protected: int testAvailable() { /* Test operations which should fail. */ - if (camera_->configure(defconf_) != -EACCES) + if (camera_->configure(defconf_.get()) != -EACCES) return TestFail; if (camera_->allocateBuffers() != -EACCES) @@ -84,7 +84,7 @@ protected: if (camera_->acquire()) return TestFail; - if (camera_->configure(defconf_)) + if (camera_->configure(defconf_.get())) return TestFail; return TestPass; @@ -113,7 +113,7 @@ protected: return TestFail; /* Test operations which should pass. */ - if (camera_->configure(defconf_)) + if (camera_->configure(defconf_.get())) return TestFail; /* Test valid state transitions, end in Prepared state. */ @@ -123,7 +123,7 @@ protected: if (camera_->acquire()) return TestFail; - if (camera_->configure(defconf_)) + if (camera_->configure(defconf_.get())) return TestFail; if (camera_->allocateBuffers()) @@ -141,7 +141,7 @@ protected: if (camera_->release() != -EBUSY) return TestFail; - if (camera_->configure(defconf_) != -EACCES) + if (camera_->configure(defconf_.get()) != -EACCES) return TestFail; if (camera_->allocateBuffers() != -EACCES) @@ -172,7 +172,7 @@ protected: if (camera_->acquire()) return TestFail; - if (camera_->configure(defconf_)) + if (camera_->configure(defconf_.get())) return TestFail; if (camera_->allocateBuffers()) @@ -193,7 +193,7 @@ protected: if (camera_->release() != -EBUSY) return TestFail; - if (camera_->configure(defconf_) != -EACCES) + if (camera_->configure(defconf_.get()) != -EACCES) return TestFail; if (camera_->allocateBuffers() != -EACCES) @@ -233,10 +233,22 @@ protected: return TestPass; } - int run() + int init() override { + CameraTest::init(); + defconf_ = camera_->generateConfiguration({ StreamRole::VideoRecording }); + if (!defconf_) { + cout << "Failed to generate default configuration" << endl; + CameraTest::cleanup(); + return TestFail; + } + return TestPass; + } + + int run() override + { if (testAvailable() != TestPass) { cout << "State machine in Available state failed" << endl; return TestFail; @@ -265,7 +277,7 @@ protected: return TestPass; } - CameraConfiguration defconf_; + std::unique_ptr defconf_; }; } /* namespace */ -- cgit v1.2.1