{"id":9074,"url":"https://patchwork.libcamera.org/api/1.1/patches/9074/?format=json","web_url":"https://patchwork.libcamera.org/patch/9074/","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":"<20200729115055.3840110-4-niklas.soderlund@ragnatech.se>","date":"2020-07-29T11:50:53","name":"[libcamera-devel,v5,3/5] libcamera: camera: Generate camera name from a CameraSensor","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"edb3f45d1c5be2d566cf22bee28ec062286e9f07","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":{"id":16,"url":"https://patchwork.libcamera.org/api/1.1/users/16/?format=json","username":"neg","first_name":"Niklas","last_name":"Söderlund","email":"niklas.soderlund@ragnatech.se"},"mbox":"https://patchwork.libcamera.org/patch/9074/mbox/","series":[{"id":1163,"url":"https://patchwork.libcamera.org/api/1.1/series/1163/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1163","date":"2020-07-29T11:50:50","name":"libcamera: Generate unique and stable camera names","version":5,"mbox":"https://patchwork.libcamera.org/series/1163/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/9074/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/9074/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 13708BD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 29 Jul 2020 11:51:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A398061A0A;\n\tWed, 29 Jul 2020 13:51:05 +0200 (CEST)","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 933FB6039D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 29 Jul 2020 13:51:04 +0200 (CEST)","from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de\n\t[79.202.46.202]) by bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA\n\tid c7702ddd-d191-11ea-8fb8-005056917f90;\n\tWed, 29 Jul 2020 13:51:03 +0200 (CEST)"],"X-Halon-ID":"c7702ddd-d191-11ea-8fb8-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, 29 Jul 2020 13:50:53 +0200","Message-Id":"<20200729115055.3840110-4-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.27.0","In-Reply-To":"<20200729115055.3840110-1-niklas.soderlund@ragnatech.se>","References":"<20200729115055.3840110-1-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH v5 3/5] libcamera: camera: Generate camera\n\tname from a CameraSensor","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","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>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Add a create() that generates a camera name from information in a\nCameraSensor. The intention is to help pipeline handlers that already\nuses CameraSensor to not have to worry about how to generate a unique\nand persistent name.\n\nAll pipelines that use a CameraSensor (all but UVC) are updated to make\nuse of this new function. All names of cameras created by these updated\npipelines are modified.\n\nBefore this change example of camera names:\n\n* OF based systems\n    ov5695 7-0036\n    ov2685 7-003c\n\n* ACPI based systems\n    ov13858 8-0010\n    ov5670 10-0036\n\nAfter this change the same cameras are:\n\n* OF based systems\n    base/i2c@ff160000/camera@36\n    base/i2c@ff160000/camera@3c\n\n* ACPI based systems\n    \\_SB_.PCI0.I2C2.CAM0\n    \\_SB_.PCI0.I2C4.CAM1\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n* Changes since v3\n- Update commit message.\n- Do not include property_ids.h.\n---\n include/libcamera/camera.h                     |  5 +++++\n src/libcamera/camera.cpp                       | 18 ++++++++++++++++++\n src/libcamera/pipeline/ipu3/ipu3.cpp           | 12 +++++-------\n .../pipeline/raspberrypi/raspberrypi.cpp       |  3 ++-\n src/libcamera/pipeline/rkisp1/rkisp1.cpp       |  2 +-\n src/libcamera/pipeline/simple/simple.cpp       |  2 +-\n src/libcamera/pipeline/vimc/vimc.cpp           |  4 ++--\n 7 files changed, 34 insertions(+), 12 deletions(-)","diff":"diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 4d1a4a9f52ec0fac..784510c9a79d44b9 100644\n--- a/include/libcamera/camera.h\n+++ b/include/libcamera/camera.h\n@@ -19,6 +19,7 @@\n \n namespace libcamera {\n \n+class CameraSensor;\n class FrameBuffer;\n class FrameBufferAllocator;\n class PipelineHandler;\n@@ -73,6 +74,10 @@ public:\n \t\t\t\t\t      const std::string &name,\n \t\t\t\t\t      const std::set<Stream *> &streams);\n \n+\tstatic std::shared_ptr<Camera> create(PipelineHandler *pipe,\n+\t\t\t\t\t      const CameraSensor *sensor,\n+\t\t\t\t\t      const std::set<Stream *> &streams);\n+\n \tCamera(const Camera &) = delete;\n \tCamera &operator=(const Camera &) = delete;\n \ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 69a1b4428e3f4eca..02e2369ef0089465 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -14,6 +14,7 @@\n #include <libcamera/request.h>\n #include <libcamera/stream.h>\n \n+#include \"libcamera/internal/camera_sensor.h\"\n #include \"libcamera/internal/log.h\"\n #include \"libcamera/internal/pipeline_handler.h\"\n #include \"libcamera/internal/utils.h\"\n@@ -473,6 +474,23 @@ std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,\n \treturn std::shared_ptr<Camera>(camera, Deleter());\n }\n \n+/**\n+ * \\brief Create a camera instance\n+ * \\param[in] pipe The pipeline handler responsible for the camera device\n+ * \\param[in] sensor The sensor of the camera device\n+ * \\param[in] streams Array of streams the camera provides\n+ *\n+ * Create a camera with name generated from \\a sensor.\n+ *\n+ * \\return A shared pointer to the newly created camera object\n+ */\n+std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,\n+\t\t\t\t       const CameraSensor *sensor,\n+\t\t\t\t       const std::set<Stream *> &streams)\n+{\n+\treturn Camera::create(pipe, sensor->id(), streams);\n+}\n+\n /**\n  * \\brief Retrieve the name of the camera\n  * \\context This function is \\threadsafe.\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex eb00eecfd10a89e4..72da6ed62a7f0de5 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -813,18 +813,16 @@ int PipelineHandlerIPU3::registerCameras()\n \t\t\t\t\t&IPU3CameraData::imguOutputBufferReady);\n \n \t\t/* Create and register the Camera instance. */\n-\t\tstd::string cameraName = cio2->sensor()->entity()->name();\n-\t\tstd::shared_ptr<Camera> camera = Camera::create(this,\n-\t\t\t\t\t\t\t\tcameraName,\n-\t\t\t\t\t\t\t\tstreams);\n-\n-\t\tregisterCamera(std::move(camera), std::move(data));\n+\t\tstd::shared_ptr<Camera> camera =\n+\t\t\tCamera::create(this, cio2->sensor(), streams);\n \n \t\tLOG(IPU3, Info)\n \t\t\t<< \"Registered Camera[\" << numCameras << \"] \\\"\"\n-\t\t\t<< cameraName << \"\\\"\"\n+\t\t\t<< camera->name() << \"\\\"\"\n \t\t\t<< \" connected to CSI-2 receiver \" << id;\n \n+\t\tregisterCamera(std::move(camera), std::move(data));\n+\n \t\tnumCameras++;\n \t}\n \ndiff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\nindex 82a0a4dfd6824fce..a62dd24b1ab76b87 100644\n--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n@@ -972,7 +972,8 @@ bool PipelineHandlerRPi::match(DeviceEnumerator *enumerator)\n \tstreams.insert(&data->isp_[Isp::Stats]);\n \n \t/* Create and register the camera. */\n-\tstd::shared_ptr<Camera> camera = Camera::create(this, data->sensor_->model(), streams);\n+\tstd::shared_ptr<Camera> camera =\n+\t\tCamera::create(this, data->sensor_, streams);\n \tregisterCamera(std::move(camera), std::move(data));\n \n \treturn true;\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 52a0d862417cc4ec..663e45b109aae9eb 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -971,7 +971,7 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n \n \tstd::set<Stream *> streams{ &data->stream_ };\n \tstd::shared_ptr<Camera> camera =\n-\t\tCamera::create(this, sensor->name(), streams);\n+\t\tCamera::create(this, data->sensor_, streams);\n \tregisterCamera(std::move(camera), std::move(data));\n \n \treturn 0;\ndiff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex 0bab5af86f05d63c..1258f81284590060 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -815,7 +815,7 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n \t\t\tcontinue;\n \n \t\tstd::shared_ptr<Camera> camera =\n-\t\t\tCamera::create(this, data->sensor_->entity()->name(),\n+\t\t\tCamera::create(this, data->sensor_.get(),\n \t\t\t\t       data->streams());\n \t\tregisterCamera(std::move(camera), std::move(data));\n \t}\ndiff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\nindex 4f461b928514022d..e1fc087f111b0bc4 100644\n--- a/src/libcamera/pipeline/vimc/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc/vimc.cpp\n@@ -432,9 +432,9 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)\n \t\treturn false;\n \n \t/* Create and register the camera. */\n-\tstd::string name{ \"VIMC \" + data->sensor_->model() };\n \tstd::set<Stream *> streams{ &data->stream_ };\n-\tstd::shared_ptr<Camera> camera = Camera::create(this, name, streams);\n+\tstd::shared_ptr<Camera> camera\n+\t\t= Camera::create(this, data->sensor_, streams);\n \tregisterCamera(std::move(camera), std::move(data));\n \n \treturn true;\n","prefixes":["libcamera-devel","v5","3/5"]}