[libcamera-devel] [PATCH 08/10] android: camera_device: Handle NOISE_REDUCTION_MODES

Jacopo Mondi jacopo at jmondi.org
Fri Oct 9 14:20:59 CEST 2020


Register the ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES
static metadata property inspecting the values retuned by the pipeline
handler through the properties::draft::AvailableNoiseReductionModes
libcamera property.

Reserve in the static metadata pack enough space to support all the 5
available noise reduction modes Android defines.

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

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index bccec358ea13..39d8218a67e5 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -538,7 +538,7 @@ std::tuple<uint32_t, uint32_t> CameraDevice::calculateStaticMetadataSize()
 	 * Currently: 51 entries, 687 bytes of static metadata
 	 */
 	uint32_t numEntries = 51;
-	uint32_t byteSize = 687;
+	uint32_t byteSize = 691;
 
 	/*
 	 * Calculate space occupation in bytes for dynamically built metadata
@@ -815,9 +815,18 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
 				  &minFocusDistance, 1);
 
 	/* Noise reduction modes. */
-	uint8_t noiseReductionModes = ANDROID_NOISE_REDUCTION_MODE_OFF;
-	staticMetadata_->addEntry(ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
-				  &noiseReductionModes, 1);
+	if (cameraProperties.contains(properties::draft::AvailableNoiseReductionModes)) {
+		Span<const int32_t> pipelineNoiseReductionModes =
+			cameraProperties.get<Span<const int32_t>>
+			(properties::draft::AvailableNoiseReductionModes);
+
+		std::vector<uint8_t> noiseReductionModes;
+		for (int32_t mode : pipelineNoiseReductionModes)
+			noiseReductionModes.push_back(mode);
+		staticMetadata_->addEntry(ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
+					  noiseReductionModes.data(),
+					  noiseReductionModes.size());
+	}
 
 	/* Scaler static metadata. */
 	float maxDigitalZoom = 1;
-- 
2.28.0



More information about the libcamera-devel mailing list