summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/camera.h3
-rw-r--r--src/cam/main.cpp3
-rw-r--r--src/libcamera/camera.cpp30
-rw-r--r--src/libcamera/include/pipeline_handler.h2
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp4
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp6
-rw-r--r--src/libcamera/pipeline/vimc.cpp6
-rw-r--r--src/libcamera/pipeline_handler.cpp10
-rw-r--r--src/qcam/main_window.cpp5
-rw-r--r--test/camera/capture.cpp5
-rw-r--r--test/camera/configuration_default.cpp17
-rw-r--r--test/camera/configuration_set.cpp3
-rw-r--r--test/camera/statemachine.cpp4
13 files changed, 37 insertions, 61 deletions
diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h
index 77e4cd1e..0386671c 100644
--- a/include/libcamera/camera.h
+++ b/include/libcamera/camera.h
@@ -22,6 +22,7 @@ class PipelineHandler;
class Request;
class Stream;
class StreamConfiguration;
+class StreamUsage;
class Camera final
{
@@ -44,7 +45,7 @@ public:
const std::set<Stream *> &streams() const;
std::map<Stream *, StreamConfiguration>
- streamConfiguration(std::set<Stream *> &streams);
+ streamConfiguration(const std::vector<StreamUsage> &usage);
int configureStreams(std::map<Stream *, StreamConfiguration> &config);
int allocateBuffers();
diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index b5895fae..d45ffd37 100644
--- a/src/cam/main.cpp
+++ b/src/cam/main.cpp
@@ -80,8 +80,7 @@ static int parseOptions(int argc, char *argv[])
static int prepareCameraConfig(std::map<Stream *, StreamConfiguration> *config)
{
- std::set<Stream *> streams = camera->streams();
- *config = camera->streamConfiguration(streams);
+ *config = camera->streamConfiguration({ Stream::VideoRecording() });
Stream *stream = config->begin()->first;
if (options.isSet(OptFormat)) {
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index 8ee9cc08..63fde0ff 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -345,33 +345,23 @@ const std::set<Stream *> &Camera::streams() const
}
/**
- * \brief Retrieve a group of stream configurations
- * \param[in] streams A map of stream IDs and configurations to setup
+ * \brief Retrieve a group of stream configurations according to stream usages
+ * \param[in] usages A list of stream usages
*
- * Retrieve the camera's configuration for a specified group of streams. The
- * caller can specifies which of the camera's streams to retrieve configuration
- * from by populating \a streams.
+ * Retrieve configuration for a set of desired usages. The caller specifies a
+ * list of stream usages and the camera returns a map of suitable streams and
+ * their suggested default configurations.
*
- * The easiest way to populate the array of streams to fetch configuration from
- * is to first retrieve the camera's full array of stream with streams() and
- * then potentially trim it down to only contain the streams the caller
- * are interested in.
- *
- * \return A map of successfully retrieved stream IDs and configurations or an
- * empty list on error.
+ * \return A map of streams to configurations if the requested usages can be
+ * satisfied, or an empty map otherwise
*/
std::map<Stream *, StreamConfiguration>
-Camera::streamConfiguration(std::set<Stream *> &streams)
+Camera::streamConfiguration(const std::vector<StreamUsage> &usages)
{
- if (disconnected_ || !streams.size())
+ if (disconnected_ || !usages.size() || usages.size() > streams_.size())
return std::map<Stream *, StreamConfiguration>{};
- for (Stream *stream : streams) {
- if (streams_.find(stream) == streams_.end())
- return std::map<Stream *, StreamConfiguration>{};
- }
-
- return pipe_->streamConfiguration(this, streams);
+ return pipe_->streamConfiguration(this, usages);
}
/**
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index acb376e0..8a1706fa 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -53,7 +53,7 @@ public:
virtual bool match(DeviceEnumerator *enumerator) = 0;
virtual std::map<Stream *, StreamConfiguration>
- streamConfiguration(Camera *camera, std::set<Stream *> &streams) = 0;
+ streamConfiguration(Camera *camera, const std::vector<StreamUsage> &usages) = 0;
virtual int configureStreams(Camera *camera,
std::map<Stream *, StreamConfiguration> &config) = 0;
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index fed04ce5..5d01504e 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -141,7 +141,7 @@ public:
std::map<Stream *, StreamConfiguration>
streamConfiguration(Camera *camera,
- std::set<Stream *> &streams) override;
+ const std::vector<StreamUsage> &usages) override;
int configureStreams(Camera *camera,
std::map<Stream *, StreamConfiguration> &config) override;
@@ -206,7 +206,7 @@ PipelineHandlerIPU3::~PipelineHandlerIPU3()
std::map<Stream *, StreamConfiguration>
PipelineHandlerIPU3::streamConfiguration(Camera *camera,
- std::set<Stream *> &streams)
+ const std::vector<StreamUsage> &usages)
{
std::map<Stream *, StreamConfiguration> configs;
IPU3CameraData *data = cameraData(camera);
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index cc3e0cd9..dfff7116 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -28,7 +28,7 @@ public:
std::map<Stream *, StreamConfiguration>
streamConfiguration(Camera *camera,
- std::set<Stream *> &streams) override;
+ const std::vector<StreamUsage> &usages) override;
int configureStreams(Camera *camera,
std::map<Stream *, StreamConfiguration> &config) override;
@@ -84,14 +84,12 @@ PipelineHandlerUVC::~PipelineHandlerUVC()
std::map<Stream *, StreamConfiguration>
PipelineHandlerUVC::streamConfiguration(Camera *camera,
- std::set<Stream *> &streams)
+ const std::vector<StreamUsage> &usages)
{
UVCCameraData *data = cameraData(camera);
-
std::map<Stream *, StreamConfiguration> configs;
StreamConfiguration config{};
- LOG(UVC, Debug) << "Retrieving default format";
config.width = 640;
config.height = 480;
config.pixelFormat = V4L2_PIX_FMT_YUYV;
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index 2e8c26fb..4da4ca01 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -28,7 +28,7 @@ public:
std::map<Stream *, StreamConfiguration>
streamConfiguration(Camera *camera,
- std::set<Stream *> &streams) override;
+ const std::vector<StreamUsage> &usages) override;
int configureStreams(Camera *camera,
std::map<Stream *, StreamConfiguration> &config) override;
@@ -84,14 +84,12 @@ PipelineHandlerVimc::~PipelineHandlerVimc()
std::map<Stream *, StreamConfiguration>
PipelineHandlerVimc::streamConfiguration(Camera *camera,
- std::set<Stream *> &streams)
+ const std::vector<StreamUsage> &usages)
{
VimcCameraData *data = cameraData(camera);
std::map<Stream *, StreamConfiguration> configs;
-
StreamConfiguration config{};
- LOG(VIMC, Debug) << "Retrieving default format";
config.width = 640;
config.height = 480;
config.pixelFormat = V4L2_PIX_FMT_RGB24;
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 1a858f26..0574f990 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -152,13 +152,13 @@ PipelineHandler::~PipelineHandler()
* \fn PipelineHandler::streamConfiguration()
* \brief Retrieve a group of stream configurations for a specified camera
* \param[in] camera The camera to fetch default configuration from
- * \param[in] streams An array of streams to fetch information about
+ * \param[in] usages A list of stream usages
*
* Retrieve the species camera's default configuration for a specified group of
- * streams. The caller shall populate the \a streams array with the streams it
- * wish to fetch the configuration from. The map of streams and configuration
- * returned can then be examined by the caller to learn about the defualt
- * parameters for the specified streams.
+ * use-cases. The caller shall populate the \a usages array with the use-cases it
+ * wishes to fetch the default configuration for. The map of streams and
+ * configurations returned can then be examined by the caller to learn about
+ * the default parameters for the specified streams.
*
* The intended companion to this is \a configureStreams() which can be used to
* change the group of streams parameters.
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index fea70142..faa3bc57 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -97,9 +97,8 @@ int MainWindow::startCapture()
{
int ret;
- Stream *stream = *camera_->streams().begin();
- std::set<Stream *> streams{ stream };
- config_ = camera_->streamConfiguration(streams);
+ config_ = camera_->streamConfiguration({ Stream::VideoRecording() });
+ Stream *stream = config_.begin()->first;
ret = camera_->configureStreams(config_);
if (ret < 0) {
std::cout << "Failed to configure camera" << std::endl;
diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp
index f6932b75..b8dbdb62 100644
--- a/test/camera/capture.cpp
+++ b/test/camera/capture.cpp
@@ -42,10 +42,9 @@ protected:
int run()
{
- Stream *stream = *camera_->streams().begin();
- std::set<Stream *> streams = { stream };
std::map<Stream *, StreamConfiguration> conf =
- camera_->streamConfiguration(streams);
+ camera_->streamConfiguration({ Stream::VideoRecording() });
+ Stream *stream = conf.begin()->first;
StreamConfiguration *sconf = &conf.begin()->second;
if (!configurationValid(conf)) {
diff --git a/test/camera/configuration_default.cpp b/test/camera/configuration_default.cpp
index 856cd415..09861716 100644
--- a/test/camera/configuration_default.cpp
+++ b/test/camera/configuration_default.cpp
@@ -20,14 +20,10 @@ protected:
{
std::map<Stream *, StreamConfiguration> conf;
- /*
- * Test that asking for default configuration for a valid
- * array of streams returns something valid.
- */
- std::set<Stream *> streams = { *camera_->streams().begin() };
- conf = camera_->streamConfiguration(streams);
+ /* Test asking for configuration for a video stream. */
+ conf = camera_->streamConfiguration({ Stream::VideoRecording() });
if (conf.empty()) {
- cout << "Failed to retrieve configuration for valid streams"
+ cout << "Failed to retrieve configuration for video streams"
<< endl;
return TestFail;
}
@@ -39,12 +35,11 @@ protected:
/*
* Test that asking for configuration for an empty array of
- * streams returns an empty list of configurations.
+ * stream usages returns an empty list of configurations.
*/
- std::set<Stream *> streams_empty = {};
- conf = camera_->streamConfiguration(streams_empty);
+ conf = camera_->streamConfiguration({});
if (!conf.empty()) {
- cout << "Failed to retrieve configuration for empty streams"
+ cout << "Failed to retrieve configuration for empty usage list"
<< endl;
return TestFail;
}
diff --git a/test/camera/configuration_set.cpp b/test/camera/configuration_set.cpp
index cac1da95..1bc01e66 100644
--- a/test/camera/configuration_set.cpp
+++ b/test/camera/configuration_set.cpp
@@ -18,9 +18,8 @@ class ConfigurationSet : public CameraTest
protected:
int run()
{
- std::set<Stream *> streams = { *camera_->streams().begin() };
std::map<Stream *, StreamConfiguration> conf =
- camera_->streamConfiguration(streams);
+ camera_->streamConfiguration({ Stream::VideoRecording() });
StreamConfiguration *sconf = &conf.begin()->second;
if (!configurationValid(conf)) {
diff --git a/test/camera/statemachine.cpp b/test/camera/statemachine.cpp
index f4395f2b..ab3c6fb5 100644
--- a/test/camera/statemachine.cpp
+++ b/test/camera/statemachine.cpp
@@ -235,9 +235,7 @@ protected:
int run()
{
- Stream *stream = *camera_->streams().begin();
- std::set<Stream *> streams = { stream };
- defconf_ = camera_->streamConfiguration(streams);
+ defconf_ = camera_->streamConfiguration({ Stream::VideoRecording() });
if (testAvailable() != TestPass) {
cout << "State machine in Available state failed" << endl;