Refactor the CameraConfiguration structure to not rely on Stream instances. This is a step towards making the camera configuration object more powerful with configuration validation using "try" semantics. The CameraConfiguration now exposes a simple vector-like API to access the contained stream configurations. Both operator[]() and at() are provided to access elements. The isEmpty() method is renamed to empty() and the methods reordered to match the std::vector class. As applications need access to the Stream instances associated with the configuration entries in order to associate buffers with streams when creating requests, expose the stream selected by the pipeline handler through a new StreamConfiguration::stream(). 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>
89 lines
1.9 KiB
C++
89 lines
1.9 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Copyright (C) 2019, Google Inc.
|
|
*
|
|
* libcamera Camera API tests
|
|
*/
|
|
|
|
#include <iostream>
|
|
|
|
#include "camera_test.h"
|
|
|
|
using namespace std;
|
|
|
|
namespace {
|
|
|
|
class ConfigurationSet : public CameraTest
|
|
{
|
|
protected:
|
|
int run()
|
|
{
|
|
CameraConfiguration config =
|
|
camera_->generateConfiguration({ StreamRole::VideoRecording });
|
|
StreamConfiguration *cfg = &config[0];
|
|
|
|
if (!config.isValid()) {
|
|
cout << "Failed to read default configuration" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
if (camera_->acquire()) {
|
|
cout << "Failed to acquire the camera" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
/* Test that setting the default configuration works. */
|
|
if (camera_->configure(config)) {
|
|
cout << "Failed to set default configuration" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
/*
|
|
* Test that configuring the camera fails if it is not
|
|
* acquired, this will also test release and reacquiring
|
|
* of the camera.
|
|
*/
|
|
if (camera_->release()) {
|
|
cout << "Failed to release the camera" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
if (!camera_->configure(config)) {
|
|
cout << "Setting configuration on a camera not acquired succeeded when it should have failed"
|
|
<< endl;
|
|
return TestFail;
|
|
}
|
|
|
|
if (camera_->acquire()) {
|
|
cout << "Failed to acquire the camera" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
/*
|
|
* Test that modifying the default configuration works. Doubling
|
|
* the default configuration of the VIMC camera is known to
|
|
* work.
|
|
*/
|
|
cfg->size.width *= 2;
|
|
cfg->size.height *= 2;
|
|
if (camera_->configure(config)) {
|
|
cout << "Failed to set modified configuration" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
/*
|
|
* Test that setting an invalid configuration fails.
|
|
*/
|
|
cfg->size = { 0, 0 };
|
|
if (!camera_->configure(config)) {
|
|
cout << "Invalid configuration incorrectly accepted" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
return TestPass;
|
|
}
|
|
};
|
|
|
|
} /* namespace */
|
|
|
|
TEST_REGISTER(ConfigurationSet);
|