[libcamera-devel] [PATCH v2] android: camera_mode: Reserve 'data' vectors

Kieran Bingham kieran.bingham at ideasonboard.com
Tue Dec 1 17:03:17 CET 2020


Hi Jacopo,

On 01/12/2020 15:59, Jacopo Mondi wrote:
> The CameraDevice::getStaticMetadata() function populates the
> entries for Android's static metadata by walking the ControlInfo
> supported values reported by the libcamera pipeline.
> 
> The number of entries to be passed to Android is computed using the
> vector's size which is initialized at vector creation time to the
> maximum number of available entries.
> 
> In order to report the correct number of metadata do not create the
> vector with the largest possible number of elements but only reserve
> space for them using std::vector::reserve() which does not modify the
> vector's size.
> 
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
> This patch fixes cros_camera_test:
> Camera3DeviceTest/Camera3DeviceDefaultSettings.ConstructDefaultSettings/1
> ---

Be careful about removing the extra '---' when applying, but this looks
good now.

I still wish we could automate the overall sizing of the metadata
components, but that's quite different to this patch (but it reminds me
of it...)

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>


>  src/android/camera_device.cpp | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 4690346e05cb..4eb05df0fdc2 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -596,7 +596,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
> 
>  	/* Color correction static metadata. */
>  	{
> -		std::vector<uint8_t> data(3);
> +		std::vector<uint8_t> data;
> +		data.reserve(3);
>  		const auto &infoMap = controlsInfo.find(&controls::draft::ColorCorrectionAberrationMode);
>  		if (infoMap != controlsInfo.end()) {
>  			for (const auto &value : infoMap->second.values())
> @@ -782,7 +783,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
>  				  &maxFaceCount, 1);
> 
>  	{
> -		std::vector<uint8_t> data(2);
> +		std::vector<uint8_t> data;
> +		data.reserve(2);
>  		const auto &infoMap = controlsInfo.find(&controls::draft::LensShadingMapMode);
>  		if (infoMap != controlsInfo.end()) {
>  			for (const auto &value : infoMap->second.values())
> @@ -850,7 +852,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
> 
>  	/* Noise reduction modes. */
>  	{
> -		std::vector<uint8_t> data(5);
> +		std::vector<uint8_t> data;
> +		data.reserve(5);
>  		const auto &infoMap = controlsInfo.find(&controls::draft::NoiseReductionMode);
>  		if (infoMap != controlsInfo.end()) {
>  			for (const auto &value : infoMap->second.values())
> --
> 2.29.1
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list