[PATCH 1/3] ipa: rkisp1: Initialise AGC from FrameDurationLimits controls

Dan Scally dan.scally at ideasonboard.com
Thu Oct 24 11:23:56 CEST 2024


Hi Kieran

On 14/10/2024 16:47, Kieran Bingham wrote:
> The IPA calculates and reports the FrameDurationLimits to applications
> by configuring the ControlInfo accordingly during
> IPARkISP1::updateControls()
>
> We later need to know these limits during Agc::configure() for
> initialising the ActiveState of the AGC implementation with the limits.
>
> Store the FrameDurationLimits ControlInfo in the ControlInfoMap which is
> now present in the IPAContext so that it is commonly available for the
> AGC algorithm, removing the 'todo' accordingly.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally at ideasonboard.com>
> ---
>   src/ipa/rkisp1/algorithms/agc.cpp | 9 +++------
>   src/ipa/rkisp1/rkisp1.cpp         | 5 ++---
>   2 files changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
> index 17d074d9c03e..33f902862c4a 100644
> --- a/src/ipa/rkisp1/algorithms/agc.cpp
> +++ b/src/ipa/rkisp1/algorithms/agc.cpp
> @@ -178,12 +178,9 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)
>   	context.activeState.agc.meteringMode =
>   		static_cast<controls::AeMeteringModeEnum>(meteringModes_.begin()->first);
>   
> -	/*
> -	 * \todo This should probably come from FrameDurationLimits instead,
> -	 * except it's computed in the IPA and not here so we'd have to
> -	 * recompute it.
> -	 */
> -	context.activeState.agc.maxFrameDuration = context.configuration.sensor.maxShutterSpeed;
> +	/* Limit the frame duration to match current initialisation */
> +	ControlInfo &frameDurationLimits = context.ctrlMap[&controls::FrameDurationLimits];
> +	context.activeState.agc.maxFrameDuration = std::chrono::microseconds(frameDurationLimits.max().get<int64_t>());
>   
>   	/*
>   	 * Define the measurement window for AGC as a centered rectangle
> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> index 9e161cabdea4..47777ece783f 100644
> --- a/src/ipa/rkisp1/rkisp1.cpp
> +++ b/src/ipa/rkisp1/rkisp1.cpp
> @@ -432,9 +432,8 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo,
>   		frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);
>   	}
>   
> -	ctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],
> -							      frameDurations[1],
> -							      frameDurations[2]);
> +	context_.ctrlMap[&controls::FrameDurationLimits] =
> +		ControlInfo(frameDurations[0], frameDurations[1], frameDurations[2]);
>   
>   	ctrlMap.insert(context_.ctrlMap.begin(), context_.ctrlMap.end());
>   	*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);


More information about the libcamera-devel mailing list