{"id":627,"url":"https://patchwork.libcamera.org/api/1.1/patches/627/?format=json","web_url":"https://patchwork.libcamera.org/patch/627/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20190226021857.28255-7-niklas.soderlund@ragnatech.se>","date":"2019-02-26T02:18:55","name":"[libcamera-devel,6/8] libcamera: store stream pointers in sets instead of a vectors","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"a6ad58a993eade07a2ef7c9a3bfe8241d54d10b4","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/1.1/people/5/?format=json","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/627/mbox/","series":[{"id":192,"url":"https://patchwork.libcamera.org/api/1.1/series/192/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=192","date":"2019-02-26T02:18:50","name":"libcamera: improve validation of camera operations","version":1,"mbox":"https://patchwork.libcamera.org/series/192/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/627/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/627/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 7DB67601E2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 26 Feb 2019 03:19:25 +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 ef0531c2-396c-11e9-985a-005056917f90;\n\tTue, 26 Feb 2019 03:19:24 +0100 (CET)"],"X-Halon-ID":"ef0531c2-396c-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":"Tue, 26 Feb 2019 03:18:55 +0100","Message-Id":"<20190226021857.28255-7-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.20.1","In-Reply-To":"<20190226021857.28255-1-niklas.soderlund@ragnatech.se>","References":"<20190226021857.28255-1-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH 6/8] libcamera: store stream pointers in\n\tsets 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":"Tue, 26 Feb 2019 02:19:25 -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\ngrantees each element is unique.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n include/libcamera/camera.h               | 11 ++++++-----\n src/cam/main.cpp                         | 10 +++++-----\n src/libcamera/camera.cpp                 | 10 +++++-----\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, 26 insertions(+), 25 deletions(-)","diff":"diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 8c8545b074e8ae13..1e75a6dafa4e7c5f 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@@ -73,8 +74,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 \tState state_;\n };\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 c50b14bbd904fc1c..938f21fe80ef8ceb 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@@ -223,10 +223,10 @@ 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 \tif (!stateIsAtleast(Free))\n-\t\tstd::vector<Stream *>{};\n+\t\tstd::set<Stream *>{};\n \n \treturn streams_;\n }\n@@ -248,7 +248,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 (!stateIsAtleast(Free) || !streams.size())\n \t\treturn std::map<Stream *, StreamConfiguration>{};\n@@ -300,7 +300,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","6/8"]}