[{"id":11996,"web_url":"https://patchwork.libcamera.org/comment/11996/","msgid":"<bb4432bc-e7e5-c9fb-7ea8-8e0ca95ea3fa@ideasonboard.com>","date":"2020-08-13T15:49:26","subject":"Re: [libcamera-devel] [PATCH v3 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 Niklas,\n\nOn 13/08/2020 10:57, 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> ---\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 | 33 ++++++++++++++++++++++++++++++++-\n>  1 file changed, 32 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> index cc3facd5a5b22092..57f8c79b21090ece 100644\n> --- a/src/cam/main.cpp\n> +++ b/src/cam/main.cpp\n> @@ -21,6 +21,37 @@\n>  \n>  using namespace libcamera;\n>  \n> +std::string cameraName(const Camera *camera)\n> +{\n> +\tconst ControlList &props = camera->properties();\n> +\tstd::string name;\n> +\n> +\t/* Use camera model as fallback name if available. */\n> +\tif (props.contains(properties::Model))\n> +\t\tname = props.get(properties::Model);\n> +\telse\n> +\t\tname = \"Unknown camera\";\n> +\n> +\t/* If camera location is available use it as highest priority name. */\n> +\tif (props.contains(properties::Location)) {\n> +\t\tswitch (props.get(properties::Location)) {\n> +\t\tcase properties::CameraLocationFront:\n> +\t\t\tname = \"Internal front camera\";\n> +\t\t\tbreak;\n> +\t\tcase properties::CameraLocationBack:\n> +\t\t\tname = \"Internal back camera\";\n> +\t\t\tbreak;\n> +\t\tcase properties::CameraLocationExternal:\n> +\t\t\tname = \"External camera\";\n> +\t\t\tbreak;\n> +\t\t}\n> +\t}\n\n\nErr, aren't we going to make UVC cameras all marked as\nCameraLocationExternal?\n\nI'm not sure I'd use this as the 'highest' priority, more as the lowest\npriority if the model property wasn't known but the location was...\n\nThough I don't think we'll ever not have a model would we ?\n\n\n\n\n> +\n> +\tname += \" (\" + camera->id() + \")\";\n> +\n> +\treturn name;\n> +}\n> +\n>  class CamApp\n>  {\n>  public:\n> @@ -340,7 +371,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>","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 7F41BBD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 13 Aug 2020 15:49:31 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EF8BA613A9;\n\tThu, 13 Aug 2020 17:49:30 +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 544666038C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 13 Aug 2020 17:49:29 +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 B0BA480C;\n\tThu, 13 Aug 2020 17:49:28 +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=\"dIEhnXJd\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1597333768;\n\tbh=2d7OqQd5cC6uCPaXWBKl58pVfbcnoVltbjEXkYD1K4E=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=dIEhnXJdrCyvdrNhnY2rgT9G3PeNfNxqal35Ez9knQcfcEu2WDTU+/guSBjpmsCGF\n\tn4wmsngiI4V1sZ4cAH2V0uRC/vnSbMPIfC1IpnPfwtrTfiPsb8SFxjsIuev4MtQ8c3\n\t7G4hIfmbUTbOJRXm2AzVdhTtwubgGclatr/j8vqo=","To":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20200813095726.3497193-1-niklas.soderlund@ragnatech.se>\n\t<20200813095726.3497193-7-niklas.soderlund@ragnatech.se>","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":"<bb4432bc-e7e5-c9fb-7ea8-8e0ca95ea3fa@ideasonboard.com>","Date":"Thu, 13 Aug 2020 16:49:26 +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":"<20200813095726.3497193-7-niklas.soderlund@ragnatech.se>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v3 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":11998,"web_url":"https://patchwork.libcamera.org/comment/11998/","msgid":"<20200813155950.GA1880691@oden.dyn.berto.se>","date":"2020-08-13T15:59:50","subject":"Re: [libcamera-devel] [PATCH v3 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 Kieran,\n\nThanks for your feedback.\n\nOn 2020-08-13 16:49:26 +0100, Kieran Bingham wrote:\n> Hi Niklas,\n> \n> On 13/08/2020 10:57, 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> > ---\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 | 33 ++++++++++++++++++++++++++++++++-\n> >  1 file changed, 32 insertions(+), 1 deletion(-)\n> > \n> > diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> > index cc3facd5a5b22092..57f8c79b21090ece 100644\n> > --- a/src/cam/main.cpp\n> > +++ b/src/cam/main.cpp\n> > @@ -21,6 +21,37 @@\n> >  \n> >  using namespace libcamera;\n> >  \n> > +std::string cameraName(const Camera *camera)\n> > +{\n> > +\tconst ControlList &props = camera->properties();\n> > +\tstd::string name;\n> > +\n> > +\t/* Use camera model as fallback name if available. */\n> > +\tif (props.contains(properties::Model))\n> > +\t\tname = props.get(properties::Model);\n> > +\telse\n> > +\t\tname = \"Unknown camera\";\n> > +\n> > +\t/* If camera location is available use it as highest priority name. */\n> > +\tif (props.contains(properties::Location)) {\n> > +\t\tswitch (props.get(properties::Location)) {\n> > +\t\tcase properties::CameraLocationFront:\n> > +\t\t\tname = \"Internal front camera\";\n> > +\t\t\tbreak;\n> > +\t\tcase properties::CameraLocationBack:\n> > +\t\t\tname = \"Internal back camera\";\n> > +\t\t\tbreak;\n> > +\t\tcase properties::CameraLocationExternal:\n> > +\t\t\tname = \"External camera\";\n> > +\t\t\tbreak;\n> > +\t\t}\n> > +\t}\n> \n> \n> Err, aren't we going to make UVC cameras all marked as\n> CameraLocationExternal?\n> \n> I'm not sure I'd use this as the 'highest' priority, more as the lowest\n> priority if the model property wasn't known but the location was...\n\nLaurent made a good case for having location front and back as highest \npriority as it makes most sens for users, and I would like to keep this.  \nModel really is only useful for us in this case.\n\nI agree with the proposed change to mark all UVC cameras as external vs \nnot giving them a location maybe properties::Model should be used \ninstead of \"External camera\"?\n\nAs I commented on the series which changes this for the UVC pipeline I'm \nnot sure location is the best property to introduce to UVC as what that \nseries really want is to know if the camera is hot-pluggable nor not.  \nHow about we keep this as it is for now and adopt it once we know how \nthe other series turns out? I feel chancing this patch now for something \nwe don't know might be busy work.\n\n> \n> Though I don't think we'll ever not have a model would we ?\n\nWe will always have a model, but it's not enforced (yet).\n\n> \n> \n> \n> \n> > +\n> > +\tname += \" (\" + camera->id() + \")\";\n> > +\n> > +\treturn name;\n> > +}\n> > +\n> >  class CamApp\n> >  {\n> >  public:\n> > @@ -340,7 +371,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> > \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 5E36BBD87D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 13 Aug 2020 15:59:55 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D900C613C0;\n\tThu, 13 Aug 2020 17:59:54 +0200 (CEST)","from mail-lf1-x134.google.com (mail-lf1-x134.google.com\n\t[IPv6:2a00:1450:4864:20::134])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B3CD46038C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 13 Aug 2020 17:59:52 +0200 (CEST)","by mail-lf1-x134.google.com with SMTP id c15so3316575lfi.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 13 Aug 2020 08:59:52 -0700 (PDT)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tb1sm1179651ljp.78.2020.08.13.08.59.50\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 13 Aug 2020 08:59:50 -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=\"iB5UXYMq\"; 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=/ojr3Gw1UbP5Mwni/ew4EvddO+NkOPrKF0lj+vC8jHU=;\n\tb=iB5UXYMq5vlQ0wCam1DEM8fizA38o/T0Wc6BSvIXkcExPajdPhZVLx2ZeAiLJCzBmL\n\tZnWCr6GOUNF5fBzpxWArVLC29n2ja5TlUtMGlFTyQIeuP5FbdSZlLpUYu9k1yorCz3iD\n\t/dZOkIZTgH9XbPVNPx2+MH5x1HwXxE64N//0A0xL2vX9YSDfW2SLM01Z6NuYbWHCxiv4\n\tR/yfaRDpU1iAGgcXdva9vtiEH6F8Zf1WYLsDe3mk4krCU2zj0RR+WQnqTNU8ygi2Osn7\n\tPr2eyeQlExHJx+OoBRjb1Jlf5yMFZVQpOEs/TH+M4TzjEIyUXSucprZ+xc0ZAqXIrElj\n\tdscA==","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=/ojr3Gw1UbP5Mwni/ew4EvddO+NkOPrKF0lj+vC8jHU=;\n\tb=jC4+AyBQqfloO9TUVdSxsdd3iaysts3O7P1ogKbVh0wV5Sn9BBH+Dee6k8tg5JACV5\n\tzOYd5kwyONKencLHnfc6sNiCza+Ps1RJdy7Rd0cmMBYxZTAUC8zhkfpQw0E3WKmHWl2U\n\t8M/6p2BgwP2CNHHKeg3mvgaIhVGfnKEMih+uqK/AV5k39LBU0Es0rb8vZOcz1R6qrdYu\n\tqVVzjDDGMA7egqgphm/SbG9phTYBmTg4EWMx85K71JtbNALpBu5H9rOL72Ht6iGZmY3u\n\turiAh2/xKJVcgAPN7Cv208eHJ4pCwXBAKYcYrIkC8lx+v/0wxewsnoXn+adZB5NkzTNk\n\tgu7Q==","X-Gm-Message-State":"AOAM530wO8hyh6Zv/xV0m5BaZJtKa3o+UaXdseEnQqP7NXdg/z9EXsXA\n\tqYS5kXfHy1Virp8oET1/LAKBHQ==","X-Google-Smtp-Source":"ABdhPJwbCarBsnuQE2bdlfk/gYpZ2SjMJEHXA7nI+GO2zciy8P53lX+zwGp0EQJc0yLpYrUB0zkLQA==","X-Received":"by 2002:a19:8314:: with SMTP id\n\tf20mr2598254lfd.199.1597334391856; \n\tThu, 13 Aug 2020 08:59:51 -0700 (PDT)","Date":"Thu, 13 Aug 2020 17:59:50 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200813155950.GA1880691@oden.dyn.berto.se>","References":"<20200813095726.3497193-1-niklas.soderlund@ragnatech.se>\n\t<20200813095726.3497193-7-niklas.soderlund@ragnatech.se>\n\t<bb4432bc-e7e5-c9fb-7ea8-8e0ca95ea3fa@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<bb4432bc-e7e5-c9fb-7ea8-8e0ca95ea3fa@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v3 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":11999,"web_url":"https://patchwork.libcamera.org/comment/11999/","msgid":"<0c24faa3-8d84-ca67-bc67-adeea0992caa@ideasonboard.com>","date":"2020-08-13T18:55:58","subject":"Re: [libcamera-devel] [PATCH v3 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 Niklas,\n\nOn 13/08/2020 16:59, Niklas Söderlund wrote:\n> Hi Kieran,\n> \n> Thanks for your feedback.\n> \n> On 2020-08-13 16:49:26 +0100, Kieran Bingham wrote:\n>> Hi Niklas,\n>>\n>> On 13/08/2020 10:57, 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>>> ---\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 | 33 ++++++++++++++++++++++++++++++++-\n>>>  1 file changed, 32 insertions(+), 1 deletion(-)\n>>>\n>>> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n>>> index cc3facd5a5b22092..57f8c79b21090ece 100644\n>>> --- a/src/cam/main.cpp\n>>> +++ b/src/cam/main.cpp\n>>> @@ -21,6 +21,37 @@\n>>>  \n>>>  using namespace libcamera;\n>>>  \n>>> +std::string cameraName(const Camera *camera)\n>>> +{\n>>> +\tconst ControlList &props = camera->properties();\n>>> +\tstd::string name;\n>>> +\n>>> +\t/* Use camera model as fallback name if available. */\n>>> +\tif (props.contains(properties::Model))\n>>> +\t\tname = props.get(properties::Model);\n>>> +\telse\n>>> +\t\tname = \"Unknown camera\";\n>>> +\n>>> +\t/* If camera location is available use it as highest priority name. */\n>>> +\tif (props.contains(properties::Location)) {\n>>> +\t\tswitch (props.get(properties::Location)) {\n>>> +\t\tcase properties::CameraLocationFront:\n>>> +\t\t\tname = \"Internal front camera\";\n>>> +\t\t\tbreak;\n>>> +\t\tcase properties::CameraLocationBack:\n>>> +\t\t\tname = \"Internal back camera\";\n>>> +\t\t\tbreak;\n>>> +\t\tcase properties::CameraLocationExternal:\n>>> +\t\t\tname = \"External camera\";\n>>> +\t\t\tbreak;\n>>> +\t\t}\n>>> +\t}\n>>\n>>\n>> Err, aren't we going to make UVC cameras all marked as\n>> CameraLocationExternal?\n>>\n>> I'm not sure I'd use this as the 'highest' priority, more as the lowest\n>> priority if the model property wasn't known but the location was...\n> \n> Laurent made a good case for having location front and back as highest \n> priority as it makes most sens for users, and I would like to keep this.  \n> Model really is only useful for us in this case.\n> \n> I agree with the proposed change to mark all UVC cameras as external vs \n> not giving them a location maybe properties::Model should be used \n> instead of \"External camera\"?\n> \n> As I commented on the series which changes this for the UVC pipeline I'm \n> not sure location is the best property to introduce to UVC as what that \n> series really want is to know if the camera is hot-pluggable nor not.  \n> How about we keep this as it is for now and adopt it once we know how \n> the other series turns out? I feel chancing this patch now for something \n> we don't know might be busy work.\n\nOk, that's fine with me, with these current patches I get:\n\n> Available cameras:\n> 1: VF0520 Live! Cam Sync: VF0520 L (\\_SB_.PCI0.XHC_.RHUB.HS01-1:1.0-041e:406c)\n> 2: HP Wide Vision FHD Camera: HP W (\\_SB_.PCI0.XHC_.RHUB.HS05-5:1.0-0408:5251)\n> 3: HP Wide Vision FHD Camera: HP I (\\_SB_.PCI0.XHC_.RHUB.HS05-5:1.2-0408:5251)\n\n\nWhich looks good to me, I see the name I expect, and a unique\nidentifier. In particular this helps me identify which is the IR camera\nand which is the normal.\n\nIf this were to change to external it would become quite awkard though:\n\n> Available cameras:\n> 1: External camera (\\_SB_.PCI0.XHC_.RHUB.HS01-1:1.0-041e:406c)\n> 2: External camera (\\_SB_.PCI0.XHC_.RHUB.HS05-5:1.0-0408:5251)\n> 3: External camera (\\_SB_.PCI0.XHC_.RHUB.HS05-5:1.2-0408:5251)\n\nAt that point, I'm not sure \"External camera\" shows any benefit at all ;-)\n\n(and indeed, camera 2 and 3 are 'internal' on this laptop ....)\n\nAnyway, with these patches the output looks good to me, so I agree we'll\ndeal with the hotplug issues separately.\n\nGiven how easy it is to add properties, I can foresee a 'hotpluggable'\nproperty being a good way to resolve that, rather than using the\ninaccurate location.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n\n>> Though I don't think we'll ever not have a model would we ?\n> \n> We will always have a model, but it's not enforced (yet).\n\nOk, that sounds fine for now.\n\n\n> \n>>\n>>\n>>\n>>\n>>> +\n>>> +\tname += \" (\" + camera->id() + \")\";\n>>> +\n>>> +\treturn name;\n>>> +}\n>>> +\n>>>  class CamApp\n>>>  {\n>>>  public:\n>>> @@ -340,7 +371,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>>>\n>>\n>> -- \n>> Regards\n>> --\n>> Kieran\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 814CABD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 13 Aug 2020 18:56:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E9C99613D6;\n\tThu, 13 Aug 2020 20:56:03 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2BEC16055A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 13 Aug 2020 20:56:02 +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 91E9DB8F;\n\tThu, 13 Aug 2020 20:56:01 +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=\"GIZQbpfE\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1597344961;\n\tbh=8kWzw4w/zUiG1zli9Uhp9F4xZhTNii9E3sTva7LWmNo=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=GIZQbpfEqaRPE+yRpIC/H1WedCv+PCxI/MWUK5xuYFb/e/NDh9oRx70iV9JRBt9t7\n\tQcUxQ94eQNb+C0uHko/7Qd80YpXkJtpi4c8MH7HVLWCFDCRZrVjNi0xw6XHtvEaNSB\n\tDrxE0Kb8+T3BmdmgUGE6yhszX5fsmB6h+Sz/0+eM=","To":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","References":"<20200813095726.3497193-1-niklas.soderlund@ragnatech.se>\n\t<20200813095726.3497193-7-niklas.soderlund@ragnatech.se>\n\t<bb4432bc-e7e5-c9fb-7ea8-8e0ca95ea3fa@ideasonboard.com>\n\t<20200813155950.GA1880691@oden.dyn.berto.se>","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":"<0c24faa3-8d84-ca67-bc67-adeea0992caa@ideasonboard.com>","Date":"Thu, 13 Aug 2020 19:55:58 +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":"<20200813155950.GA1880691@oden.dyn.berto.se>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v3 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","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>"}}]