diff options
-rw-r--r-- | include/libcamera/camera.h | 3 | ||||
-rw-r--r-- | src/cam/main.cpp | 3 | ||||
-rw-r--r-- | src/libcamera/camera.cpp | 30 | ||||
-rw-r--r-- | src/libcamera/include/pipeline_handler.h | 2 | ||||
-rw-r--r-- | src/libcamera/pipeline/ipu3/ipu3.cpp | 4 | ||||
-rw-r--r-- | src/libcamera/pipeline/uvcvideo.cpp | 6 | ||||
-rw-r--r-- | src/libcamera/pipeline/vimc.cpp | 6 | ||||
-rw-r--r-- | src/libcamera/pipeline_handler.cpp | 10 | ||||
-rw-r--r-- | src/qcam/main_window.cpp | 5 | ||||
-rw-r--r-- | test/camera/capture.cpp | 5 | ||||
-rw-r--r-- | test/camera/configuration_default.cpp | 17 | ||||
-rw-r--r-- | test/camera/configuration_set.cpp | 3 | ||||
-rw-r--r-- | test/camera/statemachine.cpp | 4 |
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; |