From c268e4f2e8dd45d3538489fa164a043cd25b0453 Mon Sep 17 00:00:00 2001 From: Jacopo Mondi Date: Tue, 1 Dec 2020 15:42:15 +0100 Subject: android: camera_mode: Reserve 'data' vectors 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. This patch fixes cros_camera_test: Camera3DeviceTest/Camera3DeviceDefaultSettings.ConstructDefaultSettings/1 Reviewed-by: Laurent Pinchart Signed-off-by: Jacopo Mondi --- 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 4690346e..4eb05df0 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 data(3); + std::vector 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 data(2); + std::vector 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 data(5); + std::vector data; + data.reserve(5); const auto &infoMap = controlsInfo.find(&controls::draft::NoiseReductionMode); if (infoMap != controlsInfo.end()) { for (const auto &value : infoMap->second.values()) -- cgit v1.2.1