[PATCH v5 3/6] ipa: simple: Report the ColourGains in metadata
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Mar 27 00:22:33 CET 2025
Hi Milan,
Thank you for the patch.
On Wed, Mar 26, 2025 at 01:48:52PM +0100, Milan Zamazal wrote:
> From: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> Provide the determined colour gains back into the metadata
> to add to completed requests.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/ipa/simple/algorithms/awb.cpp | 21 ++++++++++++++++++++-
> src/ipa/simple/algorithms/awb.h | 6 +++++-
> src/ipa/simple/ipa_context.h | 4 ++++
> 3 files changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp
> index ec77c6e5..55719059 100644
> --- a/src/ipa/simple/algorithms/awb.cpp
> +++ b/src/ipa/simple/algorithms/awb.cpp
> @@ -17,6 +17,8 @@
> #include "libipa/colours.h"
> #include "simple/ipa_context.h"
>
> +#include "control_ids.h"
> +
> namespace libcamera {
>
> LOG_DEFINE_CATEGORY(IPASoftAwb)
> @@ -32,15 +34,32 @@ int Awb::configure(IPAContext &context,
> return 0;
> }
>
> +void Awb::prepare(IPAContext &context,
> + [[maybe_unused]] const uint32_t frame,
> + IPAFrameContext &frameContext,
> + [[maybe_unused]] DebayerParams *params)
> +{
> + auto &gains = context.activeState.awb.gains;
> + frameContext.gains.red = gains.r();
> + frameContext.gains.blue = gains.b();
> +}
> +
> void Awb::process(IPAContext &context,
> [[maybe_unused]] const uint32_t frame,
> - [[maybe_unused]] IPAFrameContext &frameContext,
> + IPAFrameContext &frameContext,
> const SwIspStats *stats,
> ControlList &metadata)
> {
> const SwIspStats::Histogram &histogram = stats->yHistogram;
> const uint8_t blackLevel = context.activeState.blc.level;
>
> + const float maxGain = 1024.0;
> + const float mdGains[] = {
> + static_cast<float>(frameContext.gains.red / maxGain),
> + static_cast<float>(frameContext.gains.blue / maxGain)
> + };
> + metadata.set(controls::ColourGains, mdGains);
> +
> /*
> * Black level must be subtracted to get the correct AWB ratios, they
> * would be off if they were computed from the whole brightness range
> diff --git a/src/ipa/simple/algorithms/awb.h b/src/ipa/simple/algorithms/awb.h
> index db1496cd..ad993f39 100644
> --- a/src/ipa/simple/algorithms/awb.h
> +++ b/src/ipa/simple/algorithms/awb.h
> @@ -1,6 +1,6 @@
> /* SPDX-License-Identifier: LGPL-2.1-or-later */
> /*
> - * Copyright (C) 2024, Red Hat Inc.
> + * Copyright (C) 2024-2025 Red Hat Inc.
> *
> * Auto white balance
> */
> @@ -20,6 +20,10 @@ public:
> ~Awb() = default;
>
> int configure(IPAContext &context, const IPAConfigInfo &configInfo) override;
> + void prepare(IPAContext &context,
> + const uint32_t frame,
> + IPAFrameContext &frameContext,
> + DebayerParams *params) override;
> void process(IPAContext &context,
> const uint32_t frame,
> IPAFrameContext &frameContext,
> diff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h
> index 17bcd4ca..bfac835b 100644
> --- a/src/ipa/simple/ipa_context.h
> +++ b/src/ipa/simple/ipa_context.h
> @@ -70,6 +70,10 @@ struct IPAFrameContext : public FrameContext {
> int32_t exposure;
> double gain;
> } sensor;
> + struct {
> + double red;
> + double blue;
> + } gains;
> };
>
> struct IPAContext {
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list