[{"id":27364,"web_url":"https://patchwork.libcamera.org/comment/27364/","msgid":"<npkf7d6rz5zdxmagrqjl2j2yyyxmpbtus6wsqbutsb57sz4x6b@wah64dxpyoig>","date":"2023-06-16T06:53:14","subject":"Re: [libcamera-devel] [PATCH v4 5/5] libcamera: pipeline: Register\n\tdevice numbers with camera","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Kieran\n\nOn Thu, Jun 15, 2023 at 06:26:08PM +0100, Kieran Bingham wrote:\n> Register the identified device numbers with each camera as the Devices\n\nThis is now SystemDevices\n\n> property.\n>\n> This facilitates camera daemons or other systems to identify which\n> devices are being managed by libcamera, and can prevent duplication of\n> camera resources.\n>\n> As the Devices property now provides this list of devices, use it\n\nditto :)\n\n> directly from within the CameraManager when adding a Camera rather than\n> passing it through the internal API.\n>\n> Tested-by: Ashok Sidipotu <ashok.sidipotu@collabora.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>\n> ---\n> v4\n>  - Rename property\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  include/libcamera/internal/camera_manager.h |  3 +--\n>  src/libcamera/camera_manager.cpp            | 14 +++++++++-----\n>  src/libcamera/pipeline_handler.cpp          | 12 ++++++++++--\n>  3 files changed, 20 insertions(+), 9 deletions(-)\n>\n> diff --git a/include/libcamera/internal/camera_manager.h b/include/libcamera/internal/camera_manager.h\n> index 84aac499ea13..cdf009a9c626 100644\n> --- a/include/libcamera/internal/camera_manager.h\n> +++ b/include/libcamera/internal/camera_manager.h\n> @@ -35,8 +35,7 @@ public:\n>  \tPrivate();\n>\n>  \tint start();\n> -\tvoid addCamera(std::shared_ptr<Camera> camera,\n> -\t\t       const std::vector<dev_t> &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_);\n> +\tvoid addCamera(std::shared_ptr<Camera> camera) LIBCAMERA_TSA_EXCLUDES(mutex_);\n>  \tvoid removeCamera(std::shared_ptr<Camera> camera) LIBCAMERA_TSA_EXCLUDES(mutex_);\n>\n>  \t/*\n> diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> index cafd7bce574e..31d45c42fde0 100644\n> --- a/src/libcamera/camera_manager.cpp\n> +++ b/src/libcamera/camera_manager.cpp\n> @@ -11,7 +11,9 @@\n>  #include <libcamera/base/utils.h>\n>\n>  #include <libcamera/camera.h>\n> +#include <libcamera/property_ids.h>\n>\n> +#include \"libcamera/internal/camera.h\"\n>  #include \"libcamera/internal/device_enumerator.h\"\n>  #include \"libcamera/internal/pipeline_handler.h\"\n>\n> @@ -151,19 +153,17 @@ void CameraManager::Private::cleanup()\n>  /**\n>   * \\brief Add a camera to the camera manager\n>   * \\param[in] camera The camera to be added\n> - * \\param[in] devnums The device numbers to associate with \\a camera\n>   *\n>   * This function is called by pipeline handlers to register the cameras they\n>   * handle with the camera manager. Registered cameras are immediately made\n>   * available to the system.\n>   *\n> - * \\a devnums are used by the V4L2 compatibility layer to map V4L2 device nodes\n> - * to Camera instances.\n> + * Device numbers from the Devices property are used by the V4L2 compatibility\n\nhere as well\n\n> + * layer to map V4L2 device nodes to Camera instances.\n>   *\n>   * \\context This function shall be called from the CameraManager thread.\n>   */\n> -void CameraManager::Private::addCamera(std::shared_ptr<Camera> camera,\n> -\t\t\t\t       const std::vector<dev_t> &devnums)\n> +void CameraManager::Private::addCamera(std::shared_ptr<Camera> camera)\n>  {\n>  \tASSERT(Thread::current() == this);\n>\n> @@ -178,6 +178,10 @@ void CameraManager::Private::addCamera(std::shared_ptr<Camera> camera,\n>  \t\t}\n>  \t}\n>\n> +\tauto devnums = camera->properties()\n> +\t\t\t       .get(properties::SystemDevices)\n> +\t\t\t       .value_or(Span<int64_t>{});\n> +\n>  \tcameras_.push_back(std::move(camera));\n>\n>  \tunsigned int index = cameras_.size() - 1;\n> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\n> index 49092ea88a58..9c74c6cfda70 100644\n> --- a/src/libcamera/pipeline_handler.cpp\n> +++ b/src/libcamera/pipeline_handler.cpp\n> @@ -17,6 +17,7 @@\n>\n>  #include <libcamera/camera.h>\n>  #include <libcamera/framebuffer.h>\n> +#include <libcamera/property_ids.h>\n>\n>  #include \"libcamera/internal/camera.h\"\n>  #include \"libcamera/internal/camera_manager.h\"\n> @@ -612,7 +613,7 @@ void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)\n>  \t * Walk the entity list and map the devnums of all capture video nodes\n>  \t * to the camera.\n>  \t */\n> -\tstd::vector<dev_t> devnums;\n> +\tstd::vector<int64_t> devnums;\n>  \tfor (const std::shared_ptr<MediaDevice> &media : mediaDevices_) {\n>  \t\tfor (const MediaEntity *entity : media->entities()) {\n>  \t\t\tif (entity->pads().size() == 1 &&\n> @@ -624,7 +625,14 @@ void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)\n>  \t\t}\n>  \t}\n>\n> -\tmanager_->_d()->addCamera(std::move(camera), devnums);\n> +\t/*\n> +\t * Store the associated devices as a property of the camera to allow\n> +\t * systems to identify which devices are managed by libcamera.\n> +\t */\n> +\tCamera::Private *data = camera->_d();\n> +\tdata->properties_.set(properties::SystemDevices, devnums);\n> +\n> +\tmanager_->_d()->addCamera(std::move(camera));\n>  }\n>\n>  /**\n> --\n> 2.34.1\n>","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 EED4EBD78E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 16 Jun 2023 06:53:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3FCF2628B5;\n\tFri, 16 Jun 2023 08:53:19 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0B6F46002B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 16 Jun 2023 08:53:18 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2001:b07:5d2e:52c9:72c3:346:a663:c82d])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D97DF8E1;\n\tFri, 16 Jun 2023 08:52:45 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1686898399;\n\tbh=3geDceXB//QYhSK4+lCrbgPiIvCqgJwtvFXP1UvDlgk=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=s7m/vPD+kXCCrKmTmfhu0lrxJZq5BQTER1C0umkAePPjQR1HWo805iVJbEFDvGPHr\n\tRGcsewVJy3GMjXmMyTqqaGntM0eVj8Rm0OLWWmJHiR2Q277kqMzoDAs94qlHmt6Wj2\n\tpafnhd/zKAv2EORiJ6ecW+cEHkzSFRg2DzvLQAOKnD9OPBpwGEzMSd6GvBYkT940zW\n\tTtXGgXG+FFwSmJns4Bma44c1/2ydvH/1/vkDW7KbIGs8n+eHVr6KpaYrHpGDrvSAHJ\n\t6yrggIRFuXK0tR4AlXamuQdqMxEc8xN3tKsUVAhsjcRyoN0pooB2LLpQyq1ui8yYhO\n\tmYBmAwx/GwwBw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1686898366;\n\tbh=3geDceXB//QYhSK4+lCrbgPiIvCqgJwtvFXP1UvDlgk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=fzr/2gO8qiAEy8iSVi173bEXvLbgsJtGwBu8qTj57O89su5+LosLzOReTbsUfaDrs\n\tS2NQWybelY1x8kl3XSBQm2/g6Y3ILdvH6HnX95eL6FlwT4QQa5cmUQxFbq4UFIlvbt\n\tou5pZVhmBnno+L3rWiM92zYu4ZqB2qRd7kXHo594="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"fzr/2gO8\"; dkim-atps=neutral","Date":"Fri, 16 Jun 2023 08:53:14 +0200","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<npkf7d6rz5zdxmagrqjl2j2yyyxmpbtus6wsqbutsb57sz4x6b@wah64dxpyoig>","References":"<20230615172608.378258-1-kieran.bingham@ideasonboard.com>\n\t<20230615172608.378258-6-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20230615172608.378258-6-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 5/5] libcamera: pipeline: Register\n\tdevice numbers with camera","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>","From":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tAshok Sidipotu <ashok.sidipotu@collabora.com>,\n\tlibcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":27365,"web_url":"https://patchwork.libcamera.org/comment/27365/","msgid":"<168690186399.3585053.5250824187099920743@Monstersaurus>","date":"2023-06-16T07:51:03","subject":"Re: [libcamera-devel] [PATCH v4 5/5] libcamera: pipeline: Register\n\tdevice numbers with camera","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Jacopo Mondi (2023-06-16 07:53:14)\n> Hi Kieran\n> \n> On Thu, Jun 15, 2023 at 06:26:08PM +0100, Kieran Bingham wrote:\n> > Register the identified device numbers with each camera as the Devices\n> \n> This is now SystemDevices\n> \n> > property.\n> >\n> > This facilitates camera daemons or other systems to identify which\n> > devices are being managed by libcamera, and can prevent duplication of\n> > camera resources.\n> >\n> > As the Devices property now provides this list of devices, use it\n> \n> ditto :)\n> \n> > directly from within the CameraManager when adding a Camera rather than\n> > passing it through the internal API.\n> >\n> > Tested-by: Ashok Sidipotu <ashok.sidipotu@collabora.com>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >\n> > ---\n> > v4\n> >  - Rename property\n> >\n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > ---\n> >  include/libcamera/internal/camera_manager.h |  3 +--\n> >  src/libcamera/camera_manager.cpp            | 14 +++++++++-----\n> >  src/libcamera/pipeline_handler.cpp          | 12 ++++++++++--\n> >  3 files changed, 20 insertions(+), 9 deletions(-)\n> >\n> > diff --git a/include/libcamera/internal/camera_manager.h b/include/libcamera/internal/camera_manager.h\n> > index 84aac499ea13..cdf009a9c626 100644\n> > --- a/include/libcamera/internal/camera_manager.h\n> > +++ b/include/libcamera/internal/camera_manager.h\n> > @@ -35,8 +35,7 @@ public:\n> >       Private();\n> >\n> >       int start();\n> > -     void addCamera(std::shared_ptr<Camera> camera,\n> > -                    const std::vector<dev_t> &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_);\n> > +     void addCamera(std::shared_ptr<Camera> camera) LIBCAMERA_TSA_EXCLUDES(mutex_);\n> >       void removeCamera(std::shared_ptr<Camera> camera) LIBCAMERA_TSA_EXCLUDES(mutex_);\n> >\n> >       /*\n> > diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> > index cafd7bce574e..31d45c42fde0 100644\n> > --- a/src/libcamera/camera_manager.cpp\n> > +++ b/src/libcamera/camera_manager.cpp\n> > @@ -11,7 +11,9 @@\n> >  #include <libcamera/base/utils.h>\n> >\n> >  #include <libcamera/camera.h>\n> > +#include <libcamera/property_ids.h>\n> >\n> > +#include \"libcamera/internal/camera.h\"\n> >  #include \"libcamera/internal/device_enumerator.h\"\n> >  #include \"libcamera/internal/pipeline_handler.h\"\n> >\n> > @@ -151,19 +153,17 @@ void CameraManager::Private::cleanup()\n> >  /**\n> >   * \\brief Add a camera to the camera manager\n> >   * \\param[in] camera The camera to be added\n> > - * \\param[in] devnums The device numbers to associate with \\a camera\n> >   *\n> >   * This function is called by pipeline handlers to register the cameras they\n> >   * handle with the camera manager. Registered cameras are immediately made\n> >   * available to the system.\n> >   *\n> > - * \\a devnums are used by the V4L2 compatibility layer to map V4L2 device nodes\n> > - * to Camera instances.\n> > + * Device numbers from the Devices property are used by the V4L2 compatibility\n> \n> here as well\n\nAyeee thanks.\n\nI'll hold of a bit longer, but I think that's the last fix before I push\nthese. If there's nothing else I'll fix those and push.\n\n--\nKieran\n\n\n> \n> > + * layer to map V4L2 device nodes to Camera instances.\n> >   *\n> >   * \\context This function shall be called from the CameraManager thread.\n> >   */\n> > -void CameraManager::Private::addCamera(std::shared_ptr<Camera> camera,\n> > -                                    const std::vector<dev_t> &devnums)\n> > +void CameraManager::Private::addCamera(std::shared_ptr<Camera> camera)\n> >  {\n> >       ASSERT(Thread::current() == this);\n> >\n> > @@ -178,6 +178,10 @@ void CameraManager::Private::addCamera(std::shared_ptr<Camera> camera,\n> >               }\n> >       }\n> >\n> > +     auto devnums = camera->properties()\n> > +                            .get(properties::SystemDevices)\n> > +                            .value_or(Span<int64_t>{});\n> > +\n> >       cameras_.push_back(std::move(camera));\n> >\n> >       unsigned int index = cameras_.size() - 1;\n> > diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\n> > index 49092ea88a58..9c74c6cfda70 100644\n> > --- a/src/libcamera/pipeline_handler.cpp\n> > +++ b/src/libcamera/pipeline_handler.cpp\n> > @@ -17,6 +17,7 @@\n> >\n> >  #include <libcamera/camera.h>\n> >  #include <libcamera/framebuffer.h>\n> > +#include <libcamera/property_ids.h>\n> >\n> >  #include \"libcamera/internal/camera.h\"\n> >  #include \"libcamera/internal/camera_manager.h\"\n> > @@ -612,7 +613,7 @@ void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)\n> >        * Walk the entity list and map the devnums of all capture video nodes\n> >        * to the camera.\n> >        */\n> > -     std::vector<dev_t> devnums;\n> > +     std::vector<int64_t> devnums;\n> >       for (const std::shared_ptr<MediaDevice> &media : mediaDevices_) {\n> >               for (const MediaEntity *entity : media->entities()) {\n> >                       if (entity->pads().size() == 1 &&\n> > @@ -624,7 +625,14 @@ void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)\n> >               }\n> >       }\n> >\n> > -     manager_->_d()->addCamera(std::move(camera), devnums);\n> > +     /*\n> > +      * Store the associated devices as a property of the camera to allow\n> > +      * systems to identify which devices are managed by libcamera.\n> > +      */\n> > +     Camera::Private *data = camera->_d();\n> > +     data->properties_.set(properties::SystemDevices, devnums);\n> > +\n> > +     manager_->_d()->addCamera(std::move(camera));\n> >  }\n> >\n> >  /**\n> > --\n> > 2.34.1\n> >","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 CD898C322E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 16 Jun 2023 07:51:08 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2C8AA628AD;\n\tFri, 16 Jun 2023 09:51:08 +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 8073361E48\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 16 Jun 2023 09:51:06 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(aztw-30-b2-v4wan-166917-cust845.vm26.cable.virginm.net\n\t[82.37.23.78])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 4B36E2B3;\n\tFri, 16 Jun 2023 09:50:34 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1686901868;\n\tbh=DmG8nOVl8wKEb7csEZudPD9LZAbw4VwsYu88shMtHF0=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=koxyBwiEhy48qILBr9CtRTYhV3piMCSopXGC/tFUkF3UPwo33Saq3m0aEMAUrOvW5\n\t0EzxftblRQqOLQonhaPWDsW6idSnpQtTOOieGyFC1wIKJ2yYO6VnYCt8NFS30CUghk\n\tPwO6gnVxwb12QG7o0xtQRBVKNtyT8aAV1vmw40PWuGOyZwBviZTEV96M7MUCvIySkU\n\tds5lA4TYfPwIDwrg09VdAQriFkLtxGgIFWAe6cg1anLWstJUVB729pTr7xhjObZKMJ\n\tfJU2BYXMZqo80vGI0hnACT/zfDEOyG1hzP6wCrd6+FoRxcNMf9jlvCMcBwu1bGT4e4\n\tKKoJoPoaxoiSQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1686901834;\n\tbh=DmG8nOVl8wKEb7csEZudPD9LZAbw4VwsYu88shMtHF0=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=t1L3h9olYC0LiQf4Lwxj+4oNXPZo+LejLg9c2Y4nt/TTEic+RkLonvfS3+4wEw2x+\n\tfqMcn5tGCaTIm1tGM0ObudkWInPa6fXwQx5gFSyyIf6yUogj3HBQcA0RclNggs3rNq\n\t8LFWnYzvapOaD/r5poPdg6hsF9x4/OZvsb4nj7pE="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"t1L3h9ol\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<npkf7d6rz5zdxmagrqjl2j2yyyxmpbtus6wsqbutsb57sz4x6b@wah64dxpyoig>","References":"<20230615172608.378258-1-kieran.bingham@ideasonboard.com>\n\t<20230615172608.378258-6-kieran.bingham@ideasonboard.com>\n\t<npkf7d6rz5zdxmagrqjl2j2yyyxmpbtus6wsqbutsb57sz4x6b@wah64dxpyoig>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Date":"Fri, 16 Jun 2023 08:51:03 +0100","Message-ID":"<168690186399.3585053.5250824187099920743@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v4 5/5] libcamera: pipeline: Register\n\tdevice numbers with camera","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>","From":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tAshok Sidipotu <ashok.sidipotu@collabora.com>,\n\tlibcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]