[{"id":18136,"web_url":"https://patchwork.libcamera.org/comment/18136/","msgid":"<77f3b927-93a3-ee56-b0b2-5146cb49c086@ideasonboard.com>","date":"2021-07-12T15:56:34","subject":"Re: [libcamera-devel] [PATCH 24/30] cam: Move printing of camera\n\tinformation to CameraSession class","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"On 07/07/2021 03:19, Laurent Pinchart wrote:\n> The three CamApp functions listControls(), listProperties() and\n> infoConfiguration() operate on a camera. They would thus be better\n> placed in the CameraSession class. Move them there. As they now have no\n> error to return anymore, make them void functions.\n\nMakes me wonder if the arg parsing for those shouldn't be handled by the\nCameraSession - but I don't know if that's practical, and this is fine.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/cam/camera_session.cpp |  45 +++++++++++++++++\n>  src/cam/camera_session.h   |   4 ++\n>  src/cam/main.cpp           | 101 ++++++++-----------------------------\n>  3 files changed, 70 insertions(+), 80 deletions(-)\n> \n> diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp\n> index 10e66446ee67..ceb2c3ab3a92 100644\n> --- a/src/cam/camera_session.cpp\n> +++ b/src/cam/camera_session.cpp\n> @@ -11,6 +11,7 @@\n>  #include <sstream>\n>  \n>  #include <libcamera/control_ids.h>\n> +#include <libcamera/property_ids.h>\n>  \n>  #include \"camera_session.h\"\n>  #include \"event_loop.h\"\n> @@ -89,6 +90,50 @@ CameraSession::~CameraSession()\n>  \t\tcamera_->release();\n>  }\n>  \n> +void CameraSession::listControls() const\n> +{\n> +\tfor (const auto &ctrl : camera_->controls()) {\n> +\t\tconst ControlId *id = ctrl.first;\n> +\t\tconst ControlInfo &info = ctrl.second;\n> +\n> +\t\tstd::cout << \"Control: \" << id->name() << \": \"\n> +\t\t\t  << info.toString() << std::endl;\n> +\t}\n> +}\n> +\n> +void CameraSession::listProperties() const\n> +{\n> +\tfor (const auto &prop : camera_->properties()) {\n> +\t\tconst ControlId *id = properties::properties.at(prop.first);\n> +\t\tconst ControlValue &value = prop.second;\n> +\n> +\t\tstd::cout << \"Property: \" << id->name() << \" = \"\n> +\t\t\t  << value.toString() << std::endl;\n> +\t}\n> +}\n> +\n> +void CameraSession::infoConfiguration() const\n> +{\n> +\tunsigned int index = 0;\n> +\tfor (const StreamConfiguration &cfg : *config_) {\n> +\t\tstd::cout << index << \": \" << cfg.toString() << std::endl;\n> +\n> +\t\tconst StreamFormats &formats = cfg.formats();\n> +\t\tfor (PixelFormat pixelformat : formats.pixelformats()) {\n> +\t\t\tstd::cout << \" * Pixelformat: \"\n> +\t\t\t\t  << pixelformat.toString() << \" \"\n> +\t\t\t\t  << formats.range(pixelformat).toString()\n> +\t\t\t\t  << std::endl;\n> +\n> +\t\t\tfor (const Size &size : formats.sizes(pixelformat))\n> +\t\t\t\tstd::cout << \"  - \" << size.toString()\n> +\t\t\t\t\t  << std::endl;\n> +\t\t}\n> +\n> +\t\tindex++;\n> +\t}\n> +}\n> +\n>  int CameraSession::start(const OptionsParser::Options &options)\n>  {\n>  \tint ret;\n> diff --git a/src/cam/camera_session.h b/src/cam/camera_session.h\n> index 88baf9061629..6221aadadf90 100644\n> --- a/src/cam/camera_session.h\n> +++ b/src/cam/camera_session.h\n> @@ -35,6 +35,10 @@ public:\n>  \tlibcamera::Camera *camera() { return camera_.get(); }\n>  \tlibcamera::CameraConfiguration *config() { return config_.get(); }\n>  \n> +\tvoid listControls() const;\n> +\tvoid listProperties() const;\n> +\tvoid infoConfiguration() const;\n> +\n>  \tint start(const OptionsParser::Options &options);\n>  \tvoid stop();\n>  \n> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> index cba0793ac39b..4fe0c4c368d1 100644\n> --- a/src/cam/main.cpp\n> +++ b/src/cam/main.cpp\n> @@ -39,9 +39,6 @@ private:\n>  \tvoid cameraRemoved(std::shared_ptr<Camera> cam);\n>  \tvoid captureDone();\n>  \tint parseOptions(int argc, char *argv[]);\n> -\tint listControls();\n> -\tint listProperties();\n> -\tint infoConfiguration();\n>  \tint run();\n>  \n>  \tstatic std::string cameraName(const Camera *camera);\n> @@ -158,74 +155,6 @@ int CamApp::parseOptions(int argc, char *argv[])\n>  \treturn 0;\n>  }\n>  \n> -int CamApp::listControls()\n> -{\n> -\tif (!session_) {\n> -\t\tstd::cout << \"Cannot list controls without a camera\"\n> -\t\t\t  << std::endl;\n> -\t\treturn -EINVAL;\n> -\t}\n> -\n> -\tfor (const auto &ctrl : session_->camera()->controls()) {\n> -\t\tconst ControlId *id = ctrl.first;\n> -\t\tconst ControlInfo &info = ctrl.second;\n> -\n> -\t\tstd::cout << \"Control: \" << id->name() << \": \"\n> -\t\t\t  << info.toString() << std::endl;\n> -\t}\n> -\n> -\treturn 0;\n> -}\n> -\n> -int CamApp::listProperties()\n> -{\n> -\tif (!session_) {\n> -\t\tstd::cout << \"Cannot list properties without a camera\"\n> -\t\t\t  << std::endl;\n> -\t\treturn -EINVAL;\n> -\t}\n> -\n> -\tfor (const auto &prop : session_->camera()->properties()) {\n> -\t\tconst ControlId *id = properties::properties.at(prop.first);\n> -\t\tconst ControlValue &value = prop.second;\n> -\n> -\t\tstd::cout << \"Property: \" << id->name() << \" = \"\n> -\t\t\t  << value.toString() << std::endl;\n> -\t}\n> -\n> -\treturn 0;\n> -}\n> -\n> -int CamApp::infoConfiguration()\n> -{\n> -\tif (!session_) {\n> -\t\tstd::cout << \"Cannot print stream information without a camera\"\n> -\t\t\t  << std::endl;\n> -\t\treturn -EINVAL;\n> -\t}\n> -\n> -\tunsigned int index = 0;\n> -\tfor (const StreamConfiguration &cfg : *session_->config()) {\n> -\t\tstd::cout << index << \": \" << cfg.toString() << std::endl;\n> -\n> -\t\tconst StreamFormats &formats = cfg.formats();\n> -\t\tfor (PixelFormat pixelformat : formats.pixelformats()) {\n> -\t\t\tstd::cout << \" * Pixelformat: \"\n> -\t\t\t\t  << pixelformat.toString() << \" \"\n> -\t\t\t\t  << formats.range(pixelformat).toString()\n> -\t\t\t\t  << std::endl;\n> -\n> -\t\t\tfor (const Size &size : formats.sizes(pixelformat))\n> -\t\t\t\tstd::cout << \"  - \" << size.toString()\n> -\t\t\t\t\t  << std::endl;\n> -\t\t}\n> -\n> -\t\tindex++;\n> -\t}\n> -\n> -\treturn 0;\n> -}\n> -\n>  void CamApp::cameraAdded(std::shared_ptr<Camera> cam)\n>  {\n>  \tstd::cout << \"Camera Added: \" << cam->id() << std::endl;\n> @@ -269,21 +198,33 @@ int CamApp::run()\n>  \t}\n>  \n>  \tif (options_.isSet(OptListControls)) {\n> -\t\tret = listControls();\n> -\t\tif (ret)\n> -\t\t\treturn ret;\n> +\t\tif (!session_) {\n> +\t\t\tstd::cout << \"Cannot list controls without a camera\"\n> +\t\t\t\t  << std::endl;\n> +\t\t\treturn -EINVAL;\n> +\t\t}\n> +\n> +\t\tsession_->listControls();\n>  \t}\n>  \n>  \tif (options_.isSet(OptListProperties)) {\n> -\t\tret = listProperties();\n> -\t\tif (ret)\n> -\t\t\treturn ret;\n> +\t\tif (!session_) {\n> +\t\t\tstd::cout << \"Cannot list properties without a camera\"\n> +\t\t\t\t  << std::endl;\n> +\t\t\treturn -EINVAL;\n> +\t\t}\n> +\n> +\t\tsession_->listProperties();\n>  \t}\n>  \n>  \tif (options_.isSet(OptInfo)) {\n> -\t\tret = infoConfiguration();\n> -\t\tif (ret)\n> -\t\t\treturn ret;\n> +\t\tif (!session_) {\n> +\t\t\tstd::cout << \"Cannot print stream information without a camera\"\n> +\t\t\t\t  << std::endl;\n> +\t\t\treturn -EINVAL;\n> +\t\t}\n> +\n> +\t\tsession_->infoConfiguration();\n>  \t}\n>  \n>  \tif (options_.isSet(OptCapture)) {\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 C48B1C3225\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 12 Jul 2021 15:56:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 35C1968524;\n\tMon, 12 Jul 2021 17:56:39 +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 AC17B68513\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Jul 2021 17:56:37 +0200 (CEST)","from [192.168.0.20]\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 4CEADCC;\n\tMon, 12 Jul 2021 17:56:37 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"iV0OG3oU\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1626105397;\n\tbh=L97E0aQC9vzp8/aDK+cdflfXJMvlKFwKd+F4kO4ZQKE=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=iV0OG3oUDor8ZK3E0zutxb6ZZAXHYQopIjxakKTWdh0j6WT/8N2X6IsnkoT+gKugI\n\tZPsFlYDyAkuq8zanOyj80oCUzisuW7WKpoVDRK3pQJaIGdCQ0Zi0WPysNmcPZMhKYQ\n\t6H1DPZnLy6pq8f+2/P+mLy64eDWRb6EGaNlDWOJ0=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210707021941.20804-1-laurent.pinchart@ideasonboard.com>\n\t<20210707021941.20804-25-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<77f3b927-93a3-ee56-b0b2-5146cb49c086@ideasonboard.com>","Date":"Mon, 12 Jul 2021 16:56:34 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.11.0","MIME-Version":"1.0","In-Reply-To":"<20210707021941.20804-25-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH 24/30] cam: Move printing of camera\n\tinformation to CameraSession class","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18151,"web_url":"https://patchwork.libcamera.org/comment/18151/","msgid":"<YOyOU0tDajzq0kx0@pendragon.ideasonboard.com>","date":"2021-07-12T18:47:47","subject":"Re: [libcamera-devel] [PATCH 24/30] cam: Move printing of camera\n\tinformation to CameraSession class","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Mon, Jul 12, 2021 at 04:56:34PM +0100, Kieran Bingham wrote:\n> On 07/07/2021 03:19, Laurent Pinchart wrote:\n> > The three CamApp functions listControls(), listProperties() and\n> > infoConfiguration() operate on a camera. They would thus be better\n> > placed in the CameraSession class. Move them there. As they now have no\n> > error to return anymore, make them void functions.\n> \n> Makes me wonder if the arg parsing for those shouldn't be handled by the\n> CameraSession - but I don't know if that's practical, and this is fine.\n\nI've thought about it, but then decided that a function named\nlistControls() should list controls unconditionally. I've actually\nthought about moving arg parsing (or rather interpretation) out of\nCameraSession for other arguments, but that became quite impractical.\n\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  src/cam/camera_session.cpp |  45 +++++++++++++++++\n> >  src/cam/camera_session.h   |   4 ++\n> >  src/cam/main.cpp           | 101 ++++++++-----------------------------\n> >  3 files changed, 70 insertions(+), 80 deletions(-)\n> > \n> > diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp\n> > index 10e66446ee67..ceb2c3ab3a92 100644\n> > --- a/src/cam/camera_session.cpp\n> > +++ b/src/cam/camera_session.cpp\n> > @@ -11,6 +11,7 @@\n> >  #include <sstream>\n> >  \n> >  #include <libcamera/control_ids.h>\n> > +#include <libcamera/property_ids.h>\n> >  \n> >  #include \"camera_session.h\"\n> >  #include \"event_loop.h\"\n> > @@ -89,6 +90,50 @@ CameraSession::~CameraSession()\n> >  \t\tcamera_->release();\n> >  }\n> >  \n> > +void CameraSession::listControls() const\n> > +{\n> > +\tfor (const auto &ctrl : camera_->controls()) {\n> > +\t\tconst ControlId *id = ctrl.first;\n> > +\t\tconst ControlInfo &info = ctrl.second;\n> > +\n> > +\t\tstd::cout << \"Control: \" << id->name() << \": \"\n> > +\t\t\t  << info.toString() << std::endl;\n> > +\t}\n> > +}\n> > +\n> > +void CameraSession::listProperties() const\n> > +{\n> > +\tfor (const auto &prop : camera_->properties()) {\n> > +\t\tconst ControlId *id = properties::properties.at(prop.first);\n> > +\t\tconst ControlValue &value = prop.second;\n> > +\n> > +\t\tstd::cout << \"Property: \" << id->name() << \" = \"\n> > +\t\t\t  << value.toString() << std::endl;\n> > +\t}\n> > +}\n> > +\n> > +void CameraSession::infoConfiguration() const\n> > +{\n> > +\tunsigned int index = 0;\n> > +\tfor (const StreamConfiguration &cfg : *config_) {\n> > +\t\tstd::cout << index << \": \" << cfg.toString() << std::endl;\n> > +\n> > +\t\tconst StreamFormats &formats = cfg.formats();\n> > +\t\tfor (PixelFormat pixelformat : formats.pixelformats()) {\n> > +\t\t\tstd::cout << \" * Pixelformat: \"\n> > +\t\t\t\t  << pixelformat.toString() << \" \"\n> > +\t\t\t\t  << formats.range(pixelformat).toString()\n> > +\t\t\t\t  << std::endl;\n> > +\n> > +\t\t\tfor (const Size &size : formats.sizes(pixelformat))\n> > +\t\t\t\tstd::cout << \"  - \" << size.toString()\n> > +\t\t\t\t\t  << std::endl;\n> > +\t\t}\n> > +\n> > +\t\tindex++;\n> > +\t}\n> > +}\n> > +\n> >  int CameraSession::start(const OptionsParser::Options &options)\n> >  {\n> >  \tint ret;\n> > diff --git a/src/cam/camera_session.h b/src/cam/camera_session.h\n> > index 88baf9061629..6221aadadf90 100644\n> > --- a/src/cam/camera_session.h\n> > +++ b/src/cam/camera_session.h\n> > @@ -35,6 +35,10 @@ public:\n> >  \tlibcamera::Camera *camera() { return camera_.get(); }\n> >  \tlibcamera::CameraConfiguration *config() { return config_.get(); }\n> >  \n> > +\tvoid listControls() const;\n> > +\tvoid listProperties() const;\n> > +\tvoid infoConfiguration() const;\n> > +\n> >  \tint start(const OptionsParser::Options &options);\n> >  \tvoid stop();\n> >  \n> > diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> > index cba0793ac39b..4fe0c4c368d1 100644\n> > --- a/src/cam/main.cpp\n> > +++ b/src/cam/main.cpp\n> > @@ -39,9 +39,6 @@ private:\n> >  \tvoid cameraRemoved(std::shared_ptr<Camera> cam);\n> >  \tvoid captureDone();\n> >  \tint parseOptions(int argc, char *argv[]);\n> > -\tint listControls();\n> > -\tint listProperties();\n> > -\tint infoConfiguration();\n> >  \tint run();\n> >  \n> >  \tstatic std::string cameraName(const Camera *camera);\n> > @@ -158,74 +155,6 @@ int CamApp::parseOptions(int argc, char *argv[])\n> >  \treturn 0;\n> >  }\n> >  \n> > -int CamApp::listControls()\n> > -{\n> > -\tif (!session_) {\n> > -\t\tstd::cout << \"Cannot list controls without a camera\"\n> > -\t\t\t  << std::endl;\n> > -\t\treturn -EINVAL;\n> > -\t}\n> > -\n> > -\tfor (const auto &ctrl : session_->camera()->controls()) {\n> > -\t\tconst ControlId *id = ctrl.first;\n> > -\t\tconst ControlInfo &info = ctrl.second;\n> > -\n> > -\t\tstd::cout << \"Control: \" << id->name() << \": \"\n> > -\t\t\t  << info.toString() << std::endl;\n> > -\t}\n> > -\n> > -\treturn 0;\n> > -}\n> > -\n> > -int CamApp::listProperties()\n> > -{\n> > -\tif (!session_) {\n> > -\t\tstd::cout << \"Cannot list properties without a camera\"\n> > -\t\t\t  << std::endl;\n> > -\t\treturn -EINVAL;\n> > -\t}\n> > -\n> > -\tfor (const auto &prop : session_->camera()->properties()) {\n> > -\t\tconst ControlId *id = properties::properties.at(prop.first);\n> > -\t\tconst ControlValue &value = prop.second;\n> > -\n> > -\t\tstd::cout << \"Property: \" << id->name() << \" = \"\n> > -\t\t\t  << value.toString() << std::endl;\n> > -\t}\n> > -\n> > -\treturn 0;\n> > -}\n> > -\n> > -int CamApp::infoConfiguration()\n> > -{\n> > -\tif (!session_) {\n> > -\t\tstd::cout << \"Cannot print stream information without a camera\"\n> > -\t\t\t  << std::endl;\n> > -\t\treturn -EINVAL;\n> > -\t}\n> > -\n> > -\tunsigned int index = 0;\n> > -\tfor (const StreamConfiguration &cfg : *session_->config()) {\n> > -\t\tstd::cout << index << \": \" << cfg.toString() << std::endl;\n> > -\n> > -\t\tconst StreamFormats &formats = cfg.formats();\n> > -\t\tfor (PixelFormat pixelformat : formats.pixelformats()) {\n> > -\t\t\tstd::cout << \" * Pixelformat: \"\n> > -\t\t\t\t  << pixelformat.toString() << \" \"\n> > -\t\t\t\t  << formats.range(pixelformat).toString()\n> > -\t\t\t\t  << std::endl;\n> > -\n> > -\t\t\tfor (const Size &size : formats.sizes(pixelformat))\n> > -\t\t\t\tstd::cout << \"  - \" << size.toString()\n> > -\t\t\t\t\t  << std::endl;\n> > -\t\t}\n> > -\n> > -\t\tindex++;\n> > -\t}\n> > -\n> > -\treturn 0;\n> > -}\n> > -\n> >  void CamApp::cameraAdded(std::shared_ptr<Camera> cam)\n> >  {\n> >  \tstd::cout << \"Camera Added: \" << cam->id() << std::endl;\n> > @@ -269,21 +198,33 @@ int CamApp::run()\n> >  \t}\n> >  \n> >  \tif (options_.isSet(OptListControls)) {\n> > -\t\tret = listControls();\n> > -\t\tif (ret)\n> > -\t\t\treturn ret;\n> > +\t\tif (!session_) {\n> > +\t\t\tstd::cout << \"Cannot list controls without a camera\"\n> > +\t\t\t\t  << std::endl;\n> > +\t\t\treturn -EINVAL;\n> > +\t\t}\n> > +\n> > +\t\tsession_->listControls();\n> >  \t}\n> >  \n> >  \tif (options_.isSet(OptListProperties)) {\n> > -\t\tret = listProperties();\n> > -\t\tif (ret)\n> > -\t\t\treturn ret;\n> > +\t\tif (!session_) {\n> > +\t\t\tstd::cout << \"Cannot list properties without a camera\"\n> > +\t\t\t\t  << std::endl;\n> > +\t\t\treturn -EINVAL;\n> > +\t\t}\n> > +\n> > +\t\tsession_->listProperties();\n> >  \t}\n> >  \n> >  \tif (options_.isSet(OptInfo)) {\n> > -\t\tret = infoConfiguration();\n> > -\t\tif (ret)\n> > -\t\t\treturn ret;\n> > +\t\tif (!session_) {\n> > +\t\t\tstd::cout << \"Cannot print stream information without a camera\"\n> > +\t\t\t\t  << std::endl;\n> > +\t\t\treturn -EINVAL;\n> > +\t\t}\n> > +\n> > +\t\tsession_->infoConfiguration();\n> >  \t}\n> >  \n> >  \tif (options_.isSet(OptCapture)) {","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 80695C3225\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 12 Jul 2021 18:48:36 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E3F2468524;\n\tMon, 12 Jul 2021 20:48:35 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5BDF268513\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Jul 2021 20:48:34 +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 C637FCC;\n\tMon, 12 Jul 2021 20:48:33 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"eOKDne5Q\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1626115714;\n\tbh=AcdKr6e6p3M2vBjjFhgZeB8k5WsL6/swLRvLpn7H//0=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=eOKDne5Qc6x2KRIHGJ19ghMQg8WMW6UIkMC5QEs3aUQU9xPuiLHzXKmIFtAcHigY0\n\tS32Q0gFyVnJyyIN/gEBwj9oNivLiuwIE3EFV0ZfJiVcm6b1Q70DiyiD5tna3KV7jXk\n\tR8H01yKMAmhlaVQGvTaHcG06MA+uprudqriq0sIc=","Date":"Mon, 12 Jul 2021 21:47:47 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<YOyOU0tDajzq0kx0@pendragon.ideasonboard.com>","References":"<20210707021941.20804-1-laurent.pinchart@ideasonboard.com>\n\t<20210707021941.20804-25-laurent.pinchart@ideasonboard.com>\n\t<77f3b927-93a3-ee56-b0b2-5146cb49c086@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<77f3b927-93a3-ee56-b0b2-5146cb49c086@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 24/30] cam: Move printing of camera\n\tinformation to CameraSession class","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]