[{"id":12884,"web_url":"https://patchwork.libcamera.org/comment/12884/","msgid":"<5923e254-071e-edac-b775-765684fadee7@uajain.com>","date":"2020-09-30T05:32:19","subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-friendly\n\tcamera names","submitter":{"id":1,"url":"https://patchwork.libcamera.org/api/people/1/","name":"Umang Jain","email":"email@uajain.com"},"content":"Hi Niklas,\n\nOn 9/29/20 8:16 PM, Niklas Söderlund wrote:\n> Instead of only printing the camera ID which is not intended for humans\n> to read and parse create a more user friendly string when printing\n> camera names. The ID is still printed as it is one option used to select\n> camera using the --camera option.\n>\n> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Umang Jain <email@uajain.com>\n> ---\n> * Changes since v5\n> - Rework camera name.\n>\n> * Changes since v4\n> - Make cameraName() member of CamApp.\n>\n> * Changes since v1\n> - Only print user-friendly names when listing cameras.\n> - Update format of user-friendly names printed.\n> - Update commit message.\n> ---\n>   src/cam/main.cpp | 28 +++++++++++++++++++++++++++-\n>   1 file changed, 27 insertions(+), 1 deletion(-)\n>\n> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> index 244720b491f5c462..311df171a21f6152 100644\n> --- a/src/cam/main.cpp\n> +++ b/src/cam/main.cpp\n> @@ -45,6 +45,8 @@ private:\n>   \tint infoConfiguration();\n>   \tint run();\n>   \n> +\tstd::string cameraName(const Camera *camera);\n> +\n>   \tstatic CamApp *app_;\n>   \tOptionsParser::Options options_;\n>   \tCameraManager *cm_;\n> @@ -340,7 +342,7 @@ int CamApp::run()\n>   \n>   \t\tunsigned int index = 1;\n>   \t\tfor (const std::shared_ptr<Camera> &cam : cm_->cameras()) {\n> -\t\t\tstd::cout << index << \": \" << cam->id() << std::endl;\n> +\t\t\tstd::cout << index << \": \" << cameraName(cam.get()) << std::endl;\n>   \t\t\tindex++;\n>   \t\t}\n>   \t}\n> @@ -378,6 +380,30 @@ int CamApp::run()\n>   \treturn 0;\n>   }\n>   \n> +std::string CamApp::cameraName(const Camera *camera)\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> +\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) + \"'\";\nQuick comment: Can we probably move this out of the switch block? I \nunderstand, as of now, only UVC will return the model property, but \napplication's point-of-view, I don't think we need to carry that \nimplementation detail in cam itself. As and when the reign the model \nproperty expands in libcamera, it shall auto-magically start to show up \nvia `cam -l` :)\n> +\t\tbreak;\n> +\t}\n> +\n> +\tname += \" (\" + camera->id() + \")\";\n> +\n> +\treturn name;\n> +}\n> +\n>   void signalHandler([[maybe_unused]] int signal)\n>   {\n>   \tstd::cout << \"Exiting\" << std::endl;","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 659AEC3B5B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 30 Sep 2020 05:32:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D263C62201;\n\tWed, 30 Sep 2020 07:32:27 +0200 (CEST)","from mail.uajain.com (static.126.159.217.95.clients.your-server.de\n\t[95.217.159.126])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DE2A46035D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 30 Sep 2020 07:32:24 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=uajain.com header.i=@uajain.com\n\theader.b=\"WwpSWC2h\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=uajain.com; s=mail;\n\tt=1601443943; bh=8aVmBAwT3H3PAX1x3HG3+AHaNWJeCo8JxW1jAko9bTw=;\n\th=Subject:To:Cc:References:From:In-Reply-To;\n\tb=WwpSWC2huUnX/2Br+KqHpqK+I8F6Che4IxRGTkIaKIRvt/i13rAy3ZYzaQeAT+r+t\n\tLvOC3q/ZkhOQMXvZBFwv6n7jhcnr43p65nuuea7tqvCY1jEuZGeC9ISDAytTi1B/Pq\n\tIsLRPIrE7kUnqF7/RlBZcp53RI/aY3Y/nUWOqtEZYNsHCmj6sUosjPO6BYPLkRBiDw\n\tPgJ0qGeSGRsUMtahtBDaw8j/kbeaB9mi5/OaS9QCWC2WW/Xl81jgVkqWT2jxOfc4c+\n\tC5+x8FJyog7TzmaclFviX3HvrJwGI10DLv3lzbnunmG8XRYSFP1cfnaHufucEeO1/b\n\tE/hcFQUF8KeQQ==","To":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20200929144648.429397-1-niklas.soderlund@ragnatech.se>\n\t<20200929144648.429397-7-niklas.soderlund@ragnatech.se>","From":"Umang Jain <email@uajain.com>","Message-ID":"<5923e254-071e-edac-b775-765684fadee7@uajain.com>","Date":"Wed, 30 Sep 2020 11:02:19 +0530","Mime-Version":"1.0","In-Reply-To":"<20200929144648.429397-7-niklas.soderlund@ragnatech.se>","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-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>","Content-Transfer-Encoding":"base64","Content-Type":"text/plain; charset=\"utf-8\"; Format=\"flowed\"","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":12887,"web_url":"https://patchwork.libcamera.org/comment/12887/","msgid":"<b9b5f6f5-3a5b-39eb-e53b-b88e65e90411@ideasonboard.com>","date":"2020-09-30T08:14:21","subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-friendly\n\tcamera names","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Umang,\n\nOn 30/09/2020 06:32, Umang Jain wrote:\n> Hi Niklas,\n> \n> On 9/29/20 8:16 PM, Niklas Söderlund wrote:\n>> Instead of only printing the camera ID which is not intended for humans\n>> to read and parse create a more user friendly string when printing\n>> camera names. The ID is still printed as it is one option used to select\n>> camera using the --camera option.\n>>\n>> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> Reviewed-by: Umang Jain <email@uajain.com>\n>> ---\n>> * Changes since v5\n>> - Rework camera name.\n>>\n>> * Changes since v4\n>> - Make cameraName() member of CamApp.\n>>\n>> * Changes since v1\n>> - Only print user-friendly names when listing cameras.\n>> - Update format of user-friendly names printed.\n>> - Update commit message.\n>> ---\n>>   src/cam/main.cpp | 28 +++++++++++++++++++++++++++-\n>>   1 file changed, 27 insertions(+), 1 deletion(-)\n>>\n>> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n>> index 244720b491f5c462..311df171a21f6152 100644\n>> --- a/src/cam/main.cpp\n>> +++ b/src/cam/main.cpp\n>> @@ -45,6 +45,8 @@ private:\n>>       int infoConfiguration();\n>>       int run();\n>>   +    std::string cameraName(const Camera *camera);\n>> +\n>>       static CamApp *app_;\n>>       OptionsParser::Options options_;\n>>       CameraManager *cm_;\n>> @@ -340,7 +342,7 @@ int CamApp::run()\n>>             unsigned int index = 1;\n>>           for (const std::shared_ptr<Camera> &cam : cm_->cameras()) {\n>> -            std::cout << index << \": \" << cam->id() << std::endl;\n>> +            std::cout << index << \": \" << cameraName(cam.get()) <<\n>> std::endl;\n>>               index++;\n>>           }\n>>       }\n>> @@ -378,6 +380,30 @@ int CamApp::run()\n>>       return 0;\n>>   }\n>>   +std::string CamApp::cameraName(const Camera *camera)\n>> +{\n>> +    const ControlList &props = camera->properties();\n>> +    std::string name;\n>> +\n>> +    switch (props.get(properties::Location)) {\n>> +    case properties::CameraLocationFront:\n>> +        name = \"Internal front camera\";\n>> +        break;\n>> +    case properties::CameraLocationBack:\n>> +        name = \"Internal back camera\";\n>> +        break;\n>> +    case properties::CameraLocationExternal:\n>> +        name = \"External camera\";\n>> +        if (props.contains(properties::Model))\n>> +            name += \" '\" + props.get(properties::Model) + \"'\";\n> Quick comment: Can we probably move this out of the switch block? I\n> understand, as of now, only UVC will return the model property, but\n> application's point-of-view, I don't think we need to carry that\n> implementation detail in cam itself. As and when the reign the model\n> property expands in libcamera, it shall auto-magically start to show up\n> via `cam -l` :)\n\nWouldn't it be quite difficult to identify UVC cameras in the system\nthen? It's currently quite rare to have more than one front or back\ncamera (at least in systems we're developing with) but my laptop has 2\nUVC devices internally. If they both simply say \"External camera\" it\nwould be quite hard to know which is the face-detect camera, and which\nis the 'real' camera.\n\nOr maybe it doesn't matter - perhaps 'face detect' is another feature to\nexpress in the properties... (but we can only guess that if the only\nformat is R8/ greyscale, I think).\n\n>> +        break;\n>> +    }\n>> +\n>> +    name += \" (\" + camera->id() + \")\";\n>> +\n>> +    return name;\n>> +}\n>> +\n>>   void signalHandler([[maybe_unused]] int signal)\n>>   {\n>>       std::cout << \"Exiting\" << std::endl;\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 6D0FEC3B5C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 30 Sep 2020 08:14:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D554262209;\n\tWed, 30 Sep 2020 10:14:25 +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 5AEB360A0F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 30 Sep 2020 10:14:24 +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 C2CDD329;\n\tWed, 30 Sep 2020 10:14:23 +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=\"kLMc8v9H\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1601453664;\n\tbh=73FyfpBPxawOgqqroJUc8nDYQje01AbigL23pCW95nQ=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=kLMc8v9HPRRhBD5hL2rAiyrCf/r8qd1m0KKHQzb1PbLN3l6AGhig4jvXqOK7/knOi\n\tGxPkmXUoUIzsq721O0awJ4P1H98boqC+iJDg4KGsmVkK9pKwWE75hwOAn6QfAEVUOP\n\tca/M83buKYmR6M7jVQOLJJ47HGPcqLkyqYMnFNsM=","To":"Umang Jain <email@uajain.com>, =?utf-8?q?Niklas_S=C3=B6derlund?=\n\t<niklas.soderlund@ragnatech.se>,  libcamera-devel@lists.libcamera.org","References":"<20200929144648.429397-1-niklas.soderlund@ragnatech.se>\n\t<20200929144648.429397-7-niklas.soderlund@ragnatech.se>\n\t<5923e254-071e-edac-b775-765684fadee7@uajain.com>","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":"<b9b5f6f5-3a5b-39eb-e53b-b88e65e90411@ideasonboard.com>","Date":"Wed, 30 Sep 2020 09:14:21 +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":"<5923e254-071e-edac-b775-765684fadee7@uajain.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-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","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":12890,"web_url":"https://patchwork.libcamera.org/comment/12890/","msgid":"<b8ab6594-efa3-c92d-ba35-3b3670dc2f23@uajain.com>","date":"2020-09-30T08:28:50","subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-friendly\n\tcamera names","submitter":{"id":1,"url":"https://patchwork.libcamera.org/api/people/1/","name":"Umang Jain","email":"email@uajain.com"},"content":"Hi Kieran\n\nOn 9/30/20 1:44 PM, Kieran Bingham wrote:\n> Hi Umang,\n>\n> On 30/09/2020 06:32, Umang Jain wrote:\n>> Hi Niklas,\n>>\n>> On 9/29/20 8:16 PM, Niklas Söderlund wrote:\n>>> Instead of only printing the camera ID which is not intended for humans\n>>> to read and parse create a more user friendly string when printing\n>>> camera names. The ID is still printed as it is one option used to select\n>>> camera using the --camera option.\n>>>\n>>> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n>>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>> Reviewed-by: Umang Jain <email@uajain.com>\n>>> ---\n>>> * Changes since v5\n>>> - Rework camera name.\n>>>\n>>> * Changes since v4\n>>> - Make cameraName() member of CamApp.\n>>>\n>>> * Changes since v1\n>>> - Only print user-friendly names when listing cameras.\n>>> - Update format of user-friendly names printed.\n>>> - Update commit message.\n>>> ---\n>>>    src/cam/main.cpp | 28 +++++++++++++++++++++++++++-\n>>>    1 file changed, 27 insertions(+), 1 deletion(-)\n>>>\n>>> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n>>> index 244720b491f5c462..311df171a21f6152 100644\n>>> --- a/src/cam/main.cpp\n>>> +++ b/src/cam/main.cpp\n>>> @@ -45,6 +45,8 @@ private:\n>>>        int infoConfiguration();\n>>>        int run();\n>>>    +    std::string cameraName(const Camera *camera);\n>>> +\n>>>        static CamApp *app_;\n>>>        OptionsParser::Options options_;\n>>>        CameraManager *cm_;\n>>> @@ -340,7 +342,7 @@ int CamApp::run()\n>>>              unsigned int index = 1;\n>>>            for (const std::shared_ptr<Camera> &cam : cm_->cameras()) {\n>>> -            std::cout << index << \": \" << cam->id() << std::endl;\n>>> +            std::cout << index << \": \" << cameraName(cam.get()) <<\n>>> std::endl;\n>>>                index++;\n>>>            }\n>>>        }\n>>> @@ -378,6 +380,30 @@ int CamApp::run()\n>>>        return 0;\n>>>    }\n>>>    +std::string CamApp::cameraName(const Camera *camera)\n>>> +{\n>>> +    const ControlList &props = camera->properties();\n>>> +    std::string name;\n>>> +\n>>> +    switch (props.get(properties::Location)) {\n>>> +    case properties::CameraLocationFront:\n>>> +        name = \"Internal front camera\";\n>>> +        break;\n>>> +    case properties::CameraLocationBack:\n>>> +        name = \"Internal back camera\";\n>>> +        break;\n>>> +    case properties::CameraLocationExternal:\n>>> +        name = \"External camera\";\n>>> +        if (props.contains(properties::Model))\n>>> +            name += \" '\" + props.get(properties::Model) + \"'\";\n>> Quick comment: Can we probably move this out of the switch block? I\n>> understand, as of now, only UVC will return the model property, but\n>> application's point-of-view, I don't think we need to carry that\n>> implementation detail in cam itself. As and when the reign the model\n>> property expands in libcamera, it shall auto-magically start to show up\n>> via `cam -l` :)\n> Wouldn't it be quite difficult to identify UVC cameras in the system\n> then? It's currently quite rare to have more than one front or back\n> camera (at least in systems we're developing with) but my laptop has 2\n> UVC devices internally. If they both simply say \"External camera\" it\n> would be quite hard to know which is the face-detect camera, and which\n> is the 'real' camera.\n>\n> Or maybe it doesn't matter - perhaps 'face detect' is another feature to\n> express in the properties... (but we can only guess that if the only\n> format is R8/ greyscale, I think).\nNot sure if I follow clearly, What I am suggesting is something on the \nlines:\n\n+std::string CamApp::cameraName(const Camera *camera)\n+{\n+    const ControlList &props = camera->properties();\n+    std::string name;\n+\n+    switch (props.get(properties::Location)) {\n+    case properties::CameraLocationFront:\n+        name = \"Internal front camera\";\n+        break;\n+    case properties::CameraLocationBack:\n+        name = \"Internal back camera\";\n+        break;\n+    case properties::CameraLocationExternal:\n+        name = \"External camera\";\n+        break;\n+    }\n+\n+    if (props.contains(properties::Model))\n+        name += \" '\" + props.get(properties::Model) + \"'\";\n+\n+    name += \" (\" + camera->id() + \")\";\n+\n+    return name;\n+}\n\nThis way, as and when the support for model property improves in the \nfuture, `cam -l` will tell us about it (without requiring to introduce \nany patch up code  here). If it is absent (as of now), so be it.\n>\n>>> +        break;\n>>> +    }\n>>> +\n>>> +    name += \" (\" + camera->id() + \")\";\n>>> +\n>>> +    return name;\n>>> +}\n>>> +\n>>>    void signalHandler([[maybe_unused]] int signal)\n>>>    {\n>>>        std::cout << \"Exiting\" << std::endl;","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 6E842C3B5C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 30 Sep 2020 08:28:55 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3EE7C62209;\n\tWed, 30 Sep 2020 10:28:55 +0200 (CEST)","from mail.uajain.com (static.126.159.217.95.clients.your-server.de\n\t[95.217.159.126])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5449460A0F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 30 Sep 2020 10:28:54 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=uajain.com header.i=@uajain.com\n\theader.b=\"ibYxOq9O\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=uajain.com; s=mail;\n\tt=1601454533; bh=kokLe0xhwRr/tgxUaZxEYBNmlRTXy6L+D0Nvn2M+aHI=;\n\th=Subject:To:References:From:In-Reply-To;\n\tb=ibYxOq9OU6bj7Kcal7cbjBZQYPNMENs1DhdWKoL5u8WEkz6MDfE0U0Ct2GKPyRSR4\n\tPMwzCqqHKWy8I2kY1P81bg8rERpzu5eeWBglkoqxQWsxQtCuRqhuiUbtwNc5xeL/zO\n\tQSXLBANlM171Foi4BCX+WcE7CnzC0cAhCto2G2Hg79sx96/noXhgXCSD2JJ0yMYXwd\n\toldPteISHjY/TIa8bDyMOEZ7NHTAcOcgF55PAR44RskXyLZ20zm+ZQeahHBWgbyyCr\n\teH2JMmgzzsjjLWaDIlcWbeJyWJT+7oN8elJffYD6gmPZd5qewSJJuIbmQX7OFGdc9W\n\tKXD8B/9hHC55Q==","To":"kieran.bingham@ideasonboard.com, =?utf-8?q?Niklas_S=C3=B6derlund?=\n\t<niklas.soderlund@ragnatech.se>,  libcamera-devel@lists.libcamera.org","References":"<20200929144648.429397-1-niklas.soderlund@ragnatech.se>\n\t<20200929144648.429397-7-niklas.soderlund@ragnatech.se>\n\t<5923e254-071e-edac-b775-765684fadee7@uajain.com>\n\t<b9b5f6f5-3a5b-39eb-e53b-b88e65e90411@ideasonboard.com>","From":"Umang Jain <email@uajain.com>","Message-ID":"<b8ab6594-efa3-c92d-ba35-3b3670dc2f23@uajain.com>","Date":"Wed, 30 Sep 2020 13:58:50 +0530","Mime-Version":"1.0","In-Reply-To":"<b9b5f6f5-3a5b-39eb-e53b-b88e65e90411@ideasonboard.com>","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-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>","Content-Transfer-Encoding":"base64","Content-Type":"text/plain; charset=\"utf-8\"; Format=\"flowed\"","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":12896,"web_url":"https://patchwork.libcamera.org/comment/12896/","msgid":"<6c889aca-f554-6b2f-2553-8bf693a8ea32@ideasonboard.com>","date":"2020-09-30T08:39:23","subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-friendly\n\tcamera names","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Heya,\n\nOn 30/09/2020 09:28, Umang Jain wrote:\n> Hi Kieran\n> \n> On 9/30/20 1:44 PM, Kieran Bingham wrote:\n>> Hi Umang,\n>>\n>> On 30/09/2020 06:32, Umang Jain wrote:\n>>> Hi Niklas,\n>>>\n>>> On 9/29/20 8:16 PM, Niklas Söderlund wrote:\n>>>> Instead of only printing the camera ID which is not intended for humans\n>>>> to read and parse create a more user friendly string when printing\n>>>> camera names. The ID is still printed as it is one option used to\n>>>> select\n>>>> camera using the --camera option.\n>>>>\n>>>> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n>>>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>>> Reviewed-by: Umang Jain <email@uajain.com>\n>>>> ---\n>>>> * Changes since v5\n>>>> - Rework camera name.\n>>>>\n>>>> * Changes since v4\n>>>> - Make cameraName() member of CamApp.\n>>>>\n>>>> * Changes since v1\n>>>> - Only print user-friendly names when listing cameras.\n>>>> - Update format of user-friendly names printed.\n>>>> - Update commit message.\n>>>> ---\n>>>>    src/cam/main.cpp | 28 +++++++++++++++++++++++++++-\n>>>>    1 file changed, 27 insertions(+), 1 deletion(-)\n>>>>\n>>>> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n>>>> index 244720b491f5c462..311df171a21f6152 100644\n>>>> --- a/src/cam/main.cpp\n>>>> +++ b/src/cam/main.cpp\n>>>> @@ -45,6 +45,8 @@ private:\n>>>>        int infoConfiguration();\n>>>>        int run();\n>>>>    +    std::string cameraName(const Camera *camera);\n>>>> +\n>>>>        static CamApp *app_;\n>>>>        OptionsParser::Options options_;\n>>>>        CameraManager *cm_;\n>>>> @@ -340,7 +342,7 @@ int CamApp::run()\n>>>>              unsigned int index = 1;\n>>>>            for (const std::shared_ptr<Camera> &cam : cm_->cameras()) {\n>>>> -            std::cout << index << \": \" << cam->id() << std::endl;\n>>>> +            std::cout << index << \": \" << cameraName(cam.get()) <<\n>>>> std::endl;\n>>>>                index++;\n>>>>            }\n>>>>        }\n>>>> @@ -378,6 +380,30 @@ int CamApp::run()\n>>>>        return 0;\n>>>>    }\n>>>>    +std::string CamApp::cameraName(const Camera *camera)\n>>>> +{\n>>>> +    const ControlList &props = camera->properties();\n>>>> +    std::string name;\n>>>> +\n>>>> +    switch (props.get(properties::Location)) {\n>>>> +    case properties::CameraLocationFront:\n>>>> +        name = \"Internal front camera\";\n>>>> +        break;\n>>>> +    case properties::CameraLocationBack:\n>>>> +        name = \"Internal back camera\";\n>>>> +        break;\n>>>> +    case properties::CameraLocationExternal:\n>>>> +        name = \"External camera\";\n>>>> +        if (props.contains(properties::Model))\n>>>> +            name += \" '\" + props.get(properties::Model) + \"'\";\n>>> Quick comment: Can we probably move this out of the switch block? I\n>>> understand, as of now, only UVC will return the model property, but\n>>> application's point-of-view, I don't think we need to carry that\n>>> implementation detail in cam itself. As and when the reign the model\n>>> property expands in libcamera, it shall auto-magically start to show up\n>>> via `cam -l` :)\n>> Wouldn't it be quite difficult to identify UVC cameras in the system\n>> then? It's currently quite rare to have more than one front or back\n>> camera (at least in systems we're developing with) but my laptop has 2\n>> UVC devices internally. If they both simply say \"External camera\" it\n>> would be quite hard to know which is the face-detect camera, and which\n>> is the 'real' camera.\n>>\n>> Or maybe it doesn't matter - perhaps 'face detect' is another feature to\n>> express in the properties... (but we can only guess that if the only\n>> format is R8/ greyscale, I think).\n> Not sure if I follow clearly, What I am suggesting is something on the\n> lines:\n> \n> +std::string CamApp::cameraName(const Camera *camera)\n> +{\n> +    const ControlList &props = camera->properties();\n> +    std::string name;\n> +\n> +    switch (props.get(properties::Location)) {\n> +    case properties::CameraLocationFront:\n> +        name = \"Internal front camera\";\n> +        break;\n> +    case properties::CameraLocationBack:\n> +        name = \"Internal back camera\";\n> +        break;\n> +    case properties::CameraLocationExternal:\n> +        name = \"External camera\";\n> +        break;\n> +    }\n> +\n> +    if (props.contains(properties::Model))\n> +        name += \" '\" + props.get(properties::Model) + \"'\";\n> +\n> +    name += \" (\" + camera->id() + \")\";\n> +\n> +    return name;\n> +}\n> \n> This way, as and when the support for model property improves in the\n> future, `cam -l` will tell us about it (without requiring to introduce\n> any patch up code  here). If it is absent (as of now), so be it.\n\nAha, I see - that makes more sense now - sorry I didn't understand at first.\n\nWell, it seems a good idea to me - but I'll leave Niklas' to respond on\nthat, as I know he's already trying to manage the many\nbikeshedding/naming schemes on this part.\n\n--\nKieran\n\n\n>>\n>>>> +        break;\n>>>> +    }\n>>>> +\n>>>> +    name += \" (\" + camera->id() + \")\";\n>>>> +\n>>>> +    return name;\n>>>> +}\n>>>> +\n>>>>    void signalHandler([[maybe_unused]] int signal)\n>>>>    {\n>>>>        std::cout << \"Exiting\" << std::endl;\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 28CFCC3B5C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 30 Sep 2020 08:39:29 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EEAF962220;\n\tWed, 30 Sep 2020 10:39:28 +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 B7C3F6035F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 30 Sep 2020 10:39:27 +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 21D8E329;\n\tWed, 30 Sep 2020 10:39:27 +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=\"UzxmoExs\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1601455167;\n\tbh=uorGRN4xVwgOY3p6VJzgG5owcGBdYbm/55tNM+gGjwQ=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=UzxmoExsv5J764Bk9cdSgVX1MM2EpA0N9ozOdKA5UjuvMvF709jGaqUeHK5/JlHUy\n\trY2Nec4s3+PUem9WqbNS7meRmvNASM1FBMQS64u6vSD6T4kyUxfrvidMfXJpeU+J4k\n\twl8KlWnRScUkawOszKQViXDpJS6c07DoaYWLt3kM=","To":"Umang Jain <email@uajain.com>, =?utf-8?q?Niklas_S=C3=B6derlund?=\n\t<niklas.soderlund@ragnatech.se>,  libcamera-devel@lists.libcamera.org","References":"<20200929144648.429397-1-niklas.soderlund@ragnatech.se>\n\t<20200929144648.429397-7-niklas.soderlund@ragnatech.se>\n\t<5923e254-071e-edac-b775-765684fadee7@uajain.com>\n\t<b9b5f6f5-3a5b-39eb-e53b-b88e65e90411@ideasonboard.com>\n\t<b8ab6594-efa3-c92d-ba35-3b3670dc2f23@uajain.com>","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":"<6c889aca-f554-6b2f-2553-8bf693a8ea32@ideasonboard.com>","Date":"Wed, 30 Sep 2020 09:39:23 +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":"<b8ab6594-efa3-c92d-ba35-3b3670dc2f23@uajain.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-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","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":12905,"web_url":"https://patchwork.libcamera.org/comment/12905/","msgid":"<20200930101254.GB1516931@oden.dyn.berto.se>","date":"2020-09-30T10:12:54","subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-friendly\n\tcamera names","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Umang and Kieran,\n\nOn 2020-09-30 09:39:23 +0100, Kieran Bingham wrote:\n> Heya,\n> \n> On 30/09/2020 09:28, Umang Jain wrote:\n> > Hi Kieran\n> > \n> > On 9/30/20 1:44 PM, Kieran Bingham wrote:\n> >> Hi Umang,\n> >>\n> >> On 30/09/2020 06:32, Umang Jain wrote:\n> >>> Hi Niklas,\n> >>>\n> >>> On 9/29/20 8:16 PM, Niklas Söderlund wrote:\n> >>>> Instead of only printing the camera ID which is not intended for humans\n> >>>> to read and parse create a more user friendly string when printing\n> >>>> camera names. The ID is still printed as it is one option used to\n> >>>> select\n> >>>> camera using the --camera option.\n> >>>>\n> >>>> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> >>>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >>>> Reviewed-by: Umang Jain <email@uajain.com>\n> >>>> ---\n> >>>> * Changes since v5\n> >>>> - Rework camera name.\n> >>>>\n> >>>> * Changes since v4\n> >>>> - Make cameraName() member of CamApp.\n> >>>>\n> >>>> * Changes since v1\n> >>>> - Only print user-friendly names when listing cameras.\n> >>>> - Update format of user-friendly names printed.\n> >>>> - Update commit message.\n> >>>> ---\n> >>>>    src/cam/main.cpp | 28 +++++++++++++++++++++++++++-\n> >>>>    1 file changed, 27 insertions(+), 1 deletion(-)\n> >>>>\n> >>>> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> >>>> index 244720b491f5c462..311df171a21f6152 100644\n> >>>> --- a/src/cam/main.cpp\n> >>>> +++ b/src/cam/main.cpp\n> >>>> @@ -45,6 +45,8 @@ private:\n> >>>>        int infoConfiguration();\n> >>>>        int run();\n> >>>>    +    std::string cameraName(const Camera *camera);\n> >>>> +\n> >>>>        static CamApp *app_;\n> >>>>        OptionsParser::Options options_;\n> >>>>        CameraManager *cm_;\n> >>>> @@ -340,7 +342,7 @@ int CamApp::run()\n> >>>>              unsigned int index = 1;\n> >>>>            for (const std::shared_ptr<Camera> &cam : cm_->cameras()) {\n> >>>> -            std::cout << index << \": \" << cam->id() << std::endl;\n> >>>> +            std::cout << index << \": \" << cameraName(cam.get()) <<\n> >>>> std::endl;\n> >>>>                index++;\n> >>>>            }\n> >>>>        }\n> >>>> @@ -378,6 +380,30 @@ int CamApp::run()\n> >>>>        return 0;\n> >>>>    }\n> >>>>    +std::string CamApp::cameraName(const Camera *camera)\n> >>>> +{\n> >>>> +    const ControlList &props = camera->properties();\n> >>>> +    std::string name;\n> >>>> +\n> >>>> +    switch (props.get(properties::Location)) {\n> >>>> +    case properties::CameraLocationFront:\n> >>>> +        name = \"Internal front camera\";\n> >>>> +        break;\n> >>>> +    case properties::CameraLocationBack:\n> >>>> +        name = \"Internal back camera\";\n> >>>> +        break;\n> >>>> +    case properties::CameraLocationExternal:\n> >>>> +        name = \"External camera\";\n> >>>> +        if (props.contains(properties::Model))\n> >>>> +            name += \" '\" + props.get(properties::Model) + \"'\";\n> >>> Quick comment: Can we probably move this out of the switch block? I\n> >>> understand, as of now, only UVC will return the model property, but\n> >>> application's point-of-view, I don't think we need to carry that\n> >>> implementation detail in cam itself. As and when the reign the model\n> >>> property expands in libcamera, it shall auto-magically start to show up\n> >>> via `cam -l` :)\n> >> Wouldn't it be quite difficult to identify UVC cameras in the system\n> >> then? It's currently quite rare to have more than one front or back\n> >> camera (at least in systems we're developing with) but my laptop has 2\n> >> UVC devices internally. If they both simply say \"External camera\" it\n> >> would be quite hard to know which is the face-detect camera, and which\n> >> is the 'real' camera.\n> >>\n> >> Or maybe it doesn't matter - perhaps 'face detect' is another feature to\n> >> express in the properties... (but we can only guess that if the only\n> >> format is R8/ greyscale, I think).\n> > Not sure if I follow clearly, What I am suggesting is something on the\n> > lines:\n> > \n> > +std::string CamApp::cameraName(const Camera *camera)\n> > +{\n> > +    const ControlList &props = camera->properties();\n> > +    std::string name;\n> > +\n> > +    switch (props.get(properties::Location)) {\n> > +    case properties::CameraLocationFront:\n> > +        name = \"Internal front camera\";\n> > +        break;\n> > +    case properties::CameraLocationBack:\n> > +        name = \"Internal back camera\";\n> > +        break;\n> > +    case properties::CameraLocationExternal:\n> > +        name = \"External camera\";\n> > +        break;\n> > +    }\n> > +\n> > +    if (props.contains(properties::Model))\n> > +        name += \" '\" + props.get(properties::Model) + \"'\";\n> > +\n> > +    name += \" (\" + camera->id() + \")\";\n> > +\n> > +    return name;\n> > +}\n\nThis is more or less how it looked in v5 and all earlier versions of \nthis series. Laurent commented in v5 that he only wanted model to be \nprinted fro external cameras so that is what I do in this series.\n\n> > \n> > This way, as and when the support for model property improves in the\n> > future, `cam -l` will tell us about it (without requiring to introduce\n> > any patch up code  here). If it is absent (as of now), so be it.\n\nModel is available for all cameras already (please compare the cover \nletter of this version and v4).\n\n> \n> Aha, I see - that makes more sense now - sorry I didn't understand at first.\n> \n> Well, it seems a good idea to me - but I'll leave Niklas' to respond on\n> that, as I know he's already trying to manage the many\n> bikeshedding/naming schemes on this part.\n\nI don't like to bikeshedd and have no strong opinion on the format \ncamera names are printed in a test application. I'm however less excited \nthat each new version of this series receive new ideas on how the name \nshould look. I think I will drop this patch for the next version and \nthen post it once the meat of this series is picked up.\n\n> \n> --\n> Kieran\n> \n> \n> >>\n> >>>> +        break;\n> >>>> +    }\n> >>>> +\n> >>>> +    name += \" (\" + camera->id() + \")\";\n> >>>> +\n> >>>> +    return name;\n> >>>> +}\n> >>>> +\n> >>>>    void signalHandler([[maybe_unused]] int signal)\n> >>>>    {\n> >>>>        std::cout << \"Exiting\" << std::endl;\n> > \n> \n> -- \n> Regards\n> --\n> Kieran","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 07AFDC3B5C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 30 Sep 2020 10:12:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 533B762211;\n\tWed, 30 Sep 2020 12:12:57 +0200 (CEST)","from mail-lf1-x141.google.com (mail-lf1-x141.google.com\n\t[IPv6:2a00:1450:4864:20::141])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0AB5B60BD4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 30 Sep 2020 12:12:56 +0200 (CEST)","by mail-lf1-x141.google.com with SMTP id x69so1448291lff.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 30 Sep 2020 03:12:55 -0700 (PDT)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tm10sm138727lfo.184.2020.09.30.03.12.54\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 30 Sep 2020 03:12:54 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"SRsksste\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=ORnkUgCqy/WFqMWOQlLBfakYfPgZX+HHDMOwvwpRWw8=;\n\tb=SRsksste0iFP3VpZqx1Yhyi0SkxGEanwppeYqnA5EAr7+tpw09GZaGJs5cmo1Us+IL\n\t/Ouhifu/B5YZz6tnndI77WQfdLSn/gYXbO9FFUBVPXJ4QRwnr6AuBOl+2JSv3VnZrPAV\n\ts7xButKGFAbOSyxdsnbywZCt47WsKkxOS1enzwW5702WMM5YHoBbDLxaUInNcje2F14L\n\tWlDwJjTXa25f0y909sIxbqDYolucAgNTh78w2sOXfJhET5w9lJCu3emXW1yHFbPZWw+J\n\tKlyJNpiJMU4tjR3N0q7VbM4ZgVBRTvApmros0jCHuxqom9Yqt962ZlQcKhJhIQuMgNZ2\n\tT00g==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=ORnkUgCqy/WFqMWOQlLBfakYfPgZX+HHDMOwvwpRWw8=;\n\tb=iC185340F9nMR7JwNLUyj4UP1UP7EMzUulT8T3p+q7ZaR/EWslJKDlGxnWP7x5qCXw\n\tLtIW0MIyG20l4VbDBzR/HyaSQFYi+06WRKn5lXpiilAsOuht4TKDpZClNN2iiB7UD2MY\n\tCegSCL14dj6Mx0mphPCAKjQ+aGYleEM+NXvyp2MWx9kCOUo3q+oSKP7WA88Zdsg1SfRF\n\tHgGPQfmuL2G/41FThnJia1g8UPYDJ8vyFdlBwvzDh/VcSRbOm1I3Vf6Bj5lfPEh8D2u0\n\tJ/Pyg2v4QSYUtiUWkqQTxfWfkgoDyz43Z3CurDiuf9+6iF1btVX2BiorFm7EqzxKK/sJ\n\tQIKw==","X-Gm-Message-State":"AOAM531pNgzHxfSWDXlDTzXLgABiC+Na8BlPN+Hc4ocQAs+J5+WNnNt7\n\tkWFF54wzqrrupaGZpDqASKEkabzlUOQjzg==","X-Google-Smtp-Source":"ABdhPJy4g0Z6oJZ3emqhAfRtM8SnYz2aTJ/bAX9DeNVOnrxDwCI0msEjWLhbopjAQHQY7pY5UlOnbw==","X-Received":"by 2002:a19:8c07:: with SMTP id o7mr571635lfd.525.1601460774982; \n\tWed, 30 Sep 2020 03:12:54 -0700 (PDT)","Date":"Wed, 30 Sep 2020 12:12:54 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200930101254.GB1516931@oden.dyn.berto.se>","References":"<20200929144648.429397-1-niklas.soderlund@ragnatech.se>\n\t<20200929144648.429397-7-niklas.soderlund@ragnatech.se>\n\t<5923e254-071e-edac-b775-765684fadee7@uajain.com>\n\t<b9b5f6f5-3a5b-39eb-e53b-b88e65e90411@ideasonboard.com>\n\t<b8ab6594-efa3-c92d-ba35-3b3670dc2f23@uajain.com>\n\t<6c889aca-f554-6b2f-2553-8bf693a8ea32@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<6c889aca-f554-6b2f-2553-8bf693a8ea32@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-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@lists.libcamera.org","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":12910,"web_url":"https://patchwork.libcamera.org/comment/12910/","msgid":"<1b00d1dc-e02c-5132-f078-e2161cf27360@uajain.com>","date":"2020-09-30T11:41:59","subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-friendly\n\tcamera names","submitter":{"id":1,"url":"https://patchwork.libcamera.org/api/people/1/","name":"Umang Jain","email":"email@uajain.com"},"content":"Hi Niklas\n\nOn 9/30/20 3:42 PM, Niklas Söderlund wrote:\n> Hi Umang and Kieran,\n>\n> On 2020-09-30 09:39:23 +0100, Kieran Bingham wrote:\n>> Heya,\n>>\n>> On 30/09/2020 09:28, Umang Jain wrote:\n>>> Hi Kieran\n>>>\n>>> On 9/30/20 1:44 PM, Kieran Bingham wrote:\n>>>> Hi Umang,\n>>>>\n>>>> On 30/09/2020 06:32, Umang Jain wrote:\n>>>>> Hi Niklas,\n>>>>>\n>>>>> On 9/29/20 8:16 PM, Niklas Söderlund wrote:\n>>>>>> Instead of only printing the camera ID which is not intended for humans\n>>>>>> to read and parse create a more user friendly string when printing\n>>>>>> camera names. The ID is still printed as it is one option used to\n>>>>>> select\n>>>>>> camera using the --camera option.\n>>>>>>\n>>>>>> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n>>>>>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>>>>> Reviewed-by: Umang Jain <email@uajain.com>\n>>>>>> ---\n>>>>>> * Changes since v5\n>>>>>> - Rework camera name.\n>>>>>>\n>>>>>> * Changes since v4\n>>>>>> - Make cameraName() member of CamApp.\n>>>>>>\n>>>>>> * Changes since v1\n>>>>>> - Only print user-friendly names when listing cameras.\n>>>>>> - Update format of user-friendly names printed.\n>>>>>> - Update commit message.\n>>>>>> ---\n>>>>>>     src/cam/main.cpp | 28 +++++++++++++++++++++++++++-\n>>>>>>     1 file changed, 27 insertions(+), 1 deletion(-)\n>>>>>>\n>>>>>> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n>>>>>> index 244720b491f5c462..311df171a21f6152 100644\n>>>>>> --- a/src/cam/main.cpp\n>>>>>> +++ b/src/cam/main.cpp\n>>>>>> @@ -45,6 +45,8 @@ private:\n>>>>>>         int infoConfiguration();\n>>>>>>         int run();\n>>>>>>     +    std::string cameraName(const Camera *camera);\n>>>>>> +\n>>>>>>         static CamApp *app_;\n>>>>>>         OptionsParser::Options options_;\n>>>>>>         CameraManager *cm_;\n>>>>>> @@ -340,7 +342,7 @@ int CamApp::run()\n>>>>>>               unsigned int index = 1;\n>>>>>>             for (const std::shared_ptr<Camera> &cam : cm_->cameras()) {\n>>>>>> -            std::cout << index << \": \" << cam->id() << std::endl;\n>>>>>> +            std::cout << index << \": \" << cameraName(cam.get()) <<\n>>>>>> std::endl;\n>>>>>>                 index++;\n>>>>>>             }\n>>>>>>         }\n>>>>>> @@ -378,6 +380,30 @@ int CamApp::run()\n>>>>>>         return 0;\n>>>>>>     }\n>>>>>>     +std::string CamApp::cameraName(const Camera *camera)\n>>>>>> +{\n>>>>>> +    const ControlList &props = camera->properties();\n>>>>>> +    std::string name;\n>>>>>> +\n>>>>>> +    switch (props.get(properties::Location)) {\n>>>>>> +    case properties::CameraLocationFront:\n>>>>>> +        name = \"Internal front camera\";\n>>>>>> +        break;\n>>>>>> +    case properties::CameraLocationBack:\n>>>>>> +        name = \"Internal back camera\";\n>>>>>> +        break;\n>>>>>> +    case properties::CameraLocationExternal:\n>>>>>> +        name = \"External camera\";\n>>>>>> +        if (props.contains(properties::Model))\n>>>>>> +            name += \" '\" + props.get(properties::Model) + \"'\";\n>>>>> Quick comment: Can we probably move this out of the switch block? I\n>>>>> understand, as of now, only UVC will return the model property, but\n>>>>> application's point-of-view, I don't think we need to carry that\n>>>>> implementation detail in cam itself. As and when the reign the model\n>>>>> property expands in libcamera, it shall auto-magically start to show up\n>>>>> via `cam -l` :)\n>>>> Wouldn't it be quite difficult to identify UVC cameras in the system\n>>>> then? It's currently quite rare to have more than one front or back\n>>>> camera (at least in systems we're developing with) but my laptop has 2\n>>>> UVC devices internally. If they both simply say \"External camera\" it\n>>>> would be quite hard to know which is the face-detect camera, and which\n>>>> is the 'real' camera.\n>>>>\n>>>> Or maybe it doesn't matter - perhaps 'face detect' is another feature to\n>>>> express in the properties... (but we can only guess that if the only\n>>>> format is R8/ greyscale, I think).\n>>> Not sure if I follow clearly, What I am suggesting is something on the\n>>> lines:\n>>>\n>>> +std::string CamApp::cameraName(const Camera *camera)\n>>> +{\n>>> +    const ControlList &props = camera->properties();\n>>> +    std::string name;\n>>> +\n>>> +    switch (props.get(properties::Location)) {\n>>> +    case properties::CameraLocationFront:\n>>> +        name = \"Internal front camera\";\n>>> +        break;\n>>> +    case properties::CameraLocationBack:\n>>> +        name = \"Internal back camera\";\n>>> +        break;\n>>> +    case properties::CameraLocationExternal:\n>>> +        name = \"External camera\";\n>>> +        break;\n>>> +    }\n>>> +\n>>> +    if (props.contains(properties::Model))\n>>> +        name += \" '\" + props.get(properties::Model) + \"'\";\n>>> +\n>>> +    name += \" (\" + camera->id() + \")\";\n>>> +\n>>> +    return name;\n>>> +}\n> This is more or less how it looked in v5 and all earlier versions of\n> this series. Laurent commented in v5 that he only wanted model to be\n> printed fro external cameras so that is what I do in this series.\nAh ok. I re-read it again and I think he is right. Sorry for the noise. \nPlease keep the patch in the series :-)\n>\n>>> This way, as and when the support for model property improves in the\n>>> future, `cam -l` will tell us about it (without requiring to introduce\n>>> any patch up code  here). If it is absent (as of now), so be it.\n> Model is available for all cameras already (please compare the cover\n> letter of this version and v4).\n>\n>> Aha, I see - that makes more sense now - sorry I didn't understand at first.\n>>\n>> Well, it seems a good idea to me - but I'll leave Niklas' to respond on\n>> that, as I know he's already trying to manage the many\n>> bikeshedding/naming schemes on this part.\n> I don't like to bikeshedd and have no strong opinion on the format\n> camera names are printed in a test application. I'm however less excited\n> that each new version of this series receive new ideas on how the name\n> should look. I think I will drop this patch for the next version and\n> then post it once the meat of this series is picked up.\n>\n>> --\n>> Kieran\n>>\n>>\n>>>>>> +        break;\n>>>>>> +    }\n>>>>>> +\n>>>>>> +    name += \" (\" + camera->id() + \")\";\n>>>>>> +\n>>>>>> +    return name;\n>>>>>> +}\n>>>>>> +\n>>>>>>     void signalHandler([[maybe_unused]] int signal)\n>>>>>>     {\n>>>>>>         std::cout << \"Exiting\" << std::endl;\n>> -- \n>> Regards\n>> --\n>> Kieran","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 1A843C3B5C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 30 Sep 2020 11:42:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9E7E462211;\n\tWed, 30 Sep 2020 13:42:04 +0200 (CEST)","from mail.uajain.com (static.126.159.217.95.clients.your-server.de\n\t[95.217.159.126])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D240860BD4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 30 Sep 2020 13:42:03 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=uajain.com header.i=@uajain.com\n\theader.b=\"il0aGza9\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=uajain.com; s=mail;\n\tt=1601466123; bh=W5cru2D+Quakx4oHpeRz2Sd0BHAIWCcNwWhsSZ/PlHE=;\n\th=Subject:To:Cc:References:From:In-Reply-To;\n\tb=il0aGza9cO+vlgPx4TUoRUZXpyJQ3yxdPYXciuJntUmgcVCfEyjB6JtwSW0Xae0ie\n\tCCdB8B0HXfqzOpio6Yau4hs4l9TfMm5YtSVb9pr2nCWkZc9spI9YVxlHBjTtmesVqS\n\t4318hpLdMLHkJe5GFv46ENXeeLIdKanGt5LzssEgyoJqztNeyFz5IR840hoT7LGrOj\n\tQLuOvCGZmxOJ2ostPZ6hsBaDdxhTyZvNV1CKIETQZy8n9EdZJB1wQ27lJGDlT/gxik\n\tfLRzmb6b05Ds67vElTttlAyo0LDb/8+0ikfgzI3IKHlQNzAZv0NtDwipHxWOu591fO\n\tVy3TJgapE2tQg==","To":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","References":"<20200929144648.429397-1-niklas.soderlund@ragnatech.se>\n\t<20200929144648.429397-7-niklas.soderlund@ragnatech.se>\n\t<5923e254-071e-edac-b775-765684fadee7@uajain.com>\n\t<b9b5f6f5-3a5b-39eb-e53b-b88e65e90411@ideasonboard.com>\n\t<b8ab6594-efa3-c92d-ba35-3b3670dc2f23@uajain.com>\n\t<6c889aca-f554-6b2f-2553-8bf693a8ea32@ideasonboard.com>\n\t<20200930101254.GB1516931@oden.dyn.berto.se>","From":"Umang Jain <email@uajain.com>","Message-ID":"<1b00d1dc-e02c-5132-f078-e2161cf27360@uajain.com>","Date":"Wed, 30 Sep 2020 17:11:59 +0530","Mime-Version":"1.0","In-Reply-To":"<20200930101254.GB1516931@oden.dyn.berto.se>","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-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@lists.libcamera.org","Content-Transfer-Encoding":"base64","Content-Type":"text/plain; charset=\"utf-8\"; Format=\"flowed\"","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":12927,"web_url":"https://patchwork.libcamera.org/comment/12927/","msgid":"<20201002020741.GV3722@pendragon.ideasonboard.com>","date":"2020-10-02T02:07:41","subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-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 Niklas,\n\nThank you for the patch.\n\nOn Tue, Sep 29, 2020 at 04:46:47PM +0200, Niklas Söderlund wrote:\n> Instead of only printing the camera ID which is not intended for humans\n> to read and parse create a more user friendly string when printing\n\ns/user friendly/user-friendly/\n\n> camera names. The ID is still printed as it is one option used to select\n> camera using the --camera option.\n> \n> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Umang Jain <email@uajain.com>\n> ---\n> * Changes since v5\n> - Rework camera name.\n> \n> * Changes since v4\n> - Make cameraName() member of CamApp.\n> \n> * Changes since v1\n> - Only print user-friendly names when listing cameras.\n> - Update format of user-friendly names printed.\n> - Update commit message.\n> ---\n>  src/cam/main.cpp | 28 +++++++++++++++++++++++++++-\n>  1 file changed, 27 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> index 244720b491f5c462..311df171a21f6152 100644\n> --- a/src/cam/main.cpp\n> +++ b/src/cam/main.cpp\n> @@ -45,6 +45,8 @@ private:\n>  \tint infoConfiguration();\n>  \tint run();\n>  \n> +\tstd::string cameraName(const Camera *camera);\n\nYou can make this static.\n\nApart from those two small issues, let's step the bikeshedding and work\non top.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> +\n>  \tstatic CamApp *app_;\n>  \tOptionsParser::Options options_;\n>  \tCameraManager *cm_;\n> @@ -340,7 +342,7 @@ int CamApp::run()\n>  \n>  \t\tunsigned int index = 1;\n>  \t\tfor (const std::shared_ptr<Camera> &cam : cm_->cameras()) {\n> -\t\t\tstd::cout << index << \": \" << cam->id() << std::endl;\n> +\t\t\tstd::cout << index << \": \" << cameraName(cam.get()) << std::endl;\n>  \t\t\tindex++;\n>  \t\t}\n>  \t}\n> @@ -378,6 +380,30 @@ int CamApp::run()\n>  \treturn 0;\n>  }\n>  \n> +std::string CamApp::cameraName(const Camera *camera)\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> +\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> +\t\tbreak;\n> +\t}\n> +\n> +\tname += \" (\" + camera->id() + \")\";\n> +\n> +\treturn name;\n> +}\n> +\n>  void signalHandler([[maybe_unused]] int signal)\n>  {\n>  \tstd::cout << \"Exiting\" << std::endl;","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 5006CC3B5C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  2 Oct 2020 02:08:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D2FA1625AF;\n\tFri,  2 Oct 2020 04:08:19 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2826060BCD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  2 Oct 2020 04:08:19 +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 958E1528;\n\tFri,  2 Oct 2020 04:08:18 +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=\"JDYiABOK\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1601604498;\n\tbh=ngq/rEyksrqc2fPTxLuyWzORGoa5jnHgBTag89b2D+o=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=JDYiABOKdLksdnAiu9/r/Joai28SK9EcAekA/M5G8Ku4IkdLyAAYfzl0GBMV06B7y\n\tbT9mvvNdMFJnc3WYCLHMlQCT4hKp/81d2BtrQLvGaO09+TRgOnUGzA1P9kjH+yrXtg\n\t32JNYDpF6p9ZeTY3W29eOxFApZnS2DMPQ1olIlKQ=","Date":"Fri, 2 Oct 2020 05:07:41 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<20201002020741.GV3722@pendragon.ideasonboard.com>","References":"<20200929144648.429397-1-niklas.soderlund@ragnatech.se>\n\t<20200929144648.429397-7-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200929144648.429397-7-niklas.soderlund@ragnatech.se>","Subject":"Re: [libcamera-devel] [PATCH v6 6/7] cam: Print user-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@lists.libcamera.org","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]