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>
This commit is contained in:
Laurent Pinchart 2019-04-29 20:58:34 +03:00
parent 77ae64eb24
commit 75de3bff9e
15 changed files with 184 additions and 126 deletions

View file

@ -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 */