summaryrefslogtreecommitdiff
path: root/test/camera
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-04-29 20:58:34 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-05-23 01:07:21 +0300
commit75de3bff9e165e512be5f53e19f31c7388dc08b1 (patch)
treebc91c3263a613fc492820af4d753147e971df65d /test/camera
parent77ae64eb24bf6c2fe241b6f7b841315b1ee15707 (diff)
libcamera: camera: Return a pointer from generateConfiguration()
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 <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Diffstat (limited to 'test/camera')
-rw-r--r--test/camera/capture.cpp32
-rw-r--r--test/camera/configuration_default.cpp8
-rw-r--r--test/camera/configuration_set.cpp38
-rw-r--r--test/camera/statemachine.cpp30
4 files changed, 74 insertions, 34 deletions
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<Request *> 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<CameraConfiguration> 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<CameraConfiguration> 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<CameraConfiguration> 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<CameraConfiguration> defconf_;
};
} /* namespace */