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

Jacopo Mondi jacopo at jmondi.org
Tue Dec 1 16:00:56 CET 2020


The CameraDevice::getStaticMetadata() function populates the
entries for Android's static metadata by walking the ControlInfo
supported values reported by the libcamera pipeline.

For each entry a vector of the size of the maximum number of possible
entries is reserved, populated and then stored in the Android's metadata
pack.

The number of actual entries to be passed to Android is computed using
the vector's size which, for this reason, shall be resized to the actual
number of entries it stores.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
This patch fixes cros_camera_test:
Camera3DeviceTest/Camera3DeviceDefaultSettings.ConstructDefaultSettings/1
---
 src/android/camera_device.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index d43db3600b20..d559f0fc4b81 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -602,8 +602,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
 		if (infoMap != controlsInfo.end()) {
 			for (const auto &value : infoMap->second.values())
 				data.push_back(value.get<int32_t>());
+			data.resize(infoMap->second.values().size());
 		} else {
 			data.push_back(ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF);
+			data.resize(1);
 		}
 		staticMetadata_->addEntry(ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,
 					  data.data(), data.size());
@@ -803,8 +805,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
 		if (infoMap != controlsInfo.end()) {
 			for (const auto &value : infoMap->second.values())
 				data.push_back(value.get<int32_t>());
+			data.resize(infoMap->second.values().size());
 		} else {
 			data.push_back(ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF);
+			data.resize(1);
 		}
 		staticMetadata_->addEntry(ANDROID_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES,
 					  data.data(), data.size());
@@ -871,8 +875,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
 		if (infoMap != controlsInfo.end()) {
 			for (const auto &value : infoMap->second.values())
 				data.push_back(value.get<int32_t>());
+			data.resize(infoMap->second.values().size());
 		} else {
 			data.push_back(ANDROID_NOISE_REDUCTION_MODE_OFF);
+			data.resize(1);
 		}
 		staticMetadata_->addEntry(ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
 					  data.data(), data.size());
--
2.29.1



More information about the libcamera-devel mailing list