[libcamera-devel] [PATCH 2/2] libcamera: control: explicitly define default control values

Christian Rauch Rauch.Christian at gmx.de
Sun Aug 21 14:43:43 CEST 2022


Explicitly set the default value for all ControlInfo to 0, false or minimum.

Signed-off-by: Christian Rauch <Rauch.Christian at gmx.de>
---
 src/ipa/raspberrypi/raspberrypi.cpp           | 22 ++++++++++---------
 src/ipa/rkisp1/rkisp1.cpp                     | 10 ++++-----
 src/libcamera/pipeline/ipu3/ipu3.cpp          |  2 +-
 .../pipeline/raspberrypi/raspberrypi.cpp      |  2 +-
 4 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 69c73f8c..c6360a51 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -74,23 +74,23 @@ constexpr Duration controllerMinFrameDuration = 1.0s / 30.0;

 /* List of controls handled by the Raspberry Pi IPA */
 static const ControlInfoMap::Map ipaControls{
-	{ &controls::AeEnable, ControlInfo(false, true) },
-	{ &controls::ExposureTime, ControlInfo(0, 66666) },
-	{ &controls::AnalogueGain, ControlInfo(1.0f, 16.0f) },
+	{ &controls::AeEnable, ControlInfo(false, true, false) },
+	{ &controls::ExposureTime, ControlInfo(0, 66666, 0) },
+	{ &controls::AnalogueGain, ControlInfo(1.0f, 16.0f, 0.0f) },
 	{ &controls::AeMeteringMode, ControlInfo(controls::AeMeteringModeValues) },
 	{ &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeValues) },
 	{ &controls::AeExposureMode, ControlInfo(controls::AeExposureModeValues) },
 	{ &controls::ExposureValue, ControlInfo(-8.0f, 8.0f, 0.0f) },
-	{ &controls::AwbEnable, ControlInfo(false, true) },
-	{ &controls::ColourGains, ControlInfo(0.0f, 32.0f) },
+	{ &controls::AwbEnable, ControlInfo(false, true, false) },
+	{ &controls::ColourGains, ControlInfo(0.0f, 32.0f, 0.0f) },
 	{ &controls::AwbMode, ControlInfo(controls::AwbModeValues) },
 	{ &controls::Brightness, ControlInfo(-1.0f, 1.0f, 0.0f) },
 	{ &controls::Contrast, ControlInfo(0.0f, 32.0f, 1.0f) },
 	{ &controls::Saturation, ControlInfo(0.0f, 32.0f, 1.0f) },
 	{ &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },
-	{ &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f) },
+	{ &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f, 0.0f) },
 	{ &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },
-	{ &controls::FrameDurationLimits, ControlInfo(INT64_C(33333), INT64_C(120000)) },
+	{ &controls::FrameDurationLimits, ControlInfo(INT64_C(33333), INT64_C(120000), INT64_C(0)) },
 	{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }
 };

@@ -463,10 +463,11 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,
 	const Duration maxSensorFrameDuration = mode_.maxFrameLength * mode_.lineLength;
 	ctrlMap[&controls::FrameDurationLimits] =
 		ControlInfo(static_cast<int64_t>(minSensorFrameDuration.get<std::micro>()),
-			    static_cast<int64_t>(maxSensorFrameDuration.get<std::micro>()));
+			    static_cast<int64_t>(maxSensorFrameDuration.get<std::micro>()),
+			    int64_t(0));

 	ctrlMap[&controls::AnalogueGain] =
-		ControlInfo(1.0f, static_cast<float>(helper_->gain(maxSensorGainCode_)));
+		ControlInfo(1.0f, static_cast<float>(helper_->gain(maxSensorGainCode_)), 0.0f);

 	/*
 	 * Calculate the max exposure limit from the frame duration limit as V4L2
@@ -478,7 +479,8 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,

 	ctrlMap[&controls::ExposureTime] =
 		ControlInfo(static_cast<int32_t>(helper_->exposure(exposureMin).get<std::micro>()),
-			    static_cast<int32_t>(maxShutter.get<std::micro>()));
+			    static_cast<int32_t>(maxShutter.get<std::micro>()),
+			    int32_t(0));

 	result->controlInfo = ControlInfoMap(std::move(ctrlMap), controls::controls);
 	return 0;
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 27b4212b..2121bfd2 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -91,12 +91,12 @@ namespace {

 /* List of controls handled by the RkISP1 IPA */
 const ControlInfoMap::Map rkisp1Controls{
-	{ &controls::AeEnable, ControlInfo(false, true) },
-	{ &controls::AwbEnable, ControlInfo(false, true) },
+	{ &controls::AeEnable, ControlInfo(false, true, false) },
+	{ &controls::AwbEnable, ControlInfo(false, true, false) },
 	{ &controls::ColourGains, ControlInfo(0.0f, 3.996f, 1.0f) },
-	{ &controls::Brightness, ControlInfo(-1.0f, 0.993f) },
-	{ &controls::Contrast, ControlInfo(0.0f, 1.993f) },
-	{ &controls::Saturation, ControlInfo(0.0f, 1.993f) },
+	{ &controls::Brightness, ControlInfo(-1.0f, 0.993f, 0.0f) },
+	{ &controls::Contrast, ControlInfo(0.0f, 1.993f, 0.0f) },
+	{ &controls::Saturation, ControlInfo(0.0f, 1.993f, 0.0f) },
 	{ &controls::Sharpness, ControlInfo(0.0f, 10.0f, 1.0f) },
 	{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) },
 };
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 9df24603..a1bcfe49 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -42,7 +42,7 @@ namespace libcamera {
 LOG_DEFINE_CATEGORY(IPU3)

 static const ControlInfoMap::Map IPU3Controls = {
-	{ &controls::draft::PipelineDepth, ControlInfo(2, 3) },
+	{ &controls::draft::PipelineDepth, ControlInfo(2, 3, 0) },
 };

 class IPU3CameraData : public Camera::Private
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index e895584d..8fd7634d 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -954,7 +954,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
 	/* Add the ScalerCrop control limits based on the current mode. */
 	Rectangle ispMinCrop(data->ispMinCropSize_);
 	ispMinCrop.scaleBy(data->sensorInfo_.analogCrop.size(), data->sensorInfo_.outputSize);
-	ctrlMap[&controls::ScalerCrop] = ControlInfo(ispMinCrop, Rectangle(data->sensorInfo_.analogCrop.size()));
+	ctrlMap[&controls::ScalerCrop] = ControlInfo(ispMinCrop, Rectangle(data->sensorInfo_.analogCrop.size()), ispMinCrop);

 	data->controlInfo_ = ControlInfoMap(std::move(ctrlMap), result.controlInfo.idmap());

--
2.34.1



More information about the libcamera-devel mailing list