Patch Detail
Show a patch.
GET /api/1.1/patches/650/?format=api
{ "id": 650, "url": "https://patchwork.libcamera.org/api/1.1/patches/650/?format=api", "web_url": "https://patchwork.libcamera.org/patch/650/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/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": "<20190228021626.15062-3-niklas.soderlund@ragnatech.se>", "date": "2019-02-28T02:16:24", "name": "[libcamera-devel,v2,2/4] libcamera: store stream pointers in sets instead of a vectors", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "02b25bccc2761cd2348c080b9735016a79cbdd80", "submitter": { "id": 5, "url": "https://patchwork.libcamera.org/api/1.1/people/5/?format=api", "name": "Niklas Söderlund", "email": "niklas.soderlund@ragnatech.se" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/650/mbox/", "series": [ { "id": 195, "url": "https://patchwork.libcamera.org/api/1.1/series/195/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=195", "date": "2019-02-28T02:16:23", "name": "libcamera: improve validation of camera operations", "version": 2, "mbox": "https://patchwork.libcamera.org/series/195/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/650/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/650/checks/", "tags": {}, "headers": { "Return-Path": "<niklas.soderlund@ragnatech.se>", "Received": [ "from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net\n\t[195.74.38.228])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 08778610B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 28 Feb 2019 03:16:36 +0100 (CET)", "from bismarck.berto.se (unknown [89.233.230.99])\n\tby bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA\n\tid de792f24-3afe-11e9-985a-005056917f90;\n\tThu, 28 Feb 2019 03:16:34 +0100 (CET)" ], "X-Halon-ID": "de792f24-3afe-11e9-985a-005056917f90", "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": "Thu, 28 Feb 2019 03:16:24 +0100", "Message-Id": "<20190228021626.15062-3-niklas.soderlund@ragnatech.se>", "X-Mailer": "git-send-email 2.20.1", "In-Reply-To": "<20190228021626.15062-1-niklas.soderlund@ragnatech.se>", "References": "<20190228021626.15062-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 2/4] libcamera: store stream pointers\n\tin sets instead of a vectors", "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": "Thu, 28 Feb 2019 02:16:37 -0000" }, "content": "The arrays that store Stream pointers shall always contain unique\nvalues. Storing them in vectors opens up for the same stream pointer\nappearing twice. Remove this possibility by storing them in a set which\nguarantees each element is unique.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n include/libcamera/camera.h | 11 ++++++-----\n src/cam/main.cpp | 10 +++++-----\n src/libcamera/camera.cpp | 8 ++++----\n src/libcamera/include/pipeline_handler.h | 2 +-\n src/libcamera/pipeline/ipu3/ipu3.cpp | 6 +++---\n src/libcamera/pipeline/uvcvideo.cpp | 6 +++---\n src/libcamera/pipeline/vimc.cpp | 6 +++---\n 7 files changed, 25 insertions(+), 24 deletions(-)", "diff": "diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex bf70255a6a5ea364..9c8ae01ed5c607f1 100644\n--- a/include/libcamera/camera.h\n+++ b/include/libcamera/camera.h\n@@ -9,6 +9,7 @@\n \n #include <map>\n #include <memory>\n+#include <set>\n #include <string>\n \n #include <libcamera/request.h>\n@@ -27,7 +28,7 @@ class Camera final\n public:\n \tstatic std::shared_ptr<Camera> create(PipelineHandler *pipe,\n \t\t\t\t\t const std::string &name,\n-\t\t\t\t\t const std::vector<Stream *> &streams);\n+\t\t\t\t\t const std::set<Stream *> &streams);\n \n \tCamera(const Camera &) = delete;\n \tCamera &operator=(const Camera &) = delete;\n@@ -40,9 +41,9 @@ public:\n \tint acquire();\n \tvoid release();\n \n-\tconst std::vector<Stream *> &streams() const;\n+\tconst std::set<Stream *> &streams() const;\n \tstd::map<Stream *, StreamConfiguration>\n-\tstreamConfiguration(std::vector<Stream *> &streams);\n+\tstreamConfiguration(std::set<Stream *> &streams);\n \tint configureStreams(std::map<Stream *, StreamConfiguration> &config);\n \n \tint allocateBuffers();\n@@ -64,8 +65,8 @@ private:\n \n \tstd::shared_ptr<PipelineHandler> pipe_;\n \tstd::string name_;\n-\tstd::vector<Stream *> streams_;\n-\tstd::vector<Stream *> activeStreams_;\n+\tstd::set<Stream *> streams_;\n+\tstd::set<Stream *> activeStreams_;\n \n \tbool acquired_;\n \tbool disconnected_;\ndiff --git a/src/cam/main.cpp b/src/cam/main.cpp\nindex 8df8844c33a2d052..13aa35968f38964d 100644\n--- a/src/cam/main.cpp\n+++ b/src/cam/main.cpp\n@@ -75,10 +75,10 @@ static int parseOptions(int argc, char *argv[])\n \treturn 0;\n }\n \n-static int configureStreams(Camera *camera, std::vector<Stream *> &streams)\n+static int configureStreams(Camera *camera, std::set<Stream *> &streams)\n {\n \tKeyValueParser::Options format = options[OptFormat];\n-\tStream *id = streams.front();\n+\tStream *id = *streams.begin();\n \n \tstd::map<Stream *, StreamConfiguration> config =\n \t\tcamera->streamConfiguration(streams);\n@@ -132,7 +132,7 @@ static int capture()\n {\n \tint ret;\n \n-\tstd::vector<Stream *> streams = camera->streams();\n+\tstd::set<Stream *> streams = camera->streams();\n \tstd::vector<Request *> requests;\n \n \tret = configureStreams(camera.get(), streams);\n@@ -141,7 +141,7 @@ static int capture()\n \t\treturn ret;\n \t}\n \n-\tStream *stream = streams.front();\n+\tStream *stream = *streams.begin();\n \n \tret = camera->allocateBuffers();\n \tif (ret) {\n@@ -237,7 +237,7 @@ int main(int argc, char **argv)\n \t\t\tgoto out;\n \t\t}\n \n-\t\tconst std::vector<Stream *> &streams = camera->streams();\n+\t\tconst std::set<Stream *> &streams = camera->streams();\n \t\tif (streams.size() != 1) {\n \t\t\tstd::cout << \"Camera has \" << streams.size()\n \t\t\t\t << \" streams, only 1 is supported\"\ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 3789732b95d1ae38..84b97b5c2ce94ecf 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -66,7 +66,7 @@ LOG_DECLARE_CATEGORY(Camera)\n */\n std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,\n \t\t\t\t const std::string &name,\n-\t\t\t\t const std::vector<Stream *> &streams)\n+\t\t\t\t const std::set<Stream *> &streams)\n {\n \tstruct Allocator : std::allocator<Camera> {\n \t\tvoid construct(void *p, PipelineHandler *pipe,\n@@ -188,7 +188,7 @@ void Camera::release()\n *\n * \\return An array of all the camera's streams.\n */\n-const std::vector<Stream *> &Camera::streams() const\n+const std::set<Stream *> &Camera::streams() const\n {\n \treturn streams_;\n }\n@@ -210,7 +210,7 @@ const std::vector<Stream *> &Camera::streams() const\n * empty list on error.\n */\n std::map<Stream *, StreamConfiguration>\n-Camera::streamConfiguration(std::vector<Stream *> &streams)\n+Camera::streamConfiguration(std::set<Stream *> &streams)\n {\n \tif (disconnected_ || !streams.size())\n \t\treturn std::map<Stream *, StreamConfiguration>{};\n@@ -264,7 +264,7 @@ int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)\n \t\tconst StreamConfiguration &cfg = iter.second;\n \n \t\tstream->configuration_ = cfg;\n-\t\tactiveStreams_.push_back(stream);\n+\t\tactiveStreams_.insert(stream);\n \n \t\t/*\n \t\t * Allocate buffer objects in the pool.\ndiff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h\nindex 4363dcd8ed8ead97..4cd9b90c609c067e 100644\n--- a/src/libcamera/include/pipeline_handler.h\n+++ b/src/libcamera/include/pipeline_handler.h\n@@ -45,7 +45,7 @@ public:\n \tvirtual bool match(DeviceEnumerator *enumerator) = 0;\n \n \tvirtual std::map<Stream *, StreamConfiguration>\n-\tstreamConfiguration(Camera *camera, std::vector<Stream *> &streams) = 0;\n+\tstreamConfiguration(Camera *camera, std::set<Stream *> &streams) = 0;\n \tvirtual int configureStreams(Camera *camera,\n \t\t\t\t std::map<Stream *, StreamConfiguration> &config) = 0;\n \ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 9694d0ce51abda41..1066fbe350d934a0 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -32,7 +32,7 @@ public:\n \n \tstd::map<Stream *, StreamConfiguration>\n \tstreamConfiguration(Camera *camera,\n-\t\t\t std::vector<Stream *> &streams) override;\n+\t\t\t std::set<Stream *> &streams) override;\n \tint configureStreams(Camera *camera,\n \t\t\t std::map<Stream *, StreamConfiguration> &config) override;\n \n@@ -95,7 +95,7 @@ PipelineHandlerIPU3::~PipelineHandlerIPU3()\n \n std::map<Stream *, StreamConfiguration>\n PipelineHandlerIPU3::streamConfiguration(Camera *camera,\n-\t\t\t\t\t std::vector<Stream *> &streams)\n+\t\t\t\t\t std::set<Stream *> &streams)\n {\n \tIPU3CameraData *data = cameraData(camera);\n \tstd::map<Stream *, StreamConfiguration> configs;\n@@ -374,7 +374,7 @@ void PipelineHandlerIPU3::registerCameras()\n \t\tstd::unique_ptr<IPU3CameraData> data = utils::make_unique<IPU3CameraData>();\n \n \t\tstd::string cameraName = sensor->name() + \" \" + std::to_string(id);\n-\t\tstd::vector<Stream *> streams{ &data->stream_ };\n+\t\tstd::set<Stream *> streams{ &data->stream_ };\n \t\tstd::shared_ptr<Camera> camera = Camera::create(this, cameraName, streams);\n \n \t\t/*\ndiff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp\nindex b7b8ff109109e9c5..7b697c0685630d92 100644\n--- a/src/libcamera/pipeline/uvcvideo.cpp\n+++ b/src/libcamera/pipeline/uvcvideo.cpp\n@@ -27,7 +27,7 @@ public:\n \n \tstd::map<Stream *, StreamConfiguration>\n \tstreamConfiguration(Camera *camera,\n-\t\t\t std::vector<Stream *> &streams) override;\n+\t\t\t std::set<Stream *> &streams) override;\n \tint configureStreams(Camera *camera,\n \t\t\t std::map<Stream *, StreamConfiguration> &config) override;\n \n@@ -63,7 +63,7 @@ PipelineHandlerUVC::~PipelineHandlerUVC()\n \n std::map<Stream *, StreamConfiguration>\n PipelineHandlerUVC::streamConfiguration(Camera *camera,\n-\t\t\t\t\tstd::vector<Stream *> &streams)\n+\t\t\t\t\tstd::set<Stream *> &streams)\n {\n \tstd::map<Stream *, StreamConfiguration> configs;\n \n@@ -171,7 +171,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)\n \t\treturn false;\n \t}\n \n-\tstd::vector<Stream *> streams{ &stream_ };\n+\tstd::set<Stream *> streams{ &stream_ };\n \tstd::shared_ptr<Camera> camera = Camera::create(this, media_->model(), streams);\n \tregisterCamera(std::move(camera));\n \thotplugMediaDevice(media_.get());\ndiff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp\nindex 812777cffbb3e618..9ba96323d335e010 100644\n--- a/src/libcamera/pipeline/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc.cpp\n@@ -27,7 +27,7 @@ public:\n \n \tstd::map<Stream *, StreamConfiguration>\n \tstreamConfiguration(Camera *camera,\n-\t\t\t std::vector<Stream *> &streams) override;\n+\t\t\t std::set<Stream *> &streams) override;\n \tint configureStreams(Camera *camera,\n \t\t\t std::map<Stream *, StreamConfiguration> &config) override;\n \n@@ -62,7 +62,7 @@ PipelineHandlerVimc::~PipelineHandlerVimc()\n \n std::map<Stream *, StreamConfiguration>\n PipelineHandlerVimc::streamConfiguration(Camera *camera,\n-\t\t\t\t std::vector<Stream *> &streams)\n+\t\t\t\t\t std::set<Stream *> &streams)\n {\n \tstd::map<Stream *, StreamConfiguration> configs;\n \n@@ -171,7 +171,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)\n \t\treturn false;\n \t}\n \n-\tstd::vector<Stream *> streams{ &stream_ };\n+\tstd::set<Stream *> streams{ &stream_ };\n \tstd::shared_ptr<Camera> camera = Camera::create(this, \"VIMC Sensor B\",\n \t\t\t\t\t\t\tstreams);\n \tregisterCamera(std::move(camera));\n", "prefixes": [ "libcamera-devel", "v2", "2/4" ] }