{"id":8857,"url":"https://patchwork.libcamera.org/api/patches/8857/?format=json","web_url":"https://patchwork.libcamera.org/patch/8857/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/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":"<20200718132324.867815-9-niklas.soderlund@ragnatech.se>","date":"2020-07-18T13:23:23","name":"[libcamera-devel,8/9] libcamera: camera: Add create() that operates on CameraSensor","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"2bcfac2ebad1e72f3b7b4bd267b30281b620fe4c","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/?format=json","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"delegate":{"id":16,"url":"https://patchwork.libcamera.org/api/users/16/?format=json","username":"neg","first_name":"Niklas","last_name":"Söderlund","email":"niklas.soderlund@ragnatech.se"},"mbox":"https://patchwork.libcamera.org/patch/8857/mbox/","series":[{"id":1115,"url":"https://patchwork.libcamera.org/api/series/1115/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1115","date":"2020-07-18T13:23:15","name":"libcamera: camera: Add camera ID","version":1,"mbox":"https://patchwork.libcamera.org/series/1115/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/8857/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/8857/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 011A4C2E68\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 18 Jul 2020 13:23:40 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AFF47607BD;\n\tSat, 18 Jul 2020 15:23:39 +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 20CAC6071C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 18 Jul 2020 15:23:36 +0200 (CEST)","from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de\n\t[79.202.46.202]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA\n\tid e1449c5b-c8f9-11ea-933e-005056917a89;\n\tSat, 18 Jul 2020 15:23:34 +0200 (CEST)"],"X-Halon-ID":"e1449c5b-c8f9-11ea-933e-005056917a89","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":"Sat, 18 Jul 2020 15:23:23 +0200","Message-Id":"<20200718132324.867815-9-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.27.0","In-Reply-To":"<20200718132324.867815-1-niklas.soderlund@ragnatech.se>","References":"<20200718132324.867815-1-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH 8/9] libcamera: camera: Add create() that\n\toperates on 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":"To make help pipeline handlers name their cameras more uniformly add a\nsecond Camera::create() method that takes a CameraSensor instead of a\nname and ID as arguments. The CameraSensor is used to generate the name\nand ID for the camera.\n\nThe new create() method is optional and pipelines may still control the\nname and ID themself if they wish.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n include/libcamera/camera.h                    |  5 +++++\n src/libcamera/camera.cpp                      | 20 +++++++++++++++++++\n src/libcamera/pipeline/ipu3/ipu3.cpp          | 10 ++++------\n .../pipeline/raspberrypi/raspberrypi.cpp      |  4 +---\n src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  3 +--\n src/libcamera/pipeline/simple/simple.cpp      |  4 +---\n src/libcamera/pipeline/vimc/vimc.cpp          |  3 +--\n 7 files changed, 33 insertions(+), 16 deletions(-)","diff":"diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 132225a37dcd1ef4..aa283bcb4713506b 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@@ -74,6 +75,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 638d15e0da5e1ca9..91498f23092cec39 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -14,7 +14,9 @@\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/media_object.h\"\n #include \"libcamera/internal/pipeline_handler.h\"\n #include \"libcamera/internal/utils.h\"\n \n@@ -477,6 +479,24 @@ 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 and ID 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(), sensor->entity()->name(),\n+\t\t\t      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 09bab78b999b8b52..9d01c6b714e880b9 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -813,19 +813,17 @@ 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\tcio2->sensor()->id(),\n-\t\t\t\t\t\t\t\tcameraName,\n+\t\t\t\t\t\t\t\tcio2->sensor(),\n \t\t\t\t\t\t\t\tstreams);\n \n-\t\tregisterCamera(std::move(camera), std::move(data));\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 bead2a6220e207f5..de0fe0fb4e09d82b 100644\n--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n@@ -973,9 +973,7 @@ 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,\n-\t\t\t\t\t\t\tdata->sensor_->id(),\n-\t\t\t\t\t\t\tdata->sensor_->entity()->name(),\n+\tstd::shared_ptr<Camera> camera = Camera::create(this, data->sensor_,\n \t\t\t\t\t\t\tstreams);\n \tregisterCamera(std::move(camera), std::move(data));\n \ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 6f3699fe1a53eeaf..663e45b109aae9eb 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -971,8 +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, data->sensor_->id(), sensor->name(),\n-\t\t\t       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 3c27cc28f672e020..cc8e14d511799dab 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -800,9 +800,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_->id(),\n-\t\t\t\t       data->sensor_->entity()->name(),\n-\t\t\t\t       data->streams());\n+\t\t\tCamera::create(this, data->sensor_.get(), data->streams());\n \t\tregisterCamera(std::move(camera), std::move(data));\n \t}\n \ndiff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\nindex 6560b632ae55b304..225c1bfb453e17bb 100644\n--- a/src/libcamera/pipeline/vimc/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc/vimc.cpp\n@@ -433,8 +433,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)\n \n \t/* Create and register the camera. */\n \tstd::set<Stream *> streams{ &data->stream_ };\n-\tstd::shared_ptr<Camera> camera = Camera::create(this, data->sensor_->id(),\n-\t\t\t\t\t\t\tdata->sensor_->entity()->name(),\n+\tstd::shared_ptr<Camera> camera = Camera::create(this, data->sensor_,\n \t\t\t\t\t\t\tstreams);\n \tregisterCamera(std::move(camera), std::move(data));\n \n","prefixes":["libcamera-devel","8/9"]}