Show a patch.

GET /api/patches/932/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 932,
    "url": "https://patchwork.libcamera.org/api/patches/932/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/932/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20190405235842.27884-9-niklas.soderlund@ragnatech.se>",
    "date": "2019-04-05T23:58:42",
    "name": "[libcamera-devel,v3,8/8] libcamera: Switch to CameraConfiguration",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "594d76e4d37caebe5e4ed3c9b241053762bb1151",
    "submitter": {
        "id": 5,
        "url": "https://patchwork.libcamera.org/api/people/5/?format=api",
        "name": "Niklas Söderlund",
        "email": "niklas.soderlund@ragnatech.se"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/932/mbox/",
    "series": [
        {
            "id": 242,
            "url": "https://patchwork.libcamera.org/api/series/242/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=242",
            "date": "2019-04-05T23:58:34",
            "name": "libcamera: stream: Add basic stream usages",
            "version": 3,
            "mbox": "https://patchwork.libcamera.org/series/242/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/932/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/932/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<niklas.soderlund@ragnatech.se>",
        "Received": [
            "from bin-mail-out-06.binero.net (bin-mail-out-06.binero.net\n\t[195.74.38.229])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DD2D1611A8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  6 Apr 2019 01:59:25 +0200 (CEST)",
            "from bismarck.berto.se (unknown [89.233.230.99])\n\tby bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA\n\tid d53f4fc3-57fe-11e9-8144-0050569116f7;\n\tSat, 06 Apr 2019 01:59:22 +0200 (CEST)"
        ],
        "X-Halon-ID": "d53f4fc3-57fe-11e9-8144-0050569116f7",
        "Authorized-sender": "niklas@soderlund.pp.se",
        "From": "=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Sat,  6 Apr 2019 01:58:42 +0200",
        "Message-Id": "<20190405235842.27884-9-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20190405235842.27884-1-niklas.soderlund@ragnatech.se>",
        "References": "<20190405235842.27884-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v3 8/8] libcamera: Switch to\n\tCameraConfiguration",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.23",
        "Precedence": "list",
        "List-Id": "<libcamera-devel.lists.libcamera.org>",
        "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>",
        "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>",
        "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>",
        "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>",
        "X-List-Received-Date": "Fri, 05 Apr 2019 23:59:26 -0000"
    },
    "content": "Implement the camera configuration thru out the library, tests, cam and\nqcam tools.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n include/libcamera/camera.h               |  4 ++--\n src/cam/main.cpp                         |  8 ++++----\n src/libcamera/camera.cpp                 | 25 ++++++++++++------------\n src/libcamera/include/pipeline_handler.h |  6 +++---\n src/libcamera/pipeline/ipu3/ipu3.cpp     | 10 +++++-----\n src/libcamera/pipeline/uvcvideo.cpp      | 12 ++++++------\n src/libcamera/pipeline/vimc.cpp          | 12 ++++++------\n src/libcamera/pipeline_handler.cpp       |  6 +++---\n src/qcam/main_window.cpp                 |  2 +-\n src/qcam/main_window.h                   |  2 +-\n test/camera/camera_test.cpp              | 18 -----------------\n test/camera/camera_test.h                |  2 --\n test/camera/capture.cpp                  |  8 ++++----\n test/camera/configuration_default.cpp    | 12 +++---------\n test/camera/configuration_set.cpp        |  6 +++---\n test/camera/statemachine.cpp             |  2 +-\n 16 files changed, 54 insertions(+), 81 deletions(-)",
    "diff": "diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 8455049151d5c5a2..06c7d2e6ae63fa70 100644\n--- a/include/libcamera/camera.h\n+++ b/include/libcamera/camera.h\n@@ -72,9 +72,9 @@ public:\n \tint release();\n \n \tconst std::set<Stream *> &streams() const;\n-\tstd::map<Stream *, StreamConfiguration>\n+\tCameraConfiguration\n \tstreamConfiguration(const std::vector<StreamUsage> &usage);\n-\tint configureStreams(std::map<Stream *, StreamConfiguration> &config);\n+\tint configureStreams(const CameraConfiguration &config);\n \n \tint allocateBuffers();\n \tint freeBuffers();\ndiff --git a/src/cam/main.cpp b/src/cam/main.cpp\nindex d45ffd372d932d76..99ce564afd695b07 100644\n--- a/src/cam/main.cpp\n+++ b/src/cam/main.cpp\n@@ -78,10 +78,10 @@ static int parseOptions(int argc, char *argv[])\n \treturn 0;\n }\n \n-static int prepareCameraConfig(std::map<Stream *, StreamConfiguration> *config)\n+static int prepareCameraConfig(CameraConfiguration *config)\n {\n \t*config = camera->streamConfiguration({ Stream::VideoRecording() });\n-\tStream *stream = config->begin()->first;\n+\tStream *stream = config->front();\n \n \tif (options.isSet(OptFormat)) {\n \t\tKeyValueParser::Options format = options[OptFormat];\n@@ -135,7 +135,7 @@ static void requestComplete(Request *request, const std::map<Stream *, Buffer *>\n \n static int capture()\n {\n-\tstd::map<Stream *, StreamConfiguration> config;\n+\tCameraConfiguration config;\n \tstd::vector<Request *> requests;\n \tint ret;\n \n@@ -151,7 +151,7 @@ static int capture()\n \t\treturn ret;\n \t}\n \n-\tStream *stream = config.begin()->first;\n+\tStream *stream = config.front();\n \n \tret = camera->allocateBuffers();\n \tif (ret) {\ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 98145edea1ac9c91..e357bca11214969a 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -525,21 +525,21 @@ const std::set<Stream *> &Camera::streams() const\n  * list of stream usages and the camera returns a map of suitable streams and\n  * their suggested default configurations.\n  *\n- * \\return A map of streams to configurations if the requested usages can be\n- * satisfied, or an empty map otherwise\n+ * \\return A valid CameraConfiguration if the requested usages can be satisfied,\n+ * or a invalid one otherwise\n  */\n-std::map<Stream *, StreamConfiguration>\n+CameraConfiguration\n Camera::streamConfiguration(const std::vector<StreamUsage> &usages)\n {\n \tif (disconnected_ || !usages.size() || usages.size() > streams_.size())\n-\t\treturn std::map<Stream *, StreamConfiguration>{};\n+\t\treturn CameraConfiguration();\n \n \treturn pipe_->streamConfiguration(this, usages);\n }\n \n /**\n  * \\brief Configure the camera's streams prior to capture\n- * \\param[in] config A map of stream IDs and configurations to setup\n+ * \\param[in] config The camera configurations to setup\n  *\n  * Prior to starting capture, the camera must be configured to select a\n  * group of streams to be involved in the capture and their configuration.\n@@ -561,7 +561,7 @@ Camera::streamConfiguration(const std::vector<StreamUsage> &usages)\n  * \\retval -EACCES The camera is not in a state where it can be configured\n  * \\retval -EINVAL The configuration is not valid\n  */\n-int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)\n+int Camera::configureStreams(const CameraConfiguration &config)\n {\n \tint ret;\n \n@@ -571,14 +571,14 @@ int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)\n \tif (!stateBetween(CameraAcquired, CameraConfigured))\n \t\treturn -EACCES;\n \n-\tif (!config.size()) {\n+\tif (!config.valid()) {\n \t\tLOG(Camera, Error)\n-\t\t\t<< \"Can't configure streams without a configuration\";\n+\t\t\t<< \"Can't configure camera with invalid configuration\";\n \t\treturn -EINVAL;\n \t}\n \n-\tfor (auto const &iter : config) {\n-\t\tif (streams_.find(iter.first) == streams_.end())\n+\tfor (Stream *stream : config) {\n+\t\tif (streams_.find(stream) == streams_.end())\n \t\t\treturn -EINVAL;\n \t}\n \n@@ -587,9 +587,8 @@ int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)\n \t\treturn ret;\n \n \tactiveStreams_.clear();\n-\tfor (auto const &iter : config) {\n-\t\tStream *stream = iter.first;\n-\t\tconst StreamConfiguration &cfg = iter.second;\n+\tfor (Stream *stream : config) {\n+\t\tconst StreamConfiguration &cfg = config[stream];\n \n \t\tstream->configuration_ = cfg;\n \t\tactiveStreams_.insert(stream);\ndiff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h\nindex 8a1706fad5377bf4..b6cbd3bae51b08dc 100644\n--- a/src/libcamera/include/pipeline_handler.h\n+++ b/src/libcamera/include/pipeline_handler.h\n@@ -18,6 +18,7 @@ namespace libcamera {\n class Buffer;\n class BufferPool;\n class Camera;\n+class CameraConfiguration;\n class CameraManager;\n class DeviceEnumerator;\n class MediaDevice;\n@@ -52,10 +53,9 @@ public:\n \n \tvirtual bool match(DeviceEnumerator *enumerator) = 0;\n \n-\tvirtual std::map<Stream *, StreamConfiguration>\n+\tvirtual CameraConfiguration\n \tstreamConfiguration(Camera *camera, const std::vector<StreamUsage> &usages) = 0;\n-\tvirtual int configureStreams(Camera *camera,\n-\t\t\t\t     std::map<Stream *, StreamConfiguration> &config) = 0;\n+\tvirtual int configureStreams(Camera *camera, const CameraConfiguration &config) = 0;\n \n \tvirtual int allocateBuffers(Camera *camera, Stream *stream) = 0;\n \tvirtual int freeBuffers(Camera *camera, Stream *stream) = 0;\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 5d01504e24471bcf..ca09da753b908448 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -139,11 +139,11 @@ public:\n \tPipelineHandlerIPU3(CameraManager *manager);\n \t~PipelineHandlerIPU3();\n \n-\tstd::map<Stream *, StreamConfiguration>\n+\tCameraConfiguration\n \tstreamConfiguration(Camera *camera,\n \t\t\t    const std::vector<StreamUsage> &usages) override;\n \tint configureStreams(Camera *camera,\n-\t\t\t     std::map<Stream *, StreamConfiguration> &config) override;\n+\t\t\t     const CameraConfiguration &config) override;\n \n \tint allocateBuffers(Camera *camera, Stream *stream) override;\n \tint freeBuffers(Camera *camera, Stream *stream) override;\n@@ -204,11 +204,11 @@ PipelineHandlerIPU3::~PipelineHandlerIPU3()\n \t\timguMediaDev_->release();\n }\n \n-std::map<Stream *, StreamConfiguration>\n+CameraConfiguration\n PipelineHandlerIPU3::streamConfiguration(Camera *camera,\n \t\t\t\t\t const std::vector<StreamUsage> &usages)\n {\n-\tstd::map<Stream *, StreamConfiguration> configs;\n+\tCameraConfiguration configs;\n \tIPU3CameraData *data = cameraData(camera);\n \tStreamConfiguration *config = &configs[&data->stream_];\n \n@@ -234,7 +234,7 @@ PipelineHandlerIPU3::streamConfiguration(Camera *camera,\n }\n \n int PipelineHandlerIPU3::configureStreams(Camera *camera,\n-\t\t\t\t\t  std::map<Stream *, StreamConfiguration> &config)\n+\t\t\t\t\t  const CameraConfiguration &config)\n {\n \tIPU3CameraData *data = cameraData(camera);\n \tconst StreamConfiguration &cfg = config[&data->stream_];\ndiff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp\nindex dfff7116bc2aa5d3..cd472cfadd86b7ba 100644\n--- a/src/libcamera/pipeline/uvcvideo.cpp\n+++ b/src/libcamera/pipeline/uvcvideo.cpp\n@@ -26,11 +26,11 @@ public:\n \tPipelineHandlerUVC(CameraManager *manager);\n \t~PipelineHandlerUVC();\n \n-\tstd::map<Stream *, StreamConfiguration>\n+\tCameraConfiguration\n \tstreamConfiguration(Camera *camera,\n \t\t\t    const std::vector<StreamUsage> &usages) override;\n \tint configureStreams(Camera *camera,\n-\t\t\t     std::map<Stream *, StreamConfiguration> &config) override;\n+\t\t\t     const CameraConfiguration &config) override;\n \n \tint allocateBuffers(Camera *camera, Stream *stream) override;\n \tint freeBuffers(Camera *camera, Stream *stream) override;\n@@ -82,12 +82,12 @@ PipelineHandlerUVC::~PipelineHandlerUVC()\n \t\tmedia_->release();\n }\n \n-std::map<Stream *, StreamConfiguration>\n+CameraConfiguration\n PipelineHandlerUVC::streamConfiguration(Camera *camera,\n \t\t\t\t\tconst std::vector<StreamUsage> &usages)\n {\n \tUVCCameraData *data = cameraData(camera);\n-\tstd::map<Stream *, StreamConfiguration> configs;\n+\tCameraConfiguration configs;\n \tStreamConfiguration config{};\n \n \tconfig.width = 640;\n@@ -101,10 +101,10 @@ PipelineHandlerUVC::streamConfiguration(Camera *camera,\n }\n \n int PipelineHandlerUVC::configureStreams(Camera *camera,\n-\t\t\t\t\t std::map<Stream *, StreamConfiguration> &config)\n+\t\t\t\t\t const CameraConfiguration &config)\n {\n \tUVCCameraData *data = cameraData(camera);\n-\tStreamConfiguration *cfg = &config[&data->stream_];\n+\tconst StreamConfiguration *cfg = &config[&data->stream_];\n \tint ret;\n \n \tLOG(UVC, Debug) << \"Configure the camera for resolution \"\ndiff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp\nindex 4da4ca018d4b942a..c8bbe2a19847ba1e 100644\n--- a/src/libcamera/pipeline/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc.cpp\n@@ -26,11 +26,11 @@ public:\n \tPipelineHandlerVimc(CameraManager *manager);\n \t~PipelineHandlerVimc();\n \n-\tstd::map<Stream *, StreamConfiguration>\n+\tCameraConfiguration\n \tstreamConfiguration(Camera *camera,\n \t\t\t    const std::vector<StreamUsage> &usages) override;\n \tint configureStreams(Camera *camera,\n-\t\t\t     std::map<Stream *, StreamConfiguration> &config) override;\n+\t\t\t     const CameraConfiguration &config) override;\n \n \tint allocateBuffers(Camera *camera, Stream *stream) override;\n \tint freeBuffers(Camera *camera, Stream *stream) override;\n@@ -82,12 +82,12 @@ PipelineHandlerVimc::~PipelineHandlerVimc()\n \t\tmedia_->release();\n }\n \n-std::map<Stream *, StreamConfiguration>\n+CameraConfiguration\n PipelineHandlerVimc::streamConfiguration(Camera *camera,\n \t\t\t\t\t const std::vector<StreamUsage> &usages)\n {\n \tVimcCameraData *data = cameraData(camera);\n-\tstd::map<Stream *, StreamConfiguration> configs;\n+\tCameraConfiguration configs;\n \tStreamConfiguration config{};\n \n \tconfig.width = 640;\n@@ -101,10 +101,10 @@ PipelineHandlerVimc::streamConfiguration(Camera *camera,\n }\n \n int PipelineHandlerVimc::configureStreams(Camera *camera,\n-\t\t\t\t      std::map<Stream *, StreamConfiguration> &config)\n+\t\t\t\t\t  const CameraConfiguration &config)\n {\n \tVimcCameraData *data = cameraData(camera);\n-\tStreamConfiguration *cfg = &config[&data->stream_];\n+\tconst StreamConfiguration *cfg = &config[&data->stream_];\n \tint ret;\n \n \tLOG(VIMC, Debug) << \"Configure the camera for resolution \"\ndiff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\nindex 0574f9904367605c..09d86b11e2a39d9b 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -163,15 +163,15 @@ PipelineHandler::~PipelineHandler()\n  * The intended companion to this is \\a configureStreams() which can be used to\n  * change the group of streams parameters.\n  *\n- * \\return A map of successfully retrieved streams and configurations or an\n- * empty map on error.\n+ * \\return A valid CameraConfiguration if the requested usages can be satisfied,\n+ * or a invalid one otherwise\n  */\n \n /**\n  * \\fn PipelineHandler::configureStreams()\n  * \\brief Configure a group of streams for capture\n  * \\param[in] camera The camera to configure\n- * \\param[in] config A map of stream configurations to apply\n+ * \\param[in] config The camera configurations to setup\n  *\n  * Configure the specified group of streams for \\a camera according to the\n  * configuration specified in \\a configs. The intended caller of this interface\ndiff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp\nindex faa3bc5739dd8453..4bc0440370410525 100644\n--- a/src/qcam/main_window.cpp\n+++ b/src/qcam/main_window.cpp\n@@ -98,7 +98,7 @@ int MainWindow::startCapture()\n \tint ret;\n \n \tconfig_ = camera_->streamConfiguration({ Stream::VideoRecording() });\n-\tStream *stream = config_.begin()->first;\n+\tStream *stream = config_.front();\n \tret = camera_->configureStreams(config_);\n \tif (ret < 0) {\n \t\tstd::cout << \"Failed to configure camera\" << std::endl;\ndiff --git a/src/qcam/main_window.h b/src/qcam/main_window.h\nindex 5e27a8fd6b4eb8f3..9b31da2bf4b75a03 100644\n--- a/src/qcam/main_window.h\n+++ b/src/qcam/main_window.h\n@@ -46,7 +46,7 @@ private:\n \n \tstd::shared_ptr<Camera> camera_;\n \tbool isCapturing_;\n-\tstd::map<Stream *, StreamConfiguration> config_;\n+\tCameraConfiguration config_;\n \n \tViewFinder *viewfinder_;\n };\ndiff --git a/test/camera/camera_test.cpp b/test/camera/camera_test.cpp\nindex 1609c4b02842186a..24ff5fe0c64d331e 100644\n--- a/test/camera/camera_test.cpp\n+++ b/test/camera/camera_test.cpp\n@@ -45,21 +45,3 @@ void CameraTest::cleanup()\n \n \tcm_->stop();\n };\n-\n-bool CameraTest::configurationValid(const std::map<Stream *, StreamConfiguration> &config) const\n-{\n-\t/* Test that the configuration is not empty. */\n-\tif (config.empty())\n-\t\treturn false;\n-\n-\t/* Test that configuration is valid. */\n-\tfor (auto const &it : config) {\n-\t\tconst StreamConfiguration &conf = it.second;\n-\n-\t\tif (conf.width == 0 || conf.height == 0 ||\n-\t\t    conf.pixelFormat == 0 || conf.bufferCount == 0)\n-\t\t\treturn false;\n-\t}\n-\n-\treturn true;\n-}\ndiff --git a/test/camera/camera_test.h b/test/camera/camera_test.h\nindex 5801fad3281e1653..ffc8a485bfaff836 100644\n--- a/test/camera/camera_test.h\n+++ b/test/camera/camera_test.h\n@@ -23,8 +23,6 @@ protected:\n \tint init();\n \tvoid cleanup();\n \n-\tbool configurationValid(const std::map<Stream *, StreamConfiguration> &config) const;\n-\n \tstd::shared_ptr<Camera> camera_;\n \n private:\ndiff --git a/test/camera/capture.cpp b/test/camera/capture.cpp\nindex b8dbdb62f9a50a33..95b2202738d2b73b 100644\n--- a/test/camera/capture.cpp\n+++ b/test/camera/capture.cpp\n@@ -42,12 +42,12 @@ protected:\n \n \tint run()\n \t{\n-\t\tstd::map<Stream *, StreamConfiguration> conf =\n+\t\tCameraConfiguration conf =\n \t\t\tcamera_->streamConfiguration({ Stream::VideoRecording() });\n-\t\tStream *stream = conf.begin()->first;\n-\t\tStreamConfiguration *sconf = &conf.begin()->second;\n+\t\tStream *stream = conf.front();\n+\t\tStreamConfiguration *sconf = &conf[stream];\n \n-\t\tif (!configurationValid(conf)) {\n+\t\tif (!conf.valid()) {\n \t\t\tcout << \"Failed to read default configuration\" << endl;\n \t\t\treturn TestFail;\n \t\t}\ndiff --git a/test/camera/configuration_default.cpp b/test/camera/configuration_default.cpp\nindex 09861716973d752c..a0295a3ed82663d0 100644\n--- a/test/camera/configuration_default.cpp\n+++ b/test/camera/configuration_default.cpp\n@@ -18,17 +18,11 @@ class ConfigurationDefault : public CameraTest\n protected:\n \tint run()\n \t{\n-\t\tstd::map<Stream *, StreamConfiguration> conf;\n+\t\tCameraConfiguration conf;\n \n \t\t/* Test asking for configuration for a video stream. */\n \t\tconf = camera_->streamConfiguration({ Stream::VideoRecording() });\n-\t\tif (conf.empty()) {\n-\t\t\tcout << \"Failed to retrieve configuration for video streams\"\n-\t\t\t     << endl;\n-\t\t\treturn TestFail;\n-\t\t}\n-\n-\t\tif (!configurationValid(conf)) {\n+\t\tif (!conf.valid()) {\n \t\t\tcout << \"Default configuration invalid\" << endl;\n \t\t\treturn TestFail;\n \t\t}\n@@ -38,7 +32,7 @@ protected:\n \t\t * stream usages returns an empty list of configurations.\n \t\t */\n \t\tconf = camera_->streamConfiguration({});\n-\t\tif (!conf.empty()) {\n+\t\tif (conf.valid()) {\n \t\t\tcout << \"Failed to retrieve configuration for empty usage list\"\n \t\t\t     << endl;\n \t\t\treturn TestFail;\ndiff --git a/test/camera/configuration_set.cpp b/test/camera/configuration_set.cpp\nindex 1bc01e66625eedf0..48d1b2ee98d76f5c 100644\n--- a/test/camera/configuration_set.cpp\n+++ b/test/camera/configuration_set.cpp\n@@ -18,11 +18,11 @@ class ConfigurationSet : public CameraTest\n protected:\n \tint run()\n \t{\n-\t\tstd::map<Stream *, StreamConfiguration> conf =\n+\t\tCameraConfiguration conf =\n \t\t\tcamera_->streamConfiguration({ Stream::VideoRecording() });\n-\t\tStreamConfiguration *sconf = &conf.begin()->second;\n+\t\tStreamConfiguration *sconf = &conf[conf.front()];\n \n-\t\tif (!configurationValid(conf)) {\n+\t\tif (!conf.valid()) {\n \t\t\tcout << \"Failed to read default configuration\" << endl;\n \t\t\treturn TestFail;\n \t\t}\ndiff --git a/test/camera/statemachine.cpp b/test/camera/statemachine.cpp\nindex ab3c6fb5bea38c36..8ae93bee7ca178d4 100644\n--- a/test/camera/statemachine.cpp\n+++ b/test/camera/statemachine.cpp\n@@ -265,7 +265,7 @@ protected:\n \t\treturn TestPass;\n \t}\n \n-\tstd::map<Stream *, StreamConfiguration> defconf_;\n+\tCameraConfiguration defconf_;\n };\n \n } /* namespace */\n",
    "prefixes": [
        "libcamera-devel",
        "v3",
        "8/8"
    ]
}