[{"id":14745,"web_url":"https://patchwork.libcamera.org/comment/14745/","msgid":"<20210125103715.woqmhvpbk6mlcmok@uno.localdomain>","date":"2021-01-25T10:37:15","subject":"Re: [libcamera-devel] [PATCH v4 4/8] android: camera_device: Load\n\tmake and model from platform settings","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Paul,\n\nOn Mon, Jan 25, 2021 at 04:14:40PM +0900, Paul Elder wrote:\n> In ChromeOS the camera make and model is saved in\n> /var/cache/camera/camera.prop. Load and save these values at\n> construction time, if available.\n>\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> ---\n> Changes in v3:\n> - rename cameraMake_ and cameraModel_ to maker_ and model_\n>\n> Changes in v2:\n> - use fstream instead of File and split\n> ---\n>  src/android/camera_device.cpp | 23 +++++++++++++++++++++++\n>  src/android/camera_device.h   |  5 +++++\n>  2 files changed, 28 insertions(+)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 3983c6dc..592e2d43 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -9,6 +9,7 @@\n>  #include \"camera_ops.h\"\n>  #include \"post_processor.h\"\n>\n> +#include <fstream>\n>  #include <sys/mman.h>\n>  #include <tuple>\n>  #include <vector>\n> @@ -351,6 +352,28 @@ CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camer\n>  \t *  streamConfiguration.\n>  \t */\n>  \tmaxJpegBufferSize_ = 13 << 20; /* 13631488 from USB HAL */\n> +\n> +\tmaker_ = \"libcamera\";\n> +\tmodel_ = \"cameraModel\";\n> +\n> +\t/* \\todo Support getting properties on Android */\n> +\tstd::ifstream fstream(\"/var/cache/camera/camera.prop\");\n> +\tif (!fstream.is_open())\n> +\t\treturn;\n> +\n> +\tstd::string line;\n> +\twhile (std::getline(fstream, line)) {\n> +\t\tstd::string::size_type delimPos = line.find(\"=\");\n> +\t\tif (delimPos == std::string::npos)\n> +\t\t\tcontinue;\n> +\t\tstd::string key = line.substr(0, delimPos);\n> +\t\tstd::string val = line.substr(delimPos + 1);\n> +\n> +\t\tif (!key.compare(\"ro.product.model\"))\n> +\t\t\tmodel_ = val;\n> +\t\telse if (!key.compare(\"ro.product.manufacturer\"))\n> +\t\t\tmaker_ = val;\n> +\t}\n>  }\n>\n>  CameraDevice::~CameraDevice()\n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index 597d11fc..058a3f9a 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -55,6 +55,8 @@ public:\n>  \t\treturn config_.get();\n>  \t}\n>\n> +\tconst std::string &cameraMake() const { return maker_; }\n\ncameraMaker() ?\n\nOptionally, I would rather\n- Use maker() and model() to retrieve the maker_ and model_ fields\n  respectively\n- s/maker/manufacturer as that's the name of the key\n\nWith cameraMaker() fixed and the above optional suggestions considered\nor not:\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> +\tconst std::string &cameraModel() const { return model_; }\n>  \tint facing() const { return facing_; }\n>  \tint orientation() const { return orientation_; }\n>  \tunsigned int maxJpegBufferSize() const { return maxJpegBufferSize_; }\n> @@ -125,6 +127,9 @@ private:\n>  \tstd::map<int, libcamera::PixelFormat> formatsMap_;\n>  \tstd::vector<CameraStream> streams_;\n>\n> +\tstd::string maker_;\n> +\tstd::string model_;\n> +\n>  \tint facing_;\n>  \tint orientation_;\n>\n> --\n> 2.27.0\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 BDF9EBD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 25 Jan 2021 10:36:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 44181682B5;\n\tMon, 25 Jan 2021 11:36:57 +0100 (CET)","from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net\n\t[217.70.183.193])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 067AB6030B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 25 Jan 2021 11:36:56 +0100 (CET)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 6CD21240007;\n\tMon, 25 Jan 2021 10:36:55 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Mon, 25 Jan 2021 11:37:15 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20210125103715.woqmhvpbk6mlcmok@uno.localdomain>","References":"<20210125071444.26252-1-paul.elder@ideasonboard.com>\n\t<20210125071444.26252-5-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210125071444.26252-5-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 4/8] android: camera_device: Load\n\tmake and model from platform settings","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=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":14746,"web_url":"https://patchwork.libcamera.org/comment/14746/","msgid":"<YA6hOxPIGbwE6e2B@pendragon.ideasonboard.com>","date":"2021-01-25T10:45:15","subject":"Re: [libcamera-devel] [PATCH v4 4/8] android: camera_device: Load\n\tmake and model from platform settings","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Mon, Jan 25, 2021 at 11:37:15AM +0100, Jacopo Mondi wrote:\n> On Mon, Jan 25, 2021 at 04:14:40PM +0900, Paul Elder wrote:\n> > In ChromeOS the camera make and model is saved in\n> > /var/cache/camera/camera.prop. Load and save these values at\n> > construction time, if available.\n> >\n> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> >\n> > ---\n> > Changes in v3:\n> > - rename cameraMake_ and cameraModel_ to maker_ and model_\n> >\n> > Changes in v2:\n> > - use fstream instead of File and split\n> > ---\n> >  src/android/camera_device.cpp | 23 +++++++++++++++++++++++\n> >  src/android/camera_device.h   |  5 +++++\n> >  2 files changed, 28 insertions(+)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index 3983c6dc..592e2d43 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -9,6 +9,7 @@\n> >  #include \"camera_ops.h\"\n> >  #include \"post_processor.h\"\n> >\n> > +#include <fstream>\n> >  #include <sys/mman.h>\n> >  #include <tuple>\n> >  #include <vector>\n> > @@ -351,6 +352,28 @@ CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camer\n> >  \t *  streamConfiguration.\n> >  \t */\n> >  \tmaxJpegBufferSize_ = 13 << 20; /* 13631488 from USB HAL */\n> > +\n> > +\tmaker_ = \"libcamera\";\n> > +\tmodel_ = \"cameraModel\";\n> > +\n> > +\t/* \\todo Support getting properties on Android */\n> > +\tstd::ifstream fstream(\"/var/cache/camera/camera.prop\");\n> > +\tif (!fstream.is_open())\n> > +\t\treturn;\n> > +\n> > +\tstd::string line;\n> > +\twhile (std::getline(fstream, line)) {\n> > +\t\tstd::string::size_type delimPos = line.find(\"=\");\n> > +\t\tif (delimPos == std::string::npos)\n> > +\t\t\tcontinue;\n> > +\t\tstd::string key = line.substr(0, delimPos);\n> > +\t\tstd::string val = line.substr(delimPos + 1);\n> > +\n> > +\t\tif (!key.compare(\"ro.product.model\"))\n> > +\t\t\tmodel_ = val;\n> > +\t\telse if (!key.compare(\"ro.product.manufacturer\"))\n> > +\t\t\tmaker_ = val;\n> > +\t}\n> >  }\n> >\n> >  CameraDevice::~CameraDevice()\n> > diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> > index 597d11fc..058a3f9a 100644\n> > --- a/src/android/camera_device.h\n> > +++ b/src/android/camera_device.h\n> > @@ -55,6 +55,8 @@ public:\n> >  \t\treturn config_.get();\n> >  \t}\n> >\n> > +\tconst std::string &cameraMake() const { return maker_; }\n> \n> cameraMaker() ?\n> \n> Optionally, I would rather\n> - Use maker() and model() to retrieve the maker_ and model_ fields\n>   respectively\n\nI'd do that too.\n\n> - s/maker/manufacturer as that's the name of the key\n\nWorks for me as well.\n\n> With cameraMaker() fixed and the above optional suggestions considered\n> or not:\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> \n> > +\tconst std::string &cameraModel() const { return model_; }\n> >  \tint facing() const { return facing_; }\n> >  \tint orientation() const { return orientation_; }\n> >  \tunsigned int maxJpegBufferSize() const { return maxJpegBufferSize_; }\n> > @@ -125,6 +127,9 @@ private:\n> >  \tstd::map<int, libcamera::PixelFormat> formatsMap_;\n> >  \tstd::vector<CameraStream> streams_;\n> >\n> > +\tstd::string maker_;\n> > +\tstd::string model_;\n> > +\n> >  \tint facing_;\n> >  \tint orientation_;\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 91263C0F2B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 25 Jan 2021 10:45:37 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 221BA682B6;\n\tMon, 25 Jan 2021 11:45:37 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2DD1C6030B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 25 Jan 2021 11:45:35 +0100 (CET)","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 82EEF3E;\n\tMon, 25 Jan 2021 11:45:34 +0100 (CET)"],"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=\"aN1v2qwP\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1611571534;\n\tbh=VTePniCKYrRGmnqQEglmtk1QXyQMWciOsAORUG63E0M=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=aN1v2qwP+LR8fOofXx0mjQj7YBnvylK6HOcBK0jbN57yDAc9p93XxLJryPcUGlJyR\n\t47EqZaFtT7OEFOnaoT9tjSDkNhDU0n8dEQV6ZF5/NfcGuJJxTIcNw7V985o14pkS1c\n\tAcZAUoSSzi6CBDspMhYQyXANah1QV+b7v6jl+8pc=","Date":"Mon, 25 Jan 2021 12:45:15 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YA6hOxPIGbwE6e2B@pendragon.ideasonboard.com>","References":"<20210125071444.26252-1-paul.elder@ideasonboard.com>\n\t<20210125071444.26252-5-paul.elder@ideasonboard.com>\n\t<20210125103715.woqmhvpbk6mlcmok@uno.localdomain>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210125103715.woqmhvpbk6mlcmok@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH v4 4/8] android: camera_device: Load\n\tmake and model from platform settings","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=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]