[libcamera-devel] [PATCH 1/3] controls: Promote NoiseReductionMode to non-draft

Paul Elder paul.elder at ideasonboard.com
Mon Sep 13 12:20:05 CEST 2021


Promote NoiseReductionMode to a non-draft control. Upgrade the value
descriptions. Update the raspberrypi IPA accordingly, as it is the only
current user of this control.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
 include/libcamera/ipa/raspberrypi.h |  2 +-
 src/android/camera_capabilities.cpp |  2 +-
 src/ipa/raspberrypi/raspberrypi.cpp | 12 ++---
 src/libcamera/control_ids.yaml      | 73 +++++++++++++++++------------
 4 files changed, 52 insertions(+), 37 deletions(-)

diff --git a/include/libcamera/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h
index 521eaecd..e0dc6f5e 100644
--- a/include/libcamera/ipa/raspberrypi.h
+++ b/include/libcamera/ipa/raspberrypi.h
@@ -45,7 +45,7 @@ static const ControlInfoMap Controls({
 		{ &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f) },
 		{ &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },
 		{ &controls::FrameDurationLimits, ControlInfo(INT64_C(1000), INT64_C(1000000000)) },
-		{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }
+		{ &controls::NoiseReductionMode, ControlInfo(controls::NoiseReductionModeValues) }
 	}, controls::controls);
 
 } /* namespace RPi */
diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
index e92bca42..08e44a1a 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -1175,7 +1175,7 @@ int CameraCapabilities::initializeStaticMetadata()
 	{
 		std::vector<uint8_t> data;
 		data.reserve(5);
-		const auto &infoMap = controlsInfo.find(&controls::draft::NoiseReductionMode);
+		const auto &infoMap = controlsInfo.find(&controls::NoiseReductionMode);
 		if (infoMap != controlsInfo.end()) {
 			for (const auto &value : infoMap->second.values())
 				data.push_back(value.get<int32_t>());
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 047123ab..8d44ab0a 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -605,11 +605,11 @@ static const std::map<int32_t, std::string> AwbModeTable = {
 };
 
 static const std::map<int32_t, RPiController::DenoiseMode> DenoiseModeTable = {
-	{ controls::draft::NoiseReductionModeOff, RPiController::DenoiseMode::Off },
-	{ controls::draft::NoiseReductionModeFast, RPiController::DenoiseMode::ColourFast },
-	{ controls::draft::NoiseReductionModeHighQuality, RPiController::DenoiseMode::ColourHighQuality },
-	{ controls::draft::NoiseReductionModeMinimal, RPiController::DenoiseMode::ColourOff },
-	{ controls::draft::NoiseReductionModeZSL, RPiController::DenoiseMode::ColourHighQuality },
+	{ controls::NoiseReductionModeOff, RPiController::DenoiseMode::Off },
+	{ controls::NoiseReductionModeFast, RPiController::DenoiseMode::ColourFast },
+	{ controls::NoiseReductionModeHighQuality, RPiController::DenoiseMode::ColourHighQuality },
+	{ controls::NoiseReductionModeMinimal, RPiController::DenoiseMode::ColourOff },
+	{ controls::NoiseReductionModeZSL, RPiController::DenoiseMode::ColourHighQuality },
 };
 
 void IPARPi::queueRequest(const ControlList &controls)
@@ -898,7 +898,7 @@ void IPARPi::queueRequest(const ControlList &controls)
 				 * analysis image resolution or format mismatch, we should
 				 * report the status correctly in the metadata.
 				 */
-				libcameraMetadata_.set(controls::draft::NoiseReductionMode, idx);
+				libcameraMetadata_.set(controls::NoiseReductionMode, idx);
 			} else {
 				LOG(IPARPI, Error) << "Noise reduction mode " << idx
 						   << " not recognised";
diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
index 9d4638ae..fffcca2d 100644
--- a/src/libcamera/control_ids.yaml
+++ b/src/libcamera/control_ids.yaml
@@ -381,6 +381,50 @@ controls:
         \todo Define how the sensor timestamp has to be used in the reprocessing
         use case.
 
+  - NoiseReductionMode:
+      type: int32_t
+      description: |
+        Mode of operation for the noise reduction algorithm.
+
+        The noise reduction algorithm attempts to improve image quality by
+        removing excessive noise added by the capture process, especially in
+        dark conditions.
+      enum:
+        - name: NoiseReductionModeOff
+          value: 0
+          description: |
+            No noise reduction will be applied by the camera device, for
+            both the raw and YUV domains.
+        - name: NoiseReductionModeFast
+          value: 1
+          description: |
+            Noise reduction is applied without reducing the frame rate.
+            This may be the same as Raw if it is listed, or the same as Off if
+            any noise reduction will slow down the frame rate.
+        - name: NoiseReductionModeHighQuality
+          value: 2
+          description: |
+            High quality noise reduction at the expense of frame rate.
+        - name: NoiseReductionModeRaw
+          value: 3
+          description: |
+            Only sensor raw domain basic noise reduction is enabled, to remove
+            demosaicing or other processing artifacts. Frame rate will not be
+            reduced.
+        - name: NoiseReductionModeZSL
+          value: 4
+          description: |
+            Noise reduction is applied at different levels to different streams.
+
+            ZSL is meant to be used by applications that maintain a continuous
+            circular buffer of high-resolution images during preview and
+            reprocess image(s) from that buffer into a final capture when
+            triggered by the user. In this mode, the camera device applies
+            noise reduction to low-resolution streams (below maximum recording
+            resolution) to maximize preview quality, but does not apply noise
+            reduction to high-resolution streams, since those will be
+            reprocessed later if necessary.
+
   # ----------------------------------------------------------------------------
   # Draft controls section
 
@@ -427,35 +471,6 @@ controls:
             The camera will cancel any active trigger and the AF routine is
             reset to its initial state.
 
-  - NoiseReductionMode:
-      type: int32_t
-      draft: true
-      description: |
-       Control to select the noise reduction algorithm mode. Currently
-       identical to ANDROID_NOISE_REDUCTION_MODE.
-
-        Mode of operation for the noise reduction algorithm.
-      enum:
-        - name: NoiseReductionModeOff
-          value: 0
-          description: No noise reduction is applied
-        - name: NoiseReductionModeFast
-          value: 1
-          description: |
-            Noise reduction is applied without reducing the frame rate.
-        - name: NoiseReductionModeHighQuality
-          value: 2
-          description: |
-            High quality noise reduction at the expense of frame rate.
-        - name: NoiseReductionModeMinimal
-          value: 3
-          description: |
-            Minimal noise reduction is applied without reducing the frame rate.
-        - name: NoiseReductionModeZSL
-          value: 4
-          description: |
-            Noise reduction is applied at different levels to different streams.
-
   - ColorCorrectionAberrationMode:
       type: int32_t
       draft: true
-- 
2.27.0



More information about the libcamera-devel mailing list