Show a patch.

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

{
    "id": 922,
    "url": "https://patchwork.libcamera.org/api/patches/922/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/922/",
    "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": "<20190405020256.22520-9-niklas.soderlund@ragnatech.se>",
    "date": "2019-04-05T02:02:56",
    "name": "[libcamera-devel,v2,8/8] libcamera: Switch to CameraConfiguration",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "ee6dc48b42159192f7f5e6c286043022f637c27a",
    "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/922/mbox/",
    "series": [
        {
            "id": 240,
            "url": "https://patchwork.libcamera.org/api/series/240/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=240",
            "date": "2019-04-05T02:02:48",
            "name": "libcamera: stream: Add basic stream usages",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/240/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/922/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/922/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<niklas.soderlund@ragnatech.se>",
        "Received": [
            "from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net\n\t[195.74.38.227])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EA3EC610C5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  5 Apr 2019 04:03:11 +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 f3ea15a4-5746-11e9-8144-0050569116f7;\n\tFri, 05 Apr 2019 04:03:06 +0200 (CEST)"
        ],
        "X-Halon-ID": "f3ea15a4-5746-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": "Fri,  5 Apr 2019 04:02:56 +0200",
        "Message-Id": "<20190405020256.22520-9-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20190405020256.22520-1-niklas.soderlund@ragnatech.se>",
        "References": "<20190405020256.22520-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v2 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 02:03:12 -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                 | 15 +++++++--------\n src/libcamera/include/pipeline_handler.h |  6 +++---\n src/libcamera/pipeline/ipu3/ipu3.cpp     | 10 +++++-----\n src/libcamera/pipeline/uvcvideo.cpp      | 10 +++++-----\n src/libcamera/pipeline/vimc.cpp          | 10 +++++-----\n src/qcam/main_window.cpp                 |  2 +-\n src/qcam/main_window.h                   |  2 +-\n test/camera/camera_test.cpp              |  6 +++---\n test/camera/camera_test.h                |  2 +-\n test/camera/capture.cpp                  |  6 +++---\n test/camera/configuration_default.cpp    |  2 +-\n test/camera/configuration_set.cpp        |  4 ++--\n test/camera/statemachine.cpp             |  2 +-\n 15 files changed, 44 insertions(+), 45 deletions(-)",
    "diff": "diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 311a51e4070d135c..91b641b4da0744d6 100644\n--- a/include/libcamera/camera.h\n+++ b/include/libcamera/camera.h\n@@ -70,9 +70,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(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 16162c524297012f..da8fab18356579cb 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -476,11 +476,11 @@ const std::set<Stream *> &Camera::streams() const\n  * \\return A map of streams to configurations if the requested usages can be\n  * satisfied, or an empty map 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@@ -509,7 +509,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(CameraConfiguration &config)\n {\n \tint ret;\n \n@@ -525,8 +525,8 @@ int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)\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@@ -535,9 +535,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..3a7e7339ccf47707 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, 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..a2442922a2afe41e 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     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  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..f6da073ba0c47090 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     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,7 +101,7 @@ 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 CameraConfiguration &config)\n {\n \tUVCCameraData *data = cameraData(camera);\n \tStreamConfiguration *cfg = &config[&data->stream_];\ndiff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp\nindex 4da4ca018d4b942a..6483ac842bf02dc2 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     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,7 +101,7 @@ 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  CameraConfiguration &config)\n {\n \tVimcCameraData *data = cameraData(camera);\n \tStreamConfiguration *cfg = &config[&data->stream_];\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..42172543329e04e4 100644\n--- a/test/camera/camera_test.cpp\n+++ b/test/camera/camera_test.cpp\n@@ -46,15 +46,15 @@ void CameraTest::cleanup()\n \tcm_->stop();\n };\n \n-bool CameraTest::configurationValid(const std::map<Stream *, StreamConfiguration> &config) const\n+bool CameraTest::configurationValid(CameraConfiguration &config)\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+\tfor (Stream *stream : config) {\n+\t\tconst StreamConfiguration conf = config[stream];\n \n \t\tif (conf.width == 0 || conf.height == 0 ||\n \t\t    conf.pixelFormat == 0 || conf.bufferCount == 0)\ndiff --git a/test/camera/camera_test.h b/test/camera/camera_test.h\nindex 5801fad3281e1653..fffa3bf16a9df1a4 100644\n--- a/test/camera/camera_test.h\n+++ b/test/camera/camera_test.h\n@@ -23,7 +23,7 @@ protected:\n \tint init();\n \tvoid cleanup();\n \n-\tbool configurationValid(const std::map<Stream *, StreamConfiguration> &config) const;\n+\tbool configurationValid(CameraConfiguration &config);\n \n \tstd::shared_ptr<Camera> camera_;\n \ndiff --git a/test/camera/capture.cpp b/test/camera/capture.cpp\nindex b8dbdb62f9a50a33..e7aa3d97989c6c94 100644\n--- a/test/camera/capture.cpp\n+++ b/test/camera/capture.cpp\n@@ -42,10 +42,10 @@ 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\t\tcout << \"Failed to read default configuration\" << endl;\ndiff --git a/test/camera/configuration_default.cpp b/test/camera/configuration_default.cpp\nindex 09861716973d752c..9ae332368f80e8b9 100644\n--- a/test/camera/configuration_default.cpp\n+++ b/test/camera/configuration_default.cpp\n@@ -18,7 +18,7 @@ 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() });\ndiff --git a/test/camera/configuration_set.cpp b/test/camera/configuration_set.cpp\nindex 1bc01e66625eedf0..7224f1aa6657523d 100644\n--- a/test/camera/configuration_set.cpp\n+++ b/test/camera/configuration_set.cpp\n@@ -18,9 +18,9 @@ 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\t\tcout << \"Failed to read default configuration\" << endl;\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",
        "v2",
        "8/8"
    ]
}