[{"id":32379,"web_url":"https://patchwork.libcamera.org/comment/32379/","msgid":"<20241125232247.GB19381@pendragon.ideasonboard.com>","date":"2024-11-25T23:22:47","subject":"Re: [PATCH 4/4] apps: cam: Print control direction information","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Paul,\n\nThank you for the patch.\n\nOn Tue, Nov 26, 2024 at 12:30:03AM +0900, Paul Elder wrote:\n> Now that there is support for retrieving the allowed directions of a\n> control, print this information when listing controls.\n> \n> Sample output:\n> $ cam --list-controls -c 2\n> Using camera Virtual0 as cam0\n> Control: [io] draft::FaceDetectMode:\n>   - FaceDetectModeOff (0)\n> Control: [i ] libcamera::FrameDurationLimits: [16666..33333]\n\nI was expecting [in], [out] or [input], but i/o has the advantage of\naligning the controls names. We could still achieve the same with\n\n[in   ]\n[  out]\n[inout]\n\nat the cost of longer lines, or\n\n'[in]   '\n'[out]  '\n'[inout]'\n\nany opinion from anyone ?\n\n>    Size: 2\n> \n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> ---\n>  src/apps/cam/camera_session.cpp | 10 ++++++++--\n>  1 file changed, 8 insertions(+), 2 deletions(-)\n> \n> diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp\n> index 6e9890ccfda1..1baf36fcfd3c 100644\n> --- a/src/apps/cam/camera_session.cpp\n> +++ b/src/apps/cam/camera_session.cpp\n> @@ -159,12 +159,18 @@ CameraSession::~CameraSession()\n>  void CameraSession::listControls() const\n>  {\n>  \tfor (const auto &[id, info] : camera_->controls()) {\n> +\t\tstd::stringstream io;\n> +\t\tio << \"[\"\n> +\t\t   << (id->isInput() ? \"i\" : \" \")\n> +\t\t   << (id->isOutput() ? \"o\" : \" \")\n> +\t\t   << \"] \";\n\nI wonder if a stringstream is overkill here, maybe you could fold the\n\"[\" and \"]\" in the statements below, and just construct a string here.\nIt also depends on the outcome of the above discussion. Up to you.\n\n> +\n>  \t\tif (info.values().empty()) {\n> -\t\t\tstd::cout << \"Control: \"\n> +\t\t\tstd::cout << \"Control: \" << io.str()\n>  \t\t\t\t  << id->vendor() << \"::\" << id->name() << \": \"\n>  \t\t\t\t  << info.toString() << std::endl;\n>  \t\t} else {\n> -\t\t\tstd::cout << \"Control: \"\n> +\t\t\tstd::cout << \"Control: \" << io.str()\n>  \t\t\t\t  << id->vendor() << \"::\" << id->name() << \":\"\n>  \t\t\t\t  << std::endl;\n>  \t\t\tfor (const auto &value : info.values()) {","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 D8119BD160\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 25 Nov 2024 23:23:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 36FEE6605D;\n\tTue, 26 Nov 2024 00:23:00 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2B6EA65FF5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 26 Nov 2024 00:22:58 +0100 (CET)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 05B44526;\n\tTue, 26 Nov 2024 00:22:35 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"vnAuMsL7\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1732576956;\n\tbh=Y9BkCqXvmAjuqGXlkqShozUcm5WXu/fiC+7Uuk+X4Oc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=vnAuMsL7/OYfPuIQN15MBJqWeLv9YkFXlyHR/bsOFNwAOWHB06f1Lro95g7eMHc6N\n\thC1blt+JcIT0nS5S89jK60tyGVXLncP20tGsLaBxxP2dbQ4NFQ79bn1U1kmjNhjRny\n\tmxfnkxZ68xbSDJ3JloCwzClt1keEpJTfTlLwbSZA=","Date":"Tue, 26 Nov 2024 01:22:47 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Paul Elder <paul.elder@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 4/4] apps: cam: Print control direction information","Message-ID":"<20241125232247.GB19381@pendragon.ideasonboard.com>","References":"<20241125153003.3309066-1-paul.elder@ideasonboard.com>\n\t<20241125153003.3309066-5-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20241125153003.3309066-5-paul.elder@ideasonboard.com>","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":32407,"web_url":"https://patchwork.libcamera.org/comment/32407/","msgid":"<Z0bbi4qcah9VV6Wj@pyrite.rasen.tech>","date":"2024-11-27T08:42:51","subject":"Re: [PATCH 4/4] apps: cam: Print control direction information","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Tue, Nov 26, 2024 at 01:22:47AM +0200, Laurent Pinchart wrote:\n> Hi Paul,\n> \n> Thank you for the patch.\n> \n> On Tue, Nov 26, 2024 at 12:30:03AM +0900, Paul Elder wrote:\n> > Now that there is support for retrieving the allowed directions of a\n> > control, print this information when listing controls.\n> > \n> > Sample output:\n> > $ cam --list-controls -c 2\n> > Using camera Virtual0 as cam0\n> > Control: [io] draft::FaceDetectMode:\n> >   - FaceDetectModeOff (0)\n> > Control: [i ] libcamera::FrameDurationLimits: [16666..33333]\n> \n> I was expecting [in], [out] or [input], but i/o has the advantage of\n> aligning the controls names. We could still achieve the same with\n> \n> [in   ]\n> [  out]\n> [inout]\n\nYeah I'll expand it to this at least. Single-characters are indeed\ncryptic.\n\n> \n> at the cost of longer lines, or\n> \n> '[in]   '\n> '[out]  '\n> '[inout]'\n> \n> any opinion from anyone ?\n> \n> >    Size: 2\n> > \n> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> > ---\n> >  src/apps/cam/camera_session.cpp | 10 ++++++++--\n> >  1 file changed, 8 insertions(+), 2 deletions(-)\n> > \n> > diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp\n> > index 6e9890ccfda1..1baf36fcfd3c 100644\n> > --- a/src/apps/cam/camera_session.cpp\n> > +++ b/src/apps/cam/camera_session.cpp\n> > @@ -159,12 +159,18 @@ CameraSession::~CameraSession()\n> >  void CameraSession::listControls() const\n> >  {\n> >  \tfor (const auto &[id, info] : camera_->controls()) {\n> > +\t\tstd::stringstream io;\n> > +\t\tio << \"[\"\n> > +\t\t   << (id->isInput() ? \"i\" : \" \")\n> > +\t\t   << (id->isOutput() ? \"o\" : \" \")\n> > +\t\t   << \"] \";\n> \n> I wonder if a stringstream is overkill here, maybe you could fold the\n> \"[\" and \"]\" in the statements below, and just construct a string here.\n> It also depends on the outcome of the above discussion. Up to you.\n\nI'd rather not duplicate this twice below...\n\n\nPaul\n\n> \n> > +\n> >  \t\tif (info.values().empty()) {\n> > -\t\t\tstd::cout << \"Control: \"\n> > +\t\t\tstd::cout << \"Control: \" << io.str()\n> >  \t\t\t\t  << id->vendor() << \"::\" << id->name() << \": \"\n> >  \t\t\t\t  << info.toString() << std::endl;\n> >  \t\t} else {\n> > -\t\t\tstd::cout << \"Control: \"\n> > +\t\t\tstd::cout << \"Control: \" << io.str()\n> >  \t\t\t\t  << id->vendor() << \"::\" << id->name() << \":\"\n> >  \t\t\t\t  << std::endl;\n> >  \t\t\tfor (const auto &value : info.values()) {","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 62C5CC3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 27 Nov 2024 08:43:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9BFF0660A2;\n\tWed, 27 Nov 2024 09:42:59 +0100 (CET)","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 36C7265FD2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 27 Nov 2024 09:42:58 +0100 (CET)","from pyrite.rasen.tech (unknown\n\t[IPv6:2404:7a81:160:2100:7dcc:a4ea:e361:d355])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 34C7E78C;\n\tWed, 27 Nov 2024 09:42:33 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"BzOO12YD\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1732696955;\n\tbh=GHzYe63PBerGRmHZuCbGNqwHJ2bJvErIVnIySEgjngI=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=BzOO12YD7+Ar1YXBI68owBhV108nW9XmWWWMZBoqvjbW9A/9W0q2rdvo/9KGqzmVi\n\t9SG/KzXPOLVu8i2PItWRGrm2P77T7E8LaIubJ3+y5JYudVsQ12sLqAU4n8naJkh5ms\n\tGmC8Rlq/Lqy2akzPTGxVe1AEOS5f0QcYIl5Ilr1o=","Date":"Wed, 27 Nov 2024 17:42:51 +0900","From":"Paul Elder <paul.elder@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 4/4] apps: cam: Print control direction information","Message-ID":"<Z0bbi4qcah9VV6Wj@pyrite.rasen.tech>","References":"<20241125153003.3309066-1-paul.elder@ideasonboard.com>\n\t<20241125153003.3309066-5-paul.elder@ideasonboard.com>\n\t<20241125232247.GB19381@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20241125232247.GB19381@pendragon.ideasonboard.com>","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>"}}]