[PATCH 8/8] ipa: rkisp1: agc: Add debug controls for statistic values
Paul Elder
paul.elder at ideasonboard.com
Mon May 12 23:41:27 CEST 2025
Quoting Stefan Klug (2025-04-11 15:04:15)
> Add debug controls for AWB stats and exposure means.
>
> Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> src/ipa/rkisp1/algorithms/agc.cpp | 16 +++++++++++++++
> src/ipa/rkisp1/algorithms/awb.cpp | 3 +++
> src/libcamera/control_ids_debug.yaml | 29 ++++++++++++++++++++++++++++
> 3 files changed, 48 insertions(+)
>
> diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
> index a2c8d5403ba2..6dc8b9fc0a31 100644
> --- a/src/ipa/rkisp1/algorithms/agc.cpp
> +++ b/src/ipa/rkisp1/algorithms/agc.cpp
> @@ -400,8 +400,10 @@ void Agc::fillMetadata(IPAContext &context, IPAFrameContext &frameContext,
> {
> utils::Duration exposureTime = context.configuration.sensor.lineDuration
> * frameContext.sensor.exposure;
> + utils::Duration exposureTimeCorrected = exposureTime * frameContext.awb.additionalGain;
> metadata.set(controls::AnalogueGain, frameContext.sensor.gain);
> metadata.set(controls::ExposureTime, exposureTime.get<std::micro>());
> + metadata.set<float>(controls::debug::ExposureTimeCorrected, exposureTimeCorrected.get<std::micro>());
> metadata.set(controls::FrameDuration, frameContext.agc.frameDuration.get<std::micro>());
> metadata.set(controls::ExposureTimeMode,
> frameContext.agc.autoExposureEnabled
> @@ -574,6 +576,20 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,
> frameContext.agc.exposureMode,
> hist, effectiveExposureValue);
>
> + auto &debugMeta = context.debugMetadata;
> + std::vector<int32_t> histMeta;
> + for (unsigned i = 0; i < context.hw->numHistogramBins; i++)
> + histMeta.push_back(params->hist.hist_bins[i] >> 4);
> + debugMeta.set<Span<const int32_t>>(controls::debug::StatsHistogram, histMeta);
> +
> + double meanExposure = 0;
> + for (uint8_t expMean : expMeans_)
> + meanExposure += expMean;
> + meanExposure = meanExposure / expMeans_.size() / 255.0;
> + debugMeta.set<const float>(controls::debug::StatsExpMean, meanExposure);
> +
> + debugMeta.set<Span<const uint8_t>>(controls::debug::StatsExpMeans, expMeans_);
> +
> LOG(RkISP1Agc, Debug)
> << "Divided up exposure time, analogue gain and digital gain are "
> << newExposureTime << ", " << aGain << " and " << dGain;
> diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> index cc78136a22c8..be08458e45e3 100644
> --- a/src/ipa/rkisp1/algorithms/awb.cpp
> +++ b/src/ipa/rkisp1/algorithms/awb.cpp
> @@ -310,6 +310,9 @@ void Awb::process(IPAContext &context,
>
> RGB<double> rgbMeans = calculateRgbMeans(frameContext, awb);
>
> + context.debugMetadata.set<Span<const float>>(controls::debug::RgbMeans, Vector<float, 3>(rgbMeans).data());
> + context.debugMetadata.set<int>(controls::debug::AwbCount, awb->awb_mean[0].cnt);
> +
> /*
> * If the means are too small we don't have enough information to
> * meaningfully calculate gains. Freeze the algorithm in that case.
> diff --git a/src/libcamera/control_ids_debug.yaml b/src/libcamera/control_ids_debug.yaml
> index 9489e677402e..d0f9329187f7 100644
> --- a/src/libcamera/control_ids_debug.yaml
> +++ b/src/libcamera/control_ids_debug.yaml
> @@ -1,9 +1,38 @@
> # SPDX-License-Identifier: LGPL-2.1-or-later
> #
> +# This file was generated by utils/gen-debug-controls.py
> +#
> %YAML 1.1
> ---
> vendor: debug
> controls:
> +- AwbCount:
> + type: int
> + direction: out
> + description: Debug control AwbCount found in src/ipa/rkisp1/algorithms/awb.cpp
> +- ExposureTimeCorrected:
> + type: float
> + direction: out
> + description: Debug control ExposureTimeCorrected found in src/ipa/rkisp1/algorithms/agc.cpp
> +- RgbMeans:
> + type: float
> + direction: out
> + description: Debug control RgbMeans found in src/ipa/rkisp1/algorithms/awb.cpp
> + size: '[n]'
> +- StatsExpMean:
> + type: const float
> + direction: out
> + description: Debug control StatsExpMean found in src/ipa/rkisp1/algorithms/agc.cpp
> +- StatsExpMeans:
> + type: uint8_t
> + direction: out
> + description: Debug control StatsExpMeans found in src/ipa/rkisp1/algorithms/agc.cpp
> + size: '[n]'
> +- StatsHistogram:
> + type: int32_t
> + direction: out
> + description: Debug control StatsHistogram found in src/ipa/rkisp1/algorithms/agc.cpp
> + size: '[n]'
> - WdrCurve:
> type: Point
> direction: out
> --
> 2.43.0
>
More information about the libcamera-devel
mailing list