{"id":331,"url":"https://patchwork.libcamera.org/api/1.1/patches/331/?format=json","web_url":"https://patchwork.libcamera.org/patch/331/","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":"<20190122232955.31783-2-niklas.soderlund@ragnatech.se>","date":"2019-01-22T23:29:53","name":"[libcamera-devel,1/3] libcamera: camera: create a association with the responsible pipeline handler","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"2cda9d610205374020cb0391cb322fd8c9fe2fe3","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/331/mbox/","series":[{"id":117,"url":"https://patchwork.libcamera.org/api/1.1/series/117/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=117","date":"2019-01-22T23:29:52","name":"libcamera: add association between Camera and PipelineHandlers","version":1,"mbox":"https://patchwork.libcamera.org/series/117/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/331/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/331/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 1886B60C7D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 23 Jan 2019 00:30:44 +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 ba9f5212-1e9d-11e9-874f-005056917f90;\n\tWed, 23 Jan 2019 00:30:40 +0100 (CET)"],"X-Halon-ID":"ba9f5212-1e9d-11e9-874f-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":"Wed, 23 Jan 2019 00:29:53 +0100","Message-Id":"<20190122232955.31783-2-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.20.1","In-Reply-To":"<20190122232955.31783-1-niklas.soderlund@ragnatech.se>","References":"<20190122232955.31783-1-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH 1/3] libcamera: camera: create a\n\tassociation with the responsible pipeline handler","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, 22 Jan 2019 23:30:44 -0000"},"content":"The PipelineHandler which creates a Camera is responsible for serving\nany operation requested by the user. In order to do so the Camera needs\nto store a reference to its creator.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n include/libcamera/camera.h           |  8 ++++++--\n src/libcamera/camera.cpp             | 15 +++++++++------\n src/libcamera/pipeline/ipu3/ipu3.cpp |  3 ++-\n src/libcamera/pipeline/uvcvideo.cpp  |  2 +-\n src/libcamera/pipeline/vimc.cpp      | 10 ++--------\n 5 files changed, 20 insertions(+), 18 deletions(-)","diff":"diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 2ea1a6883311cf9f..d3bae4cbee1e0cea 100644\n--- a/include/libcamera/camera.h\n+++ b/include/libcamera/camera.h\n@@ -12,10 +12,13 @@\n \n namespace libcamera {\n \n+class PipelineHandler;\n+\n class Camera final\n {\n public:\n-\tstatic std::shared_ptr<Camera> create(const std::string &name);\n+\tstatic std::shared_ptr<Camera> create(const std::string &name,\n+\t\t\t\t\t      class PipelineHandler *pipe);\n \n \tCamera(const Camera &) = delete;\n \tvoid operator=(const Camera &) = delete;\n@@ -23,10 +26,11 @@ public:\n \tconst std::string &name() const;\n \n private:\n-\texplicit Camera(const std::string &name);\n+\texplicit Camera(const std::string &name, class PipelineHandler *pipe);\n \t~Camera();\n \n \tstd::string name_;\n+\tclass PipelineHandler *pipe_;\n };\n \n } /* namespace libcamera */\ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex acf912bee95cbec4..f198eb4978b12239 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -52,17 +52,20 @@ namespace libcamera {\n /**\n  * \\brief Create a camera instance\n  * \\param[in] name The name of the camera device\n+ * \\param[in] pipe The pipeline handler responsible for the camera device\n  *\n  * The caller is responsible for guaranteeing unicity of the camera name.\n  *\n  * \\return A shared pointer to the newly created camera object\n  */\n-std::shared_ptr<Camera> Camera::create(const std::string &name)\n+std::shared_ptr<Camera> Camera::create(const std::string &name,\n+\t\t\t\t       class PipelineHandler *pipe)\n {\n \tstruct Allocator : std::allocator<Camera> {\n-\t\tvoid construct(void *p, const std::string &name)\n+\t\tvoid construct(void *p, const std::string &name,\n+\t\t\t       class PipelineHandler *pipe)\n \t\t{\n-\t\t\t::new(p) Camera(name);\n+\t\t\t::new(p) Camera(name, pipe);\n \t\t}\n \t\tvoid destroy(Camera *p)\n \t\t{\n@@ -70,7 +73,7 @@ std::shared_ptr<Camera> Camera::create(const std::string &name)\n \t\t}\n \t};\n \n-\treturn std::allocate_shared<Camera>(Allocator(), name);\n+\treturn std::allocate_shared<Camera>(Allocator(), name, pipe);\n }\n \n /**\n@@ -83,8 +86,8 @@ const std::string &Camera::name() const\n \treturn name_;\n }\n \n-Camera::Camera(const std::string &name)\n-\t: name_(name)\n+Camera::Camera(const std::string &name, class PipelineHandler *pipe)\n+\t: name_(name), pipe_(pipe)\n {\n }\n \ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 8cbc10acfbb571fd..48d028f7e6cd9b4d 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -171,7 +171,8 @@ void PipelineHandlerIPU3::registerCameras(CameraManager *manager)\n \t\t\tcontinue;\n \n \t\tstd::string cameraName = sensor->name() + \" \" + std::to_string(id);\n-\t\tstd::shared_ptr<Camera> camera = Camera::create(cameraName);\n+\t\tstd::shared_ptr<Camera> camera = Camera::create(cameraName,\n+\t\t\t\t\t\t\t\tthis);\n \t\tmanager->addCamera(std::move(camera));\n \n \t\tLOG(IPU3, Info)\ndiff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp\nindex 3ba69da8b77586e3..3651250b683e7810 100644\n--- a/src/libcamera/pipeline/uvcvideo.cpp\n+++ b/src/libcamera/pipeline/uvcvideo.cpp\n@@ -48,7 +48,7 @@ bool PipelineHandlerUVC::match(CameraManager *manager, DeviceEnumerator *enumera\n \n \tdev_->acquire();\n \n-\tstd::shared_ptr<Camera> camera = Camera::create(dev_->model());\n+\tstd::shared_ptr<Camera> camera = Camera::create(dev_->model(), this);\n \tmanager->addCamera(std::move(camera));\n \n \treturn true;\ndiff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp\nindex 82b9237a3d7d93e5..81d8319eb88e06d2 100644\n--- a/src/libcamera/pipeline/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc.cpp\n@@ -57,14 +57,8 @@ bool PipeHandlerVimc::match(CameraManager *manager, DeviceEnumerator *enumerator\n \n \tdev_->acquire();\n \n-\t/*\n-\t * NOTE: A more complete Camera implementation could\n-\t * be passed the MediaDevice(s) it controls here or\n-\t * a reference to the PipelineHandler. Which method\n-\t * will be chosen depends on how the Camera\n-\t * object is modeled.\n-\t */\n-\tstd::shared_ptr<Camera> camera = Camera::create(\"Dummy VIMC Camera\");\n+\tstd::shared_ptr<Camera> camera = Camera::create(\"Dummy VIMC Camera\",\n+\t\t\t\t\t\t\tthis);\n \tmanager->addCamera(std::move(camera));\n \n \treturn true;\n","prefixes":["libcamera-devel","1/3"]}