From bea2db5e6190e008dec880f2cc02172115126007 Mon Sep 17 00:00:00 2001 From: Naushir Patuck Date: Tue, 11 Feb 2025 10:20:02 +0000 Subject: ipa: rpi: Apply default ControlInfo values for sensor controls The existing IPA initialisation code did not set default values for some sensor related controls. This caused a crash using libcamerify when the it was trying to access the default value for controls::FrameDurationLimits as part of a recent change. Ensure controls::FrameDurationLimits, controls::AnalogueGain and controls::ExposureTime advertise default values along with the existing min/max values. The default is set to the defaults defined in the IPA set during initialisation. Bug: https://bugs.libcamera.org/show_bug.cgi?id=253 Signed-off-by: Naushir Patuck Reviewed-by: David Plowman Reviewed-by: Kieran Bingham Signed-off-by: Kieran Bingham --- src/ipa/rpi/common/ipa_base.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp index bd3c2200..d5948c4a 100644 --- a/src/ipa/rpi/common/ipa_base.cpp +++ b/src/ipa/rpi/common/ipa_base.cpp @@ -61,12 +61,13 @@ const ControlInfoMap::Map ipaControls{ ControlInfo(static_cast(controls::ExposureTimeModeAuto), static_cast(controls::ExposureTimeModeManual), static_cast(controls::ExposureTimeModeAuto)) }, - { &controls::ExposureTime, ControlInfo(0, 66666) }, + { &controls::ExposureTime, + ControlInfo(1, 66666, static_cast(defaultExposureTime.get())) }, { &controls::AnalogueGainMode, ControlInfo(static_cast(controls::AnalogueGainModeAuto), static_cast(controls::AnalogueGainModeManual), static_cast(controls::AnalogueGainModeAuto)) }, - { &controls::AnalogueGain, ControlInfo(1.0f, 16.0f) }, + { &controls::AnalogueGain, ControlInfo(1.0f, 16.0f, 1.0f) }, { &controls::AeMeteringMode, ControlInfo(controls::AeMeteringModeValues) }, { &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeValues) }, { &controls::AeExposureMode, ControlInfo(controls::AeExposureModeValues) }, @@ -80,7 +81,9 @@ const ControlInfoMap::Map ipaControls{ { &controls::HdrMode, ControlInfo(controls::HdrModeValues) }, { &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.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), + static_cast(defaultMinFrameDuration.get())) }, { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }, { &controls::rpi::StatsOutputEnable, ControlInfo(false, true, false) }, }; @@ -259,15 +262,18 @@ int32_t IpaBase::configure(const IPACameraSensorInfo &sensorInfo, const ConfigPa ControlInfoMap::Map ctrlMap = ipaControls; ctrlMap[&controls::FrameDurationLimits] = ControlInfo(static_cast(mode_.minFrameDuration.get()), - static_cast(mode_.maxFrameDuration.get())); + static_cast(mode_.maxFrameDuration.get()), + static_cast(defaultMinFrameDuration.get())); ctrlMap[&controls::AnalogueGain] = ControlInfo(static_cast(mode_.minAnalogueGain), - static_cast(mode_.maxAnalogueGain)); + static_cast(mode_.maxAnalogueGain), + static_cast(defaultAnalogueGain)); ctrlMap[&controls::ExposureTime] = ControlInfo(static_cast(mode_.minExposureTime.get()), - static_cast(mode_.maxExposureTime.get())); + static_cast(mode_.maxExposureTime.get()), + static_cast(defaultExposureTime.get())); /* Declare colour processing related controls for non-mono sensors. */ if (!monoSensor_) -- cgit v1.2.1