[libcamera-devel] [PATCH 4/4] android: camera_device: Initialize pixel array properties

Jacopo Mondi jacopo at jmondi.org
Fri Nov 6 16:49:47 CET 2020


Initialize pixel array properties in the Android camera HAL
inspecting the camera properties.

If the camera does not provide any suitable property, not static
metadata is registered to the Android framework.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/android/camera_device.cpp | 38 +++++++++++++++++++++++++----------
 1 file changed, 27 insertions(+), 11 deletions(-)

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 4690346e05cb..8a71d15be8ca 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -593,6 +593,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
 	}
 
 	const ControlInfoMap &controlsInfo = camera_->controls();
+	const ControlList &properties = camera_->properties();
 
 	/* Color correction static metadata. */
 	{
@@ -724,17 +725,32 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
 	staticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &maxJpegBufferSize_, 1);
 
 	/* Sensor static metadata. */
-	int32_t pixelArraySize[] = {
-		2592, 1944,
-	};
-	staticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
-				  &pixelArraySize, 2);
-
-	int32_t sensorSizes[] = {
-		0, 0, 2560, 1920,
-	};
-	staticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
-				  &sensorSizes, 4);
+	{
+		if (properties.contains(properties::PixelArraySize)) {
+			const Size &size =
+				properties.get<Size>(properties::PixelArraySize);
+			std::vector<int32_t> data{
+				static_cast<int32_t>(size.width),
+				static_cast<int32_t>(size.height),
+			};
+			staticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
+						  data.data(), data.size());
+		}
+	}
+	{
+		if (properties.contains(properties::PixelArrayActiveAreas)) {
+			const Span<const Rectangle> &rects =
+				properties.get<Span<const Rectangle>>(properties::PixelArrayActiveAreas);
+			std::vector<int32_t> data{
+				static_cast<int32_t>(rects[0].x),
+				static_cast<int32_t>(rects[0].y),
+				static_cast<int32_t>(rects[0].width),
+				static_cast<int32_t>(rects[0].height),
+			};
+			staticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
+						  data.data(), data.size());
+		}
+	}
 
 	int32_t sensitivityRange[] = {
 		32, 2400,
-- 
2.29.1



More information about the libcamera-devel mailing list