[{"id":13368,"web_url":"https://patchwork.libcamera.org/comment/13368/","msgid":"<20201021162652.qfuyx6rjby55weiv@uno.localdomain>","date":"2020-10-21T16:26:52","subject":"Re: [libcamera-devel] [Simple-Cam: PATCH] simple-cam: Use friendly\n\tcamera names","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran,\n\nOn Wed, Oct 21, 2020 at 04:40:43PM +0100, Kieran Bingham wrote:\n> Take the example code for generating a camera name from 'cam' and use\n> it when reporting cameras within the simple-cam application.\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>\n> I wonder if this cameraName() might be something that\n> should go into libcamera::utils as a public API helper?\n>\n>\n> I know we want to allow applications to decide their own naming too, but\n> I think we've discussed in the past about having a helper library on top\n> to make things easier for application developers ?\n>\n>\n>  simple-cam.cpp | 30 +++++++++++++++++++++++++++---\n>  1 file changed, 27 insertions(+), 3 deletions(-)\n>\n> diff --git a/simple-cam.cpp b/simple-cam.cpp\n> index 727bb6d86480..1b6fd3939bf6 100644\n> --- a/simple-cam.cpp\n> +++ b/simple-cam.cpp\n> @@ -60,6 +60,30 @@ static void requestComplete(Request *request)\n>  \tcamera->queueRequest(request);\n>  }\n>\n> +std::string cameraName(std::shared_ptr<libcamera::Camera> camera)\n\nnit: camera can be a reference, or just a raw pointer. No need to\nincrease/decrease the usage count just for the scope of this function.\n\n> +{\n> +\tconst ControlList &props = camera->properties();\n> +\tstd::string name;\n> +\n> +\tswitch (props.get(properties::Location)) {\n> +\tcase properties::CameraLocationFront:\n> +\t\tname = \"Internal front camera\";\n> +\t\tbreak;\n\nI wonder if defaulting to \"Front\" in CameraSensor is still a good idea\nor we should let applications deals with that case...\n\n> +\tcase properties::CameraLocationBack:\n> +\t\tname = \"Internal back camera\";\n> +\t\tbreak;\n> +\tcase properties::CameraLocationExternal:\n> +\t\tname = \"External camera\";\n> +\t\tif (props.contains(properties::Model))\n> +\t\t\tname += \" '\" + props.get(properties::Model) + \"'\";\n\nWhy model is only considered for external cameras ?\n\nWith the last question clarified\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n\n> +\t\tbreak;\n> +\t}\n> +\n> +\tname += \" (\" + camera->id() + \")\";\n> +\n> +\treturn name;\n> +}\n> +\n>  int main()\n>  {\n>  \t/*\n> @@ -77,11 +101,11 @@ int main()\n>  \tcm->start();\n>\n>  \t/*\n> -\t * Just as a test, list all id's of the Camera registered in the\n> -\t * system. They are indexed by name by the CameraManager.\n> +\t * Just as a test, generate names of the Cameras registered in the\n> +\t * system, and list them.\n>  \t */\n>  \tfor (auto const &camera : cm->cameras())\n> -\t\tstd::cout << camera->id() << std::endl;\n> +\t\tstd::cout << \" - \" << cameraName(camera) << std::endl;\n>\n>  \t/*\n>  \t * --------------------------------------------------------------------\n> --\n> 2.25.1\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 28FCBC3D3C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 21 Oct 2020 16:26:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B8CC460C2D;\n\tWed, 21 Oct 2020 18:26:55 +0200 (CEST)","from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net\n\t[217.70.183.197])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DC12460361\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Oct 2020 18:26:54 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 6DF111C000A;\n\tWed, 21 Oct 2020 16:26:54 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Wed, 21 Oct 2020 18:26:52 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20201021162652.qfuyx6rjby55weiv@uno.localdomain>","References":"<20201021154043.511274-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201021154043.511274-1-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [Simple-Cam: PATCH] simple-cam: Use friendly\n\tcamera names","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 <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13369,"web_url":"https://patchwork.libcamera.org/comment/13369/","msgid":"<fccefcc7-610d-34b8-0283-04e4a9e3127f@ideasonboard.com>","date":"2020-10-21T16:31:18","subject":"Re: [libcamera-devel] [Simple-Cam: PATCH] simple-cam: Use friendly\n\tcamera names","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"On 21/10/2020 17:26, Jacopo Mondi wrote:\n> Hi Kieran,\n> \n> On Wed, Oct 21, 2020 at 04:40:43PM +0100, Kieran Bingham wrote:\n>> Take the example code for generating a camera name from 'cam' and use\n>> it when reporting cameras within the simple-cam application.\n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> ---\n>>\n>> I wonder if this cameraName() might be something that\n>> should go into libcamera::utils as a public API helper?\n>>\n>>\n>> I know we want to allow applications to decide their own naming too, but\n>> I think we've discussed in the past about having a helper library on top\n>> to make things easier for application developers ?\n>>\n>>\n>>  simple-cam.cpp | 30 +++++++++++++++++++++++++++---\n>>  1 file changed, 27 insertions(+), 3 deletions(-)\n>>\n>> diff --git a/simple-cam.cpp b/simple-cam.cpp\n>> index 727bb6d86480..1b6fd3939bf6 100644\n>> --- a/simple-cam.cpp\n>> +++ b/simple-cam.cpp\n>> @@ -60,6 +60,30 @@ static void requestComplete(Request *request)\n>>  \tcamera->queueRequest(request);\n>>  }\n>>\n>> +std::string cameraName(std::shared_ptr<libcamera::Camera> camera)\n> \n> nit: camera can be a reference, or just a raw pointer. No need to\n\nI started with a raw pointer, but got a compile error, indicating that\nthe type available in :\n\n  \tfor (auto const &camera : cm->cameras())\n\nwas a shared pointer. So that's what I put in and it compiled ;-)\n\nI presume I could also do a camera.get() ?\n\n> increase/decrease the usage count just for the scope of this function.\n> \n>> +{\n>> +\tconst ControlList &props = camera->properties();\n>> +\tstd::string name;\n>> +\n>> +\tswitch (props.get(properties::Location)) {\n>> +\tcase properties::CameraLocationFront:\n>> +\t\tname = \"Internal front camera\";\n>> +\t\tbreak;\n> \n> I wonder if defaulting to \"Front\" in CameraSensor is still a good idea\n> or we should let applications deals with that case...\n> \n>> +\tcase properties::CameraLocationBack:\n>> +\t\tname = \"Internal back camera\";\n>> +\t\tbreak;\n>> +\tcase properties::CameraLocationExternal:\n>> +\t\tname = \"External camera\";\n>> +\t\tif (props.contains(properties::Model))\n>> +\t\t\tname += \" '\" + props.get(properties::Model) + \"'\";\n> \n> Why model is only considered for external cameras ?\n> \n\nThe code there is taken verbatim from src/cam/\n\n\nIMO, any change here should have a corresponding change there - or ...\nall of this should go in to some helper library (libcamera::utils?) so\nit can be handled as a common use case.\n\n\n> With the last question clarified\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks.\nk\n\n\n> \n> Thanks\n>   j\n> \n> \n>> +\t\tbreak;\n>> +\t}\n>> +\n>> +\tname += \" (\" + camera->id() + \")\";\n>> +\n>> +\treturn name;\n>> +}\n>> +\n>>  int main()\n>>  {\n>>  \t/*\n>> @@ -77,11 +101,11 @@ int main()\n>>  \tcm->start();\n>>\n>>  \t/*\n>> -\t * Just as a test, list all id's of the Camera registered in the\n>> -\t * system. They are indexed by name by the CameraManager.\n>> +\t * Just as a test, generate names of the Cameras registered in the\n>> +\t * system, and list them.\n>>  \t */\n>>  \tfor (auto const &camera : cm->cameras())\n>> -\t\tstd::cout << camera->id() << std::endl;\n>> +\t\tstd::cout << \" - \" << cameraName(camera) << std::endl;\n>>\n>>  \t/*\n>>  \t * --------------------------------------------------------------------\n>> --\n>> 2.25.1\n>>\n>> _______________________________________________\n>> libcamera-devel mailing list\n>> libcamera-devel@lists.libcamera.org\n>> https://lists.libcamera.org/listinfo/libcamera-devel","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 CAABFBDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 21 Oct 2020 16:31:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 580D360D65;\n\tWed, 21 Oct 2020 18:31:27 +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 7663D603F9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Oct 2020 18:31:25 +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 ACBD8BB5;\n\tWed, 21 Oct 2020 18:31:22 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"lPqZVk8o\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1603297885;\n\tbh=gYpAHRv1iQosppJlvt9NzMvelOlLJ4ob531fK/NrzWs=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=lPqZVk8oF9YyIg+WtBoKw0rOAW1bIyixhnlejosivkQ+O1SY6+k1tFml+QzDhUuBM\n\tniraxpIloVk/qeeZvj2byc4f8ix2BvjdTbaAQ/Av+PVf9ZbVsDvgbs7CKYJuuGwBay\n\tGE+42NP6+geY0ghNKwpwY5MIGQxFzI7w4mOfGzQI=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20201021154043.511274-1-kieran.bingham@ideasonboard.com>\n\t<20201021162652.qfuyx6rjby55weiv@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<fccefcc7-610d-34b8-0283-04e4a9e3127f@ideasonboard.com>","Date":"Wed, 21 Oct 2020 17:31:18 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20201021162652.qfuyx6rjby55weiv@uno.localdomain>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [Simple-Cam: PATCH] simple-cam: Use friendly\n\tcamera names","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>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13377,"web_url":"https://patchwork.libcamera.org/comment/13377/","msgid":"<20201021185220.GM3942@pendragon.ideasonboard.com>","date":"2020-10-21T18:52:20","subject":"Re: [libcamera-devel] [Simple-Cam: PATCH] simple-cam: Use friendly\n\tcamera names","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nThank you for the patch.\n\nOn Wed, Oct 21, 2020 at 05:31:18PM +0100, Kieran Bingham wrote:\n> On 21/10/2020 17:26, Jacopo Mondi wrote:\n> > On Wed, Oct 21, 2020 at 04:40:43PM +0100, Kieran Bingham wrote:\n> >> Take the example code for generating a camera name from 'cam' and use\n> >> it when reporting cameras within the simple-cam application.\n> >>\n> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >> ---\n> >>\n> >> I wonder if this cameraName() might be something that\n> >> should go into libcamera::utils as a public API helper?\n> >>\n> >> I know we want to allow applications to decide their own naming too, but\n> >> I think we've discussed in the past about having a helper library on top\n> >> to make things easier for application developers ?\n> >>\n> >>  simple-cam.cpp | 30 +++++++++++++++++++++++++++---\n> >>  1 file changed, 27 insertions(+), 3 deletions(-)\n> >>\n> >> diff --git a/simple-cam.cpp b/simple-cam.cpp\n> >> index 727bb6d86480..1b6fd3939bf6 100644\n> >> --- a/simple-cam.cpp\n> >> +++ b/simple-cam.cpp\n> >> @@ -60,6 +60,30 @@ static void requestComplete(Request *request)\n> >>  \tcamera->queueRequest(request);\n> >>  }\n> >>\n> >> +std::string cameraName(std::shared_ptr<libcamera::Camera> camera)\n> > \n> > nit: camera can be a reference, or just a raw pointer. No need to\n> \n> I started with a raw pointer, but got a compile error, indicating that\n> the type available in :\n> \n>   \tfor (auto const &camera : cm->cameras())\n> \n> was a shared pointer. So that's what I put in and it compiled ;-)\n> \n> I presume I could also do a camera.get() ?\n\nYes, I think that's better to avoid constructing/destroying a shared\npointer for little gain.\n\n> > increase/decrease the usage count just for the scope of this function.\n> > \n> >> +{\n> >> +\tconst ControlList &props = camera->properties();\n> >> +\tstd::string name;\n> >> +\n> >> +\tswitch (props.get(properties::Location)) {\n> >> +\tcase properties::CameraLocationFront:\n> >> +\t\tname = \"Internal front camera\";\n> >> +\t\tbreak;\n> > \n> > I wonder if defaulting to \"Front\" in CameraSensor is still a good idea\n> > or we should let applications deals with that case...\n> > \n> >> +\tcase properties::CameraLocationBack:\n> >> +\t\tname = \"Internal back camera\";\n> >> +\t\tbreak;\n> >> +\tcase properties::CameraLocationExternal:\n> >> +\t\tname = \"External camera\";\n> >> +\t\tif (props.contains(properties::Model))\n> >> +\t\t\tname += \" '\" + props.get(properties::Model) + \"'\";\n> > \n> > Why model is only considered for external cameras ?\n> \n> The code there is taken verbatim from src/cam/\n> \n> IMO, any change here should have a corresponding change there - or ...\n> all of this should go in to some helper library (libcamera::utils?) so\n> it can be handled as a common use case.\n\nA libcamera utility library is needed (and we'll have to discuss whether\nit should be a separate library, or part of the same binary). I'm\nhowever not convinced this particular feature belongs there, as the idea\nbehind our camera naming scheme is to let applications construct the\nnames in the way that best fits their use cases, including localizing\nthem if needed. We have code duplication between cam and simplecam\nbecause they're both demo applications, but it doesn't meant it would be\na candidate for libcamera itself.\n\nAdditionally, I think the application guide should be updated to explain\nhow applications are supposed to construct a camera name.\n\n> > With the last question clarified\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > \n> >> +\t\tbreak;\n> >> +\t}\n> >> +\n> >> +\tname += \" (\" + camera->id() + \")\";\n> >> +\n> >> +\treturn name;\n> >> +}\n> >> +\n> >>  int main()\n> >>  {\n> >>  \t/*\n> >> @@ -77,11 +101,11 @@ int main()\n> >>  \tcm->start();\n> >>\n> >>  \t/*\n> >> -\t * Just as a test, list all id's of the Camera registered in the\n> >> -\t * system. They are indexed by name by the CameraManager.\n> >> +\t * Just as a test, generate names of the Cameras registered in the\n> >> +\t * system, and list them.\n> >>  \t */\n> >>  \tfor (auto const &camera : cm->cameras())\n> >> -\t\tstd::cout << camera->id() << std::endl;\n> >> +\t\tstd::cout << \" - \" << cameraName(camera) << std::endl;\n> >>\n> >>  \t/*\n> >>  \t * --------------------------------------------------------------------","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 10FF9C3D3C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 21 Oct 2020 18:53:08 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7C33760986;\n\tWed, 21 Oct 2020 20:53:07 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A689D60361\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Oct 2020 20:53:06 +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 1B00ABB5;\n\tWed, 21 Oct 2020 20:53:06 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"QqwaXjsL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1603306386;\n\tbh=Gzv9TTzq9dYHSoRquYjfdmzIdvt1Ur8Ev4t5RN91eyk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=QqwaXjsLxky9wUN72mF+AGKj4GMnPIA2Wh5HeiudATxFJHhoYTpCeuchgPAmVVw0z\n\tuy3NJj2qEsktvEz4BgVs2/vQiaTFgnLAwH/3FrFpn67Ub6rhaXnQvI/YY533qlS0CA\n\tOMt+ErUAJsDNPMguBL/VhpFNwgIwSU9vkOZ6pcwQ=","Date":"Wed, 21 Oct 2020 21:52:20 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20201021185220.GM3942@pendragon.ideasonboard.com>","References":"<20201021154043.511274-1-kieran.bingham@ideasonboard.com>\n\t<20201021162652.qfuyx6rjby55weiv@uno.localdomain>\n\t<fccefcc7-610d-34b8-0283-04e4a9e3127f@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<fccefcc7-610d-34b8-0283-04e4a9e3127f@ideasonboard.com>","Subject":"Re: [libcamera-devel] [Simple-Cam: PATCH] simple-cam: Use friendly\n\tcamera names","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 <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]