[{"id":4531,"web_url":"https://patchwork.libcamera.org/comment/4531/","msgid":"<20200426145354.pnw5pof4vnedyhex@uno.localdomain>","date":"2020-04-26T14:53:54","subject":"Re: [libcamera-devel] [PATCH 2/2] cam: Add an option to list camera\n\tcontrols","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Sat, Apr 25, 2020 at 02:42:37AM +0300, Laurent Pinchart wrote:\n> Add a new --list-controls option to print information about all the\n> controls supported by a camera.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/cam/main.cpp | 28 ++++++++++++++++++++++++++++\n>  src/cam/main.h   |  1 +\n>  2 files changed, 29 insertions(+)\n>\n> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> index 340849e74ddd..ced4f567b8f3 100644\n> --- a/src/cam/main.cpp\n> +++ b/src/cam/main.cpp\n> @@ -37,6 +37,7 @@ public:\n>  private:\n>  \tint parseOptions(int argc, char *argv[]);\n>  \tint prepareConfig();\n> +\tint listControls();\n>  \tint listProperties();\n>  \tint infoConfiguration();\n>  \tint run();\n> @@ -182,6 +183,8 @@ int CamApp::parseOptions(int argc, char *argv[])\n>  \tparser.addOption(OptInfo, OptionNone,\n>  \t\t\t \"Display information about stream(s)\", \"info\");\n>  \tparser.addOption(OptList, OptionNone, \"List all cameras\", \"list\");\n> +\tparser.addOption(OptListControls, OptionNone, \"List cameras controls\",\n> +\t\t\t \"list-controls\");\n>  \tparser.addOption(OptListProperties, OptionNone, \"List cameras properties\",\n>  \t\t\t \"list-properties\");\n>\n> @@ -276,6 +279,25 @@ int CamApp::prepareConfig()\n>  \treturn 0;\n>  }\n>\n> +int CamApp::listControls()\n> +{\n> +\tif (!camera_) {\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 : 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 (!camera_) {\n> @@ -339,6 +361,12 @@ int CamApp::run()\n>  \t\t}\n>  \t}\n>\n> +\tif (options_.isSet(OptListControls)) {\n> +\t\tret = listControls();\n> +\t\tif (ret)\n> +\t\t\treturn ret;\n> +\t}\n> +\n>  \tif (options_.isSet(OptListProperties)) {\n>  \t\tret = listProperties();\n>  \t\tif (ret)\n> diff --git a/src/cam/main.h b/src/cam/main.h\n> index d23c6dfb202e..4a130d8dd290 100644\n> --- a/src/cam/main.h\n> +++ b/src/cam/main.h\n> @@ -16,6 +16,7 @@ enum {\n>  \tOptList = 'l',\n>  \tOptListProperties = 'p',\n>  \tOptStream = 's',\n> +\tOptListControls = 256,\n\nIs this intentional as we don't have a short version of the\n--list-controls option available ?\n\nApart from this, very useful\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n>  };\n>\n>  #endif /* __CAM_MAIN_H__ */\n> --\n> Regards,\n>\n> Laurent Pinchart\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net\n\t[217.70.183.195])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D67B8603FA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 26 Apr 2020 16:50:45 +0200 (CEST)","from uno.localdomain\n\t(host170-48-dynamic.3-87-r.retail.telecomitalia.it [87.3.48.170])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 15AF960004;\n\tSun, 26 Apr 2020 14:50:44 +0000 (UTC)"],"X-Originating-IP":"87.3.48.170","Date":"Sun, 26 Apr 2020 16:53:54 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200426145354.pnw5pof4vnedyhex@uno.localdomain>","References":"<20200424234237.19604-1-laurent.pinchart@ideasonboard.com>\n\t<20200424234237.19604-2-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20200424234237.19604-2-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 2/2] cam: Add an option to list camera\n\tcontrols","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>","X-List-Received-Date":"Sun, 26 Apr 2020 14:50:46 -0000"}},{"id":4534,"web_url":"https://patchwork.libcamera.org/comment/4534/","msgid":"<20200426160951.GB5950@pendragon.ideasonboard.com>","date":"2020-04-26T16:09:51","subject":"Re: [libcamera-devel] [PATCH 2/2] cam: Add an option to list camera\n\tcontrols","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn Sun, Apr 26, 2020 at 04:53:54PM +0200, Jacopo Mondi wrote:\n> On Sat, Apr 25, 2020 at 02:42:37AM +0300, Laurent Pinchart wrote:\n> > Add a new --list-controls option to print information about all the\n> > controls supported by a camera.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  src/cam/main.cpp | 28 ++++++++++++++++++++++++++++\n> >  src/cam/main.h   |  1 +\n> >  2 files changed, 29 insertions(+)\n> >\n> > diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> > index 340849e74ddd..ced4f567b8f3 100644\n> > --- a/src/cam/main.cpp\n> > +++ b/src/cam/main.cpp\n> > @@ -37,6 +37,7 @@ public:\n> >  private:\n> >  \tint parseOptions(int argc, char *argv[]);\n> >  \tint prepareConfig();\n> > +\tint listControls();\n> >  \tint listProperties();\n> >  \tint infoConfiguration();\n> >  \tint run();\n> > @@ -182,6 +183,8 @@ int CamApp::parseOptions(int argc, char *argv[])\n> >  \tparser.addOption(OptInfo, OptionNone,\n> >  \t\t\t \"Display information about stream(s)\", \"info\");\n> >  \tparser.addOption(OptList, OptionNone, \"List all cameras\", \"list\");\n> > +\tparser.addOption(OptListControls, OptionNone, \"List cameras controls\",\n> > +\t\t\t \"list-controls\");\n> >  \tparser.addOption(OptListProperties, OptionNone, \"List cameras properties\",\n> >  \t\t\t \"list-properties\");\n> >\n> > @@ -276,6 +279,25 @@ int CamApp::prepareConfig()\n> >  \treturn 0;\n> >  }\n> >\n> > +int CamApp::listControls()\n> > +{\n> > +\tif (!camera_) {\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 : 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 (!camera_) {\n> > @@ -339,6 +361,12 @@ int CamApp::run()\n> >  \t\t}\n> >  \t}\n> >\n> > +\tif (options_.isSet(OptListControls)) {\n> > +\t\tret = listControls();\n> > +\t\tif (ret)\n> > +\t\t\treturn ret;\n> > +\t}\n> > +\n> >  \tif (options_.isSet(OptListProperties)) {\n> >  \t\tret = listProperties();\n> >  \t\tif (ret)\n> > diff --git a/src/cam/main.h b/src/cam/main.h\n> > index d23c6dfb202e..4a130d8dd290 100644\n> > --- a/src/cam/main.h\n> > +++ b/src/cam/main.h\n> > @@ -16,6 +16,7 @@ enum {\n> >  \tOptList = 'l',\n> >  \tOptListProperties = 'p',\n> >  \tOptStream = 's',\n> > +\tOptListControls = 256,\n> \n> Is this intentional as we don't have a short version of the\n> --list-controls option available ?\n\nCorrect. It's a common practice to start option that have no short form\nat 256 to avoid any clash (I'm sure we could start at 128 without any\nproblem, but 256 is guaranteed to be safe).\n\n> Apart from this, very useful\n\nThanks.\n\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> \n> >  };\n> >\n> >  #endif /* __CAM_MAIN_H__ */","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["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 21D7662E55\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 26 Apr 2020 18:10:07 +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 86DA04F7;\n\tSun, 26 Apr 2020 18:10:06 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"VUSb4GFT\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1587917406;\n\tbh=q+OPV53OH6wiPPxMuduCt1Ra7FpoRW9vZIP9UFlpbV8=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=VUSb4GFT8ovqwtAOjVSkZP1L+NNasEJsaws788GcC6HD34Ub69EhWRfeIyR4tPxae\n\t1KDpunpbToofyXZCaxjUFw5x+fAgZNZHrxxIYsIj+xyitqKTLc4+tEUQjTSFfb6ile\n\tA+LOwtzH0wPGcTNqU6o0cMgTSlxrrrsngJbrM/EQ=","Date":"Sun, 26 Apr 2020 19:09:51 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200426160951.GB5950@pendragon.ideasonboard.com>","References":"<20200424234237.19604-1-laurent.pinchart@ideasonboard.com>\n\t<20200424234237.19604-2-laurent.pinchart@ideasonboard.com>\n\t<20200426145354.pnw5pof4vnedyhex@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20200426145354.pnw5pof4vnedyhex@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH 2/2] cam: Add an option to list camera\n\tcontrols","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>","X-List-Received-Date":"Sun, 26 Apr 2020 16:10:07 -0000"}}]