[{"id":11775,"web_url":"https://patchwork.libcamera.org/comment/11775/","msgid":"<20200802203904.GE23801@pendragon.ideasonboard.com>","date":"2020-08-02T20:39:04","subject":"Re: [libcamera-devel] [PATCH v5 3/5] libcamera: camera: Generate\n\tcamera name from a CameraSensor","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Niklas,\n\nThank you for the patch.\n\nOn Wed, Jul 29, 2020 at 01:50:53PM +0200, Niklas Söderlund wrote:\n> Add a create() that generates a camera name from information in a\n> CameraSensor. The intention is to help pipeline handlers that already\n> uses CameraSensor to not have to worry about how to generate a unique\n> and persistent name.\n> \n> All pipelines that use a CameraSensor (all but UVC) are updated to make\n> use of this new function. All names of cameras created by these updated\n> pipelines are modified.\n> \n> Before 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> \n> After 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> \n> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> Reviewed-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(-)\n> \n> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> index 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>  \n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index 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\nI think I'd prefer passing the id() directly to the existing create()\nfunction, to have a single API for pipeline handlers. I agree there's\npros and cons though, so I can be convinced otherwise.\n\nIn any case, the name argument to the existing function should be\nrenamed to id, and the documentation updated accordingly to explain what\nthe id and and how is has to be unique and stable (if we keep a single\ncreate() implementation, likely with a mention that the id shall be\nretrieved from a CameraSensor for the pipeline handlers that can do so).\n\n> +\n>  /**\n>   * \\brief Retrieve the name of the camera\n>   * \\context This function is \\threadsafe.\n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index 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>  \n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index 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;\n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 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;\n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index 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}\n> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> index 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;","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 6EF5BBD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun,  2 Aug 2020 20:39:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EF02E609B2;\n\tSun,  2 Aug 2020 22:39:16 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6708460393\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun,  2 Aug 2020 22:39:15 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C0B0E296;\n\tSun,  2 Aug 2020 22:39:14 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"fNao//oX\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1596400754;\n\tbh=RscXlK/oLHolnY8GlNnAz1q0AIq7rH7S9T8yeQtSmRk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=fNao//oXhb6jS9UgNZq65p2WfFa/NPTnrzuUkY9TwqZA0CDjETenoMIGA5qhrFuzA\n\tADPUGwm8gqPzmwKoZXmTWlFwZ8wrW8NwUzVOhgYvAfA6SWCGNSwU32Nk5gRpa/Qbx2\n\tlrP+gs+oiPK5BTkEFW4T3cEYRIqE8d6G/MtDjYLY=","Date":"Sun, 2 Aug 2020 23:39:04 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<20200802203904.GE23801@pendragon.ideasonboard.com>","References":"<20200729115055.3840110-1-niklas.soderlund@ragnatech.se>\n\t<20200729115055.3840110-4-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200729115055.3840110-4-niklas.soderlund@ragnatech.se>","Subject":"Re: [libcamera-devel] [PATCH v5 3/5] libcamera: camera: Generate\n\tcamera name 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>","Cc":"libcamera-devel@lists.libcamera.org","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>"}},{"id":11781,"web_url":"https://patchwork.libcamera.org/comment/11781/","msgid":"<20200802230417.GB1945056@oden.dyn.berto.se>","date":"2020-08-02T23:04:17","subject":"Re: [libcamera-devel] [PATCH v5 3/5] libcamera: camera: Generate\n\tcamera name from a CameraSensor","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your feedback.\n\nOn 2020-08-02 23:39:04 +0300, Laurent Pinchart wrote:\n> Hi Niklas,\n> \n> Thank you for the patch.\n> \n> On Wed, Jul 29, 2020 at 01:50:53PM +0200, Niklas Söderlund wrote:\n> > Add a create() that generates a camera name from information in a\n> > CameraSensor. The intention is to help pipeline handlers that already\n> > uses CameraSensor to not have to worry about how to generate a unique\n> > and persistent name.\n> > \n> > All pipelines that use a CameraSensor (all but UVC) are updated to make\n> > use of this new function. All names of cameras created by these updated\n> > pipelines are modified.\n> > \n> > Before 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> > \n> > After 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> > \n> > Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> > Reviewed-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(-)\n> > \n> > diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> > index 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> >  \n> > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > index 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> I think I'd prefer passing the id() directly to the existing create()\n> function, to have a single API for pipeline handlers. I agree there's\n> pros and cons though, so I can be convinced otherwise.\n\nWe can always add this as a helper late. I will remove this for v6.\n\n> \n> In any case, the name argument to the existing function should be\n> renamed to id, and the documentation updated accordingly to explain what\n> the id and and how is has to be unique and stable (if we keep a single\n> create() implementation, likely with a mention that the id shall be\n> retrieved from a CameraSensor for the pipeline handlers that can do so).\n\nAgreed I will do so in v6.\n\n> \n> > +\n> >  /**\n> >   * \\brief Retrieve the name of the camera\n> >   * \\context This function is \\threadsafe.\n> > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > index 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> >  \n> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > index 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;\n> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > index 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;\n> > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > index 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}\n> > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> > index 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> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 3008ABD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun,  2 Aug 2020 23:04:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C28CC603F7;\n\tMon,  3 Aug 2020 01:04:21 +0200 (CEST)","from mail-lj1-x22b.google.com (mail-lj1-x22b.google.com\n\t[IPv6:2a00:1450:4864:20::22b])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 023F760398\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  3 Aug 2020 01:04:19 +0200 (CEST)","by mail-lj1-x22b.google.com with SMTP id s16so22474169ljc.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 02 Aug 2020 16:04:19 -0700 (PDT)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\t20sm3525696ljj.51.2020.08.02.16.04.17\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tSun, 02 Aug 2020 16:04:18 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"K8T07veb\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=M7thrhENelSxZ5bpUu86zEFsKh7h35NEp1NQJVAvPdc=;\n\tb=K8T07vebSaqvZ8e91QsPWlxbkCbXeb7A3yzfHpGSLPj7sxYvCrmigY4YryGhhh4W45\n\tZnyrInjGccBdWItjW+/5KZeJwbOdOoHzw3+2KeYOpesY5owY/Z1UsCZCBAQ5vX7QRYht\n\trAj+EUY+PYJnPH7uwFJuu5Ank+o3snL9YlRdNsOyVSo5jvJw+fJZrdBisu1uLTgVetv0\n\tjfGHUZgCS813SoN3Xy72iO4WoxOXAQPn4oSjH7uarNBgFE4kV14Z1l5y+aa9C38YT9nn\n\t9re7Wz+nZvEVTdY3dachRFJrz5VrT5idDT9fCA3bWWYjltbbM3R7GDQZ5piirvZ+kp+m\n\t2VTA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=M7thrhENelSxZ5bpUu86zEFsKh7h35NEp1NQJVAvPdc=;\n\tb=hBmiDykbHwqc2gbBaq3Fe7xrTJsoz3EYq2PjurIfdzpcC757+BcDyVB/qpLyDYRtsl\n\tXiQiVSF3xUmsghvsZv9Ux5SlAfN+tzNiMylRw1qmwupB9z8UKuVCgoa/nFkF4vQIe4vb\n\t5k2HbqM0cfFTWip1DkKwEYnrkXtfZQOh8sneO5ZJaYUzKIHbl5CDEhD3yuU9hNAJKlZT\n\t5rgUOSCCJ74v/FwD5MI+JZd1p9joFh2VVpyOfLXppIsP4deotUosakmL0INW4e9HJGhe\n\tSPKiSdoJiUcViTCIekKzg2CMwSECwBf8GJNTZPEV6s8R+z7u8fw+fe8vn1hNuSmoEc+N\n\tbupg==","X-Gm-Message-State":"AOAM530+HxjrIP04qXMRWzUUD2HT/a1a66+/7cPf6E3WnIEGHV7QylJk\n\tDeLhxHa0VarsDNU+mmZq4NsOZw==","X-Google-Smtp-Source":"ABdhPJw4GD9VN3RV/4RZHS1quvfdAZQZ32Nj7dgsWD50tD/R2/uUsvQVdrRyZtA3Grw1FGx3slP5Qw==","X-Received":"by 2002:a2e:9654:: with SMTP id\n\tz20mr6229917ljh.189.1596409458991; \n\tSun, 02 Aug 2020 16:04:18 -0700 (PDT)","Date":"Mon, 3 Aug 2020 01:04:17 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20200802230417.GB1945056@oden.dyn.berto.se>","References":"<20200729115055.3840110-1-niklas.soderlund@ragnatech.se>\n\t<20200729115055.3840110-4-niklas.soderlund@ragnatech.se>\n\t<20200802203904.GE23801@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200802203904.GE23801@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v5 3/5] libcamera: camera: Generate\n\tcamera name 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>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]