[{"id":14002,"web_url":"https://patchwork.libcamera.org/comment/14002/","msgid":"<20201201150630.GJ4569@pendragon.ideasonboard.com>","date":"2020-12-01T15:06:30","subject":"Re: [libcamera-devel] [PATCH] android: camera_mode: Resize 'data'\n\tvectors","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nThank you for the patch.\n\nOn Tue, Dec 01, 2020 at 04:00:56PM +0100, Jacopo Mondi wrote:\n> The CameraDevice::getStaticMetadata() function populates the\n> entries for Android's static metadata by walking the ControlInfo\n> supported values reported by the libcamera pipeline.\n> \n> For each entry a vector of the size of the maximum number of possible\n> entries is reserved, populated and then stored in the Android's metadata\n> pack.\n> \n> The number of actual entries to be passed to Android is computed using\n> the vector's size which, for this reason, shall be resized to the actual\n> number of entries it stores.\n> \n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n> This patch fixes cros_camera_test:\n> Camera3DeviceTest/Camera3DeviceDefaultSettings.ConstructDefaultSettings/1\n> ---\n>  src/android/camera_device.cpp | 6 ++++++\n>  1 file changed, 6 insertions(+)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index d43db3600b20..d559f0fc4b81 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -602,8 +602,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \t\tif (infoMap != controlsInfo.end()) {\n>  \t\t\tfor (const auto &value : infoMap->second.values())\n>  \t\t\t\tdata.push_back(value.get<int32_t>());\n> +\t\t\tdata.resize(infoMap->second.values().size());\n>  \t\t} else {\n>  \t\t\tdata.push_back(ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF);\n> +\t\t\tdata.resize(1);\n>  \t\t}\n\nWouldn't it be better to avoid creating the vector with a too large size\nthen ? Maybe something along the lines of the following ?\n\ndiff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex 4690346e05cb..a4d4914c2f80 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -596,7 +596,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n\n \t/* Color correction static metadata. */\n \t{\n-\t\tstd::vector<uint8_t> data(3);\n+\t\tstd::vector<uint8_t> data;\n+\t\tdata.reserve(3);\n \t\tconst auto &infoMap = controlsInfo.find(&controls::draft::ColorCorrectionAberrationMode);\n \t\tif (infoMap != controlsInfo.end()) {\n \t\t\tfor (const auto &value : infoMap->second.values())\n\n\n>  \t\tstaticMetadata_->addEntry(ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,\n>  \t\t\t\t\t  data.data(), data.size());\n> @@ -803,8 +805,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \t\tif (infoMap != controlsInfo.end()) {\n>  \t\t\tfor (const auto &value : infoMap->second.values())\n>  \t\t\t\tdata.push_back(value.get<int32_t>());\n> +\t\t\tdata.resize(infoMap->second.values().size());\n>  \t\t} else {\n>  \t\t\tdata.push_back(ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF);\n> +\t\t\tdata.resize(1);\n>  \t\t}\n>  \t\tstaticMetadata_->addEntry(ANDROID_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES,\n>  \t\t\t\t\t  data.data(), data.size());\n> @@ -871,8 +875,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \t\tif (infoMap != controlsInfo.end()) {\n>  \t\t\tfor (const auto &value : infoMap->second.values())\n>  \t\t\t\tdata.push_back(value.get<int32_t>());\n> +\t\t\tdata.resize(infoMap->second.values().size());\n>  \t\t} else {\n>  \t\t\tdata.push_back(ANDROID_NOISE_REDUCTION_MODE_OFF);\n> +\t\t\tdata.resize(1);\n>  \t\t}\n>  \t\tstaticMetadata_->addEntry(ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,\n>  \t\t\t\t\t  data.data(), data.size());","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 46419BE176\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  1 Dec 2020 15:06:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D9F0663457;\n\tTue,  1 Dec 2020 16:06:40 +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 8458A6032D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  1 Dec 2020 16:06:39 +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 CBB34A1C;\n\tTue,  1 Dec 2020 16:06:38 +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=\"BX/hhnBo\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1606835199;\n\tbh=eINY/0+RcIgCwoz7N8EErsqoesNuT+V8FYPb7iAyvhQ=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=BX/hhnBo4/ERHlI/wUmSIN9qfM9t40Dr2wRXrpQ9FaJ2Enr+3Ckj4lxfPsJ9CGon+\n\tncr2hBhPfgP6TLzMwO1dpgf5EBK6wLl/s20ZKSpWDrzuKsOQsF8mDVAJOb+u/7NwUH\n\tinABVX4SM6QbCRuZ8KQfCuK5qdrbdL11Gf3nReKU=","Date":"Tue, 1 Dec 2020 17:06:30 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<20201201150630.GJ4569@pendragon.ideasonboard.com>","References":"<20201201150056.52378-1-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201201150056.52378-1-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH] android: camera_mode: Resize 'data'\n\tvectors","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":"hanlinchen@chromium.org, 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":14003,"web_url":"https://patchwork.libcamera.org/comment/14003/","msgid":"<20201201151610.agxtvfgdhjdocuyp@uno.localdomain>","date":"2020-12-01T15:16:10","subject":"Re: [libcamera-devel] [PATCH] android: camera_mode: Resize 'data'\n\tvectors","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Tue, Dec 01, 2020 at 05:06:30PM +0200, Laurent Pinchart wrote:\n> Hi Jacopo,\n>\n> Thank you for the patch.\n>\n> On Tue, Dec 01, 2020 at 04:00:56PM +0100, Jacopo Mondi wrote:\n> > The CameraDevice::getStaticMetadata() function populates the\n> > entries for Android's static metadata by walking the ControlInfo\n> > supported values reported by the libcamera pipeline.\n> >\n> > For each entry a vector of the size of the maximum number of possible\n> > entries is reserved, populated and then stored in the Android's metadata\n> > pack.\n> >\n> > The number of actual entries to be passed to Android is computed using\n> > the vector's size which, for this reason, shall be resized to the actual\n> > number of entries it stores.\n> >\n> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> > This patch fixes cros_camera_test:\n> > Camera3DeviceTest/Camera3DeviceDefaultSettings.ConstructDefaultSettings/1\n> > ---\n> >  src/android/camera_device.cpp | 6 ++++++\n> >  1 file changed, 6 insertions(+)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index d43db3600b20..d559f0fc4b81 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -602,8 +602,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> >  \t\tif (infoMap != controlsInfo.end()) {\n> >  \t\t\tfor (const auto &value : infoMap->second.values())\n> >  \t\t\t\tdata.push_back(value.get<int32_t>());\n> > +\t\t\tdata.resize(infoMap->second.values().size());\n> >  \t\t} else {\n> >  \t\t\tdata.push_back(ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF);\n> > +\t\t\tdata.resize(1);\n> >  \t\t}\n>\n> Wouldn't it be better to avoid creating the vector with a too large size\n> then ? Maybe something along the lines of the following ?\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 4690346e05cb..a4d4914c2f80 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -596,7 +596,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>\n>  \t/* Color correction static metadata. */\n>  \t{\n> -\t\tstd::vector<uint8_t> data(3);\n> +\t\tstd::vector<uint8_t> data;\n> +\t\tdata.reserve(3);\n\nOh, std::vector::reserve doesn't change the size of the vector.\n\nThat's better than resizing (even if the number of possible relocation\nis still 0 if I'm not mistaken)\n\n>  \t\tconst auto &infoMap = controlsInfo.find(&controls::draft::ColorCorrectionAberrationMode);\n>  \t\tif (infoMap != controlsInfo.end()) {\n>  \t\t\tfor (const auto &value : infoMap->second.values())\n>\n>\n> >  \t\tstaticMetadata_->addEntry(ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,\n> >  \t\t\t\t\t  data.data(), data.size());\n> > @@ -803,8 +805,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> >  \t\tif (infoMap != controlsInfo.end()) {\n> >  \t\t\tfor (const auto &value : infoMap->second.values())\n> >  \t\t\t\tdata.push_back(value.get<int32_t>());\n> > +\t\t\tdata.resize(infoMap->second.values().size());\n> >  \t\t} else {\n> >  \t\t\tdata.push_back(ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF);\n> > +\t\t\tdata.resize(1);\n> >  \t\t}\n> >  \t\tstaticMetadata_->addEntry(ANDROID_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES,\n> >  \t\t\t\t\t  data.data(), data.size());\n> > @@ -871,8 +875,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> >  \t\tif (infoMap != controlsInfo.end()) {\n> >  \t\t\tfor (const auto &value : infoMap->second.values())\n> >  \t\t\t\tdata.push_back(value.get<int32_t>());\n> > +\t\t\tdata.resize(infoMap->second.values().size());\n> >  \t\t} else {\n> >  \t\t\tdata.push_back(ANDROID_NOISE_REDUCTION_MODE_OFF);\n> > +\t\t\tdata.resize(1);\n> >  \t\t}\n> >  \t\tstaticMetadata_->addEntry(ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,\n> >  \t\t\t\t\t  data.data(), data.size());\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","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 4A20BBE177\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  1 Dec 2020 15:16:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D42BA63457;\n\tTue,  1 Dec 2020 16:16:06 +0100 (CET)","from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[217.70.183.201])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BE3CE6032D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  1 Dec 2020 16:16:04 +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 relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 716AA1BF206;\n\tTue,  1 Dec 2020 15:16:03 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Tue, 1 Dec 2020 16:16:10 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20201201151610.agxtvfgdhjdocuyp@uno.localdomain>","References":"<20201201150056.52378-1-jacopo@jmondi.org>\n\t<20201201150630.GJ4569@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201201150630.GJ4569@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] android: camera_mode: Resize 'data'\n\tvectors","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":"hanlinchen@chromium.org, 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>"}}]