[{"id":11687,"web_url":"https://patchwork.libcamera.org/comment/11687/","msgid":"<20200729080743.rrvghv5oe6sixlrq@uno.localdomain>","date":"2020-07-29T08:07:43","subject":"Re: [libcamera-devel] [PATCH v3 3/5] libcamera: camera: Generate\n\tcamera name from a CameraSensor","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Niklas,\n\nOn Wed, Jul 29, 2020 at 01:42:23AM +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 generate unique and\n\ns/how generate/how to generate/\n\n> persistent name for cameras.\n\nor \"a unique and persistent name\" or \"unique and persistent names\".\nSource: it 'sound' more correct to me, but as a non-native speaker it\nmight just be me.\n\n>\n> All pipelines that implements a CameraSensor (all but UVC) are updated\n\ns/implements/implement\n\nAnd I would say \"use\" not implement.\n\n> to make use of this new function. All names of cameras created by these\n> updated 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> ---\n>  include/libcamera/camera.h                    |  5 +++++\n>  src/libcamera/camera.cpp                      | 19 +++++++++++++++++++\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, 35 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\nShould this be a const & ? Or is this because most pipeline handlers\nhave pointers and it's nicer to pass the pointer without having to\ndereference it ?\n\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..6ad746bc2ed4ee0a 100644\n> --- a/src/libcamera/camera.cpp\n> +++ b/src/libcamera/camera.cpp\n> @@ -11,9 +11,11 @@\n>  #include <iomanip>\n>\n>  #include <libcamera/framebuffer_allocator.h>\n> +#include <libcamera/property_ids.h>\n\nWhy property_ids.h ?\n\nThe rest looks good\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n\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 +475,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.\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> 2.27.0\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 6262DBD878\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 29 Jul 2020 08:04:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BFA81617AF;\n\tWed, 29 Jul 2020 10:04:06 +0200 (CEST)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 97722605B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 29 Jul 2020 10:04:04 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 05DFB4000D;\n\tWed, 29 Jul 2020 08:04:03 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Wed, 29 Jul 2020 10:07:43 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<20200729080743.rrvghv5oe6sixlrq@uno.localdomain>","References":"<20200728233744.3503740-1-niklas.soderlund@ragnatech.se>\n\t<20200728234225.3505868-1-niklas.soderlund@ragnatech.se>\n\t<20200728234225.3505868-3-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200728234225.3505868-3-niklas.soderlund@ragnatech.se>","Subject":"Re: [libcamera-devel] [PATCH v3 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":11694,"web_url":"https://patchwork.libcamera.org/comment/11694/","msgid":"<20200729085620.GB273308@oden.dyn.berto.se>","date":"2020-07-29T08:56:20","subject":"Re: [libcamera-devel] [PATCH v3 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 Jacopo,\n\nThanks for your comments.\n\nOn 2020-07-29 10:07:43 +0200, Jacopo Mondi wrote:\n> Hi Niklas,\n> \n> On Wed, Jul 29, 2020 at 01:42:23AM +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 generate unique and\n> \n> s/how generate/how to generate/\n> \n> > persistent name for cameras.\n> \n> or \"a unique and persistent name\" or \"unique and persistent names\".\n> Source: it 'sound' more correct to me, but as a non-native speaker it\n> might just be me.\n> \n> >\n> > All pipelines that implements a CameraSensor (all but UVC) are updated\n> \n> s/implements/implement\n> \n> And I would say \"use\" not implement.\n> \n> > to make use of this new function. All names of cameras created by these\n> > updated 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> > ---\n> >  include/libcamera/camera.h                    |  5 +++++\n> >  src/libcamera/camera.cpp                      | 19 +++++++++++++++++++\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, 35 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> \n> Should this be a const & ? Or is this because most pipeline handlers\n> have pointers and it's nicer to pass the pointer without having to\n> dereference it ?\n\nThe reason is two fold.\n\n1. As you point out pipelines work with sensors as pointers so I thin \n   it's nicer to keep this interface.\n\n2. The pipe argument is a pointer and I think it's nice to keep that \n   type of arguments sing the same schema.\n\n> \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..6ad746bc2ed4ee0a 100644\n> > --- a/src/libcamera/camera.cpp\n> > +++ b/src/libcamera/camera.cpp\n> > @@ -11,9 +11,11 @@\n> >  #include <iomanip>\n> >\n> >  #include <libcamera/framebuffer_allocator.h>\n> > +#include <libcamera/property_ids.h>\n> \n> Why property_ids.h ?\n\nWops, thanks for spotting this. This is a left over from v2.\n\n> \n> The rest looks good\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks!\n\n> \n> Thanks\n>   j\n> \n> \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 +475,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.\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> > 2.27.0\n> >\n> > _______________________________________________\n> > libcamera-devel mailing list\n> > libcamera-devel@lists.libcamera.org\n> > https://lists.libcamera.org/listinfo/libcamera-devel","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 0D39ABD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 29 Jul 2020 08:56:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 97F1661176;\n\tWed, 29 Jul 2020 10:56:25 +0200 (CEST)","from mail-lf1-x136.google.com (mail-lf1-x136.google.com\n\t[IPv6:2a00:1450:4864:20::136])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A8302605B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 29 Jul 2020 10:56:23 +0200 (CEST)","by mail-lf1-x136.google.com with SMTP id v15so8040439lfg.6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 29 Jul 2020 01:56:23 -0700 (PDT)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\ty24sm265783ljy.91.2020.07.29.01.56.20\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 29 Jul 2020 01:56:20 -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=\"Aql00i86\"; 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=MeWH/kMrbqytCeqmgUcegLmTdKjiEjOj+URnSmxkock=;\n\tb=Aql00i86yHpP9lWqAIZYhzQBpLBceKao5PPu5Hw95mdOpMasnhecF7fZ/WqD8ZEwTF\n\tTr+u+FP7nmUcXzZVzZ6r0/cHYYVETIh0V8JSmBIK06sHiGHWdEYeLP5NGxVPqygNZX6O\n\tDaHjVzdBSUw7ZCdwzmb1eKz36ZbdXteDkCYULm8Lkh7KZly499SsJgG+08Djm0Xf3qRp\n\tSGEfqzlQghFAMuwiA2eLuO3WTCkqImlUnlDDZaEuzAg3R7Pjf7U8dtz9kyY8Hoz3Zo2O\n\tfH3edpNpyGhTq7PMS7Vi+85kMS0tFvV91b2gFbv1FdcNnoJ0CUARpruEsjbWydnxfghE\n\tXx0w==","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=MeWH/kMrbqytCeqmgUcegLmTdKjiEjOj+URnSmxkock=;\n\tb=jUinPr28R1m+GiZmnfKOG5y0DVbP2prT82D6wknyfsw8pe5yBeeimjFJhjiF3hyh7C\n\tNgG5DHqb+FUJYHnZ+2KfQSL3bTFkveTV4Drrg9q4RIY4dvrfnXF2k26ySW+fM+oKQz8W\n\t76yGmGRlvJdfoOw5LXdMRAqztwHFNe44E41YSKIG0JqY5HNs5QZHvbh9ff7jpMGc4m2i\n\tyDkkhG9HEETrk8O9PLViJsy/nzBZvBxAe+KPV2P6+163CqesHIcRbLkd8DAIWEkYPv3V\n\tUPHGBuX8yx1R10lEknH4c1kNTo2jb+SE9txxHImAkoT/WDOUJ2N9Ri4v6Qf5OFoI4P9m\n\tBaNQ==","X-Gm-Message-State":"AOAM5303XE+trNdFk/5E3oUZcPFBtJM38Lim5W2JnjOL700uBQQtfh7R\n\trVXsQZ8/fTiKoY4JlZ7BAHa/F7EfqrM=","X-Google-Smtp-Source":"ABdhPJwYQshC2tuDbMAKd3s5z3H6Xs88Jdaa+Ni/2yPXFWinNSLc8er8jDP9RC8y+AiFH2xvnQHKGg==","X-Received":"by 2002:a19:4809:: with SMTP id\n\tv9mr16713090lfa.201.1596012981373; \n\tWed, 29 Jul 2020 01:56:21 -0700 (PDT)","Date":"Wed, 29 Jul 2020 10:56:20 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<20200729085620.GB273308@oden.dyn.berto.se>","References":"<20200728233744.3503740-1-niklas.soderlund@ragnatech.se>\n\t<20200728234225.3505868-1-niklas.soderlund@ragnatech.se>\n\t<20200728234225.3505868-3-niklas.soderlund@ragnatech.se>\n\t<20200729080743.rrvghv5oe6sixlrq@uno.localdomain>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200729080743.rrvghv5oe6sixlrq@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH v3 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>"}}]