[{"id":24849,"web_url":"https://patchwork.libcamera.org/comment/24849/","msgid":"<166193673780.15972.18297645976662402205@Monstersaurus>","date":"2022-08-31T09:05:37","subject":"Re: [libcamera-devel] [PATCH v9 4/7] qcam: CamSelectDialog: Display\n\tLocation and Model propety of camera","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Utkarsh Tiwari via libcamera-devel (2022-08-31 06:49:35)\n> The camera selection dialog currently only displays the camera Id.\n> Display the camera location and camera model if available.\n> \n> Signed-off-by: Utkarsh Tiwari <utkarsh02t@gmail.com>\n> ---\n> Difference from v9:\n>     1. Remove handleCameraChange and use updateCamInfo directly\n>     2. QLabel forward-declare\n>     3. Rename cameraProperties to just properties\n>  src/qcam/cam_select_dialog.cpp | 50 ++++++++++++++++++++++++++++++++++\n>  src/qcam/cam_select_dialog.h   |  8 ++++++\n>  2 files changed, 58 insertions(+)\n> \n> diff --git a/src/qcam/cam_select_dialog.cpp b/src/qcam/cam_select_dialog.cpp\n> index f82930cc..6543228a 100644\n> --- a/src/qcam/cam_select_dialog.cpp\n> +++ b/src/qcam/cam_select_dialog.cpp\n> @@ -7,12 +7,15 @@\n>  \n>  #include \"cam_select_dialog.h\"\n>  \n> +#include <memory>\n> +\n>  #include <libcamera/camera.h>\n>  #include <libcamera/camera_manager.h>\n>  \n>  #include <QComboBox>\n>  #include <QDialogButtonBox>\n>  #include <QFormLayout>\n> +#include <QLabel>\n>  #include <QString>\n>  \n>  CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager *cameraManager,\n> @@ -27,6 +30,14 @@ CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager *cameraManag\n>         for (const auto &cam : cm_->cameras())\n>                 cameraIdComboBox_->addItem(QString::fromStdString(cam->id()));\n>  \n> +       /* Set camera information labels. */\n> +       cameraLocation_ = new QLabel;\n> +       cameraModel_ = new QLabel;\n> +\n> +       updateCamInfo(cameraIdComboBox_->currentText());\n> +       connect(cameraIdComboBox_, &QComboBox::currentTextChanged,\n> +               this, &CameraSelectorDialog::updateCamInfo);\n> +\n>         /* Setup the QDialogButton Box */\n>         QDialogButtonBox *buttonBox =\n>                 new QDialogButtonBox(QDialogButtonBox::Ok |\n> @@ -39,6 +50,8 @@ CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager *cameraManag\n>  \n>         /* Set the layout. */\n>         layout->addRow(\"Camera:\", cameraIdComboBox_);\n> +       layout->addRow(\"Location:\", cameraLocation_);\n> +       layout->addRow(\"Model:\", cameraModel_);\n>         layout->addWidget(buttonBox);\n>  }\n>  \n> @@ -60,3 +73,40 @@ void CameraSelectorDialog::removeCamera(QString cameraId)\n>         int cameraIndex = cameraIdComboBox_->findText(cameraId);\n>         cameraIdComboBox_->removeItem(cameraIndex);\n>  }\n> +\n> +/* Camera Information */\n> +void CameraSelectorDialog::updateCamInfo(QString cameraId)\n> +{\n> +       const std::shared_ptr<libcamera::Camera> &camera =\n> +               cm_->get(cameraId.toStdString());\n> +\n> +       if (!camera)\n> +               return;\n> +\n> +       const libcamera::ControlList &properties = camera->properties();\n> +\n> +       const auto &location = properties.get(libcamera::properties::Location);\n> +       if (location) {\n> +               switch (*location) {\n> +               case libcamera::properties::CameraLocationFront:\n> +                       cameraLocation_->setText(\"Internal front camera\");\n> +                       break;\n> +               case libcamera::properties::CameraLocationBack:\n> +                       cameraLocation_->setText(\"Internal back camera\");\n> +                       break;\n> +               case libcamera::properties::CameraLocationExternal:\n> +                       cameraLocation_->setText(\"External camera\");\n> +                       break;\n> +               default:\n> +                       cameraLocation_->setText(\"Unknown\");\n> +               }\n> +       } else {\n> +               cameraLocation_->setText(\"Unknown\");\n\nI wondered if we could de-dup the \"Unknown\" string, but I'm not sure it\nmakes much of a difference here.\n\n\n> +       }\n> +\n> +       const auto &model = properties\n> +                                   .get(libcamera::properties::Model)\n\nMinor here, The properties.get(..) fits on one line. So that's probably\nhow I'd format this.\n\n\tconst auto &model = properties.get(libcamera::properties::Model)\n\t\t\t\t      .value_or(\"Unknown\");\n\nThe 'floating' properties statement looks a bit odd otherwise.\n\nMinor formatting aside, which could be updated on applying perhaps:\n\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> +                                   .value_or(\"Unknown\");\n> +\n> +       cameraModel_->setText(QString::fromStdString(model));\n> +}\n> diff --git a/src/qcam/cam_select_dialog.h b/src/qcam/cam_select_dialog.h\n> index bd2dbc1e..c91b7ebe 100644\n> --- a/src/qcam/cam_select_dialog.h\n> +++ b/src/qcam/cam_select_dialog.h\n> @@ -11,11 +11,14 @@\n>  \n>  #include <libcamera/camera.h>\n>  #include <libcamera/camera_manager.h>\n> +#include <libcamera/controls.h>\n> +#include <libcamera/property_ids.h>\n>  \n>  #include <QDialog>\n>  #include <QString>\n>  \n>  class QComboBox;\n> +class QLabel;\n>  \n>  class CameraSelectorDialog : public QDialog\n>  {\n> @@ -32,9 +35,14 @@ public:\n>         void addCamera(QString cameraId);\n>         void removeCamera(QString cameraId);\n>  \n> +       /* Camera Information */\n> +       void updateCamInfo(QString cameraId);\n> +\n>  private:\n>         libcamera::CameraManager *cm_;\n>  \n>         /* UI elements. */\n>         QComboBox *cameraIdComboBox_;\n> +       QLabel *cameraLocation_;\n> +       QLabel *cameraModel_;\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 95252C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 31 Aug 2022 09:05:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EB97261FBE;\n\tWed, 31 Aug 2022 11:05:41 +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 71C39603E1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 31 Aug 2022 11:05:40 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E14FC481;\n\tWed, 31 Aug 2022 11:05:39 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1661936742;\n\tbh=McQ3pq7kXw0M4vR6ywhjFdVjljrEq2cNoe03hokwOew=;\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:\n\tFrom;\n\tb=izxZOULXq/AAUlAXWfvLrK0XbXBCqYjaxxq3HkMH0FEy9GkoBKtIGza88vOLzHjFD\n\t5ZK65tnpFuR7dby9q8mahq2+88Zyf/+CfGko5irq0nW/BcSdgQlS1Eq93LKw/i36ae\n\tNuPRkRf6XyFCtGcCUnwLU4kxmtJ+LxMzZUTAhSLTxnePYU0uRu12MWCeVY8a8Z/I2n\n\t3wKUWgHqvU1mHjpw8ZZutdKLTMMfkaYfFS5+Y4H0zoONvHnu077Pe567gMRv2Tz6zc\n\tAfDvPEW+xuN9IKI0Dj4kP4eESoARmWenlUfydG4YdxTddk/jH/8ZNAbbS74/GUYCGy\n\tqEYbBsu+axu3A==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1661936740;\n\tbh=McQ3pq7kXw0M4vR6ywhjFdVjljrEq2cNoe03hokwOew=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=pbdBtx09WuQFzm0DReH3pTtDaGJ9562oupo9kl1gPp4ipsEhLFr2RZhTn1YGrXLC0\n\tZW591ojL7/hduSTw4bwkIO1Gn1jr4Jdw4DEcQEEUKAyQSatCTrIJijl7fxg++iwhHr\n\tUnMBq2FV5xS/GUDzFSNA2cgCeDmLKb2q2NJUM5+w="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"pbdBtx09\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20220831054938.21617-5-utkarsh02t@gmail.com>","References":"<20220831054938.21617-1-utkarsh02t@gmail.com>\n\t<20220831054938.21617-5-utkarsh02t@gmail.com>","To":"Utkarsh Tiwari <utkarsh02t@gmail.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Wed, 31 Aug 2022 10:05:37 +0100","Message-ID":"<166193673780.15972.18297645976662402205@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v9 4/7] qcam: CamSelectDialog: Display\n\tLocation and Model propety of 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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":24854,"web_url":"https://patchwork.libcamera.org/comment/24854/","msgid":"<Yw8nhd4I0J/Xakag@pendragon.ideasonboard.com>","date":"2022-08-31T09:19:01","subject":"Re: [libcamera-devel] [PATCH v9 4/7] qcam: CamSelectDialog: Display\n\tLocation and Model propety of camera","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Wed, Aug 31, 2022 at 10:05:37AM +0100, Kieran Bingham via libcamera-devel wrote:\n> Quoting Utkarsh Tiwari via libcamera-devel (2022-08-31 06:49:35)\n> > The camera selection dialog currently only displays the camera Id.\n> > Display the camera location and camera model if available.\n> > \n> > Signed-off-by: Utkarsh Tiwari <utkarsh02t@gmail.com>\n> > ---\n> > Difference from v9:\n> >     1. Remove handleCameraChange and use updateCamInfo directly\n> >     2. QLabel forward-declare\n> >     3. Rename cameraProperties to just properties\n> >  src/qcam/cam_select_dialog.cpp | 50 ++++++++++++++++++++++++++++++++++\n> >  src/qcam/cam_select_dialog.h   |  8 ++++++\n> >  2 files changed, 58 insertions(+)\n> > \n> > diff --git a/src/qcam/cam_select_dialog.cpp b/src/qcam/cam_select_dialog.cpp\n> > index f82930cc..6543228a 100644\n> > --- a/src/qcam/cam_select_dialog.cpp\n> > +++ b/src/qcam/cam_select_dialog.cpp\n> > @@ -7,12 +7,15 @@\n> >  \n> >  #include \"cam_select_dialog.h\"\n> >  \n> > +#include <memory>\n> > +\n> >  #include <libcamera/camera.h>\n> >  #include <libcamera/camera_manager.h>\n> >  \n> >  #include <QComboBox>\n> >  #include <QDialogButtonBox>\n> >  #include <QFormLayout>\n> > +#include <QLabel>\n> >  #include <QString>\n> >  \n> >  CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager *cameraManager,\n> > @@ -27,6 +30,14 @@ CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager *cameraManag\n> >         for (const auto &cam : cm_->cameras())\n> >                 cameraIdComboBox_->addItem(QString::fromStdString(cam->id()));\n> >  \n> > +       /* Set camera information labels. */\n> > +       cameraLocation_ = new QLabel;\n> > +       cameraModel_ = new QLabel;\n> > +\n> > +       updateCamInfo(cameraIdComboBox_->currentText());\n\nI'd name this function updateCameraInfo() as you spell out camera in\nfull in the rest of the file. With this and Kieran's comments addressed,\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> > +       connect(cameraIdComboBox_, &QComboBox::currentTextChanged,\n> > +               this, &CameraSelectorDialog::updateCamInfo);\n> > +\n> >         /* Setup the QDialogButton Box */\n> >         QDialogButtonBox *buttonBox =\n> >                 new QDialogButtonBox(QDialogButtonBox::Ok |\n> > @@ -39,6 +50,8 @@ CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager *cameraManag\n> >  \n> >         /* Set the layout. */\n> >         layout->addRow(\"Camera:\", cameraIdComboBox_);\n> > +       layout->addRow(\"Location:\", cameraLocation_);\n> > +       layout->addRow(\"Model:\", cameraModel_);\n> >         layout->addWidget(buttonBox);\n> >  }\n> >  \n> > @@ -60,3 +73,40 @@ void CameraSelectorDialog::removeCamera(QString cameraId)\n> >         int cameraIndex = cameraIdComboBox_->findText(cameraId);\n> >         cameraIdComboBox_->removeItem(cameraIndex);\n> >  }\n> > +\n> > +/* Camera Information */\n> > +void CameraSelectorDialog::updateCamInfo(QString cameraId)\n> > +{\n> > +       const std::shared_ptr<libcamera::Camera> &camera =\n> > +               cm_->get(cameraId.toStdString());\n> > +\n> > +       if (!camera)\n> > +               return;\n> > +\n> > +       const libcamera::ControlList &properties = camera->properties();\n> > +\n> > +       const auto &location = properties.get(libcamera::properties::Location);\n> > +       if (location) {\n> > +               switch (*location) {\n> > +               case libcamera::properties::CameraLocationFront:\n> > +                       cameraLocation_->setText(\"Internal front camera\");\n> > +                       break;\n> > +               case libcamera::properties::CameraLocationBack:\n> > +                       cameraLocation_->setText(\"Internal back camera\");\n> > +                       break;\n> > +               case libcamera::properties::CameraLocationExternal:\n> > +                       cameraLocation_->setText(\"External camera\");\n> > +                       break;\n> > +               default:\n> > +                       cameraLocation_->setText(\"Unknown\");\n> > +               }\n> > +       } else {\n> > +               cameraLocation_->setText(\"Unknown\");\n> \n> I wondered if we could de-dup the \"Unknown\" string, but I'm not sure it\n> makes much of a difference here.\n> \n> \n> > +       }\n> > +\n> > +       const auto &model = properties\n> > +                                   .get(libcamera::properties::Model)\n> \n> Minor here, The properties.get(..) fits on one line. So that's probably\n> how I'd format this.\n> \n> \tconst auto &model = properties.get(libcamera::properties::Model)\n> \t\t\t\t      .value_or(\"Unknown\");\n> \n> The 'floating' properties statement looks a bit odd otherwise.\n> \n> Minor formatting aside, which could be updated on applying perhaps:\n> \n> \n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> > +                                   .value_or(\"Unknown\");\n> > +\n> > +       cameraModel_->setText(QString::fromStdString(model));\n> > +}\n> > diff --git a/src/qcam/cam_select_dialog.h b/src/qcam/cam_select_dialog.h\n> > index bd2dbc1e..c91b7ebe 100644\n> > --- a/src/qcam/cam_select_dialog.h\n> > +++ b/src/qcam/cam_select_dialog.h\n> > @@ -11,11 +11,14 @@\n> >  \n> >  #include <libcamera/camera.h>\n> >  #include <libcamera/camera_manager.h>\n> > +#include <libcamera/controls.h>\n> > +#include <libcamera/property_ids.h>\n> >  \n> >  #include <QDialog>\n> >  #include <QString>\n> >  \n> >  class QComboBox;\n> > +class QLabel;\n> >  \n> >  class CameraSelectorDialog : public QDialog\n> >  {\n> > @@ -32,9 +35,14 @@ public:\n> >         void addCamera(QString cameraId);\n> >         void removeCamera(QString cameraId);\n> >  \n> > +       /* Camera Information */\n> > +       void updateCamInfo(QString cameraId);\n> > +\n> >  private:\n> >         libcamera::CameraManager *cm_;\n> >  \n> >         /* UI elements. */\n> >         QComboBox *cameraIdComboBox_;\n> > +       QLabel *cameraLocation_;\n> > +       QLabel *cameraModel_;\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 1C7ACC0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 31 Aug 2022 09:19:14 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6D4F461FBE;\n\tWed, 31 Aug 2022 11:19:13 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8B23F603E1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 31 Aug 2022 11:19:12 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C364551E;\n\tWed, 31 Aug 2022 11:19:11 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1661937553;\n\tbh=7lE0rV+Q9//ZIEBDo07UpkuIBNFzCvWyW2Hhl5ZZnsk=;\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=EPv+IxIYNv2387Juk9hsxVN3+zTQ+fqtBaEIFh/das8F8q5Ps+4zMma9gnYXLlgDb\n\tXCBu5ojtci7YRXi7eVOcnCu7xnIK4Z+SR8TYy/4oCZNXiuk/5c2PudW75dazBYa7oN\n\tqnoam3TQNIZ+R84kC9DTNKgpDKAM0m0JCJF0Yp3VtyjJoJfxN/StRab+Jk3V/0JneZ\n\ttdBnW5hEXLbp+WjV40GSujtUH+954pE1y68KoWrdKJ9S2WlzvWInTdNPHl7jdKTI1A\n\tyKFKLnfptzAM6jRqmODfVCT8fE8l7zIfmOFtcziCyD9/dQGox2hpAy0+KtooiVb5Wr\n\tDpoTi5/W8Wv2w==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1661937552;\n\tbh=7lE0rV+Q9//ZIEBDo07UpkuIBNFzCvWyW2Hhl5ZZnsk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=HeV1wfVeuMUqHXNAJxB3ShPO7iuTYbhlpokMvIPJFc1tObmg+LvDjZSGgWY2QQQ9N\n\t1/1dKsdfzvzrOPdMcQjyiF+goZ70NC0L55i+GaIcLxoCCdxHLyN/VDwmW1TIC0IRpZ\n\tYVMzp02xGCV9RclZrJ7DZOEsNvRz4kX5+UX5krYE="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"HeV1wfVe\"; dkim-atps=neutral","Date":"Wed, 31 Aug 2022 12:19:01 +0300","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<Yw8nhd4I0J/Xakag@pendragon.ideasonboard.com>","References":"<20220831054938.21617-1-utkarsh02t@gmail.com>\n\t<20220831054938.21617-5-utkarsh02t@gmail.com>\n\t<166193673780.15972.18297645976662402205@Monstersaurus>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<166193673780.15972.18297645976662402205@Monstersaurus>","Subject":"Re: [libcamera-devel] [PATCH v9 4/7] qcam: CamSelectDialog: Display\n\tLocation and Model propety of 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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]