ipa: simple: Report the ColourGains in metadata
Provide the determined colour gains back into the metadata to add to completed requests. Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Milan Zamazal <mzamazal@redhat.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
fb99081586
commit
a0b97475b1
3 changed files with 29 additions and 2 deletions
|
@ -17,6 +17,8 @@
|
||||||
#include "libipa/colours.h"
|
#include "libipa/colours.h"
|
||||||
#include "simple/ipa_context.h"
|
#include "simple/ipa_context.h"
|
||||||
|
|
||||||
|
#include "control_ids.h"
|
||||||
|
|
||||||
namespace libcamera {
|
namespace libcamera {
|
||||||
|
|
||||||
LOG_DEFINE_CATEGORY(IPASoftAwb)
|
LOG_DEFINE_CATEGORY(IPASoftAwb)
|
||||||
|
@ -32,15 +34,32 @@ int Awb::configure(IPAContext &context,
|
||||||
return 0;
|
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,
|
void Awb::process(IPAContext &context,
|
||||||
[[maybe_unused]] const uint32_t frame,
|
[[maybe_unused]] const uint32_t frame,
|
||||||
[[maybe_unused]] IPAFrameContext &frameContext,
|
IPAFrameContext &frameContext,
|
||||||
const SwIspStats *stats,
|
const SwIspStats *stats,
|
||||||
ControlList &metadata)
|
ControlList &metadata)
|
||||||
{
|
{
|
||||||
const SwIspStats::Histogram &histogram = stats->yHistogram;
|
const SwIspStats::Histogram &histogram = stats->yHistogram;
|
||||||
const uint8_t blackLevel = context.activeState.blc.level;
|
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
|
* Black level must be subtracted to get the correct AWB ratios, they
|
||||||
* would be off if they were computed from the whole brightness range
|
* would be off if they were computed from the whole brightness range
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2024, Red Hat Inc.
|
* Copyright (C) 2024-2025 Red Hat Inc.
|
||||||
*
|
*
|
||||||
* Auto white balance
|
* Auto white balance
|
||||||
*/
|
*/
|
||||||
|
@ -20,6 +20,10 @@ public:
|
||||||
~Awb() = default;
|
~Awb() = default;
|
||||||
|
|
||||||
int configure(IPAContext &context, const IPAConfigInfo &configInfo) override;
|
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,
|
void process(IPAContext &context,
|
||||||
const uint32_t frame,
|
const uint32_t frame,
|
||||||
IPAFrameContext &frameContext,
|
IPAFrameContext &frameContext,
|
||||||
|
|
|
@ -70,6 +70,10 @@ struct IPAFrameContext : public FrameContext {
|
||||||
int32_t exposure;
|
int32_t exposure;
|
||||||
double gain;
|
double gain;
|
||||||
} sensor;
|
} sensor;
|
||||||
|
struct {
|
||||||
|
double red;
|
||||||
|
double blue;
|
||||||
|
} gains;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IPAContext {
|
struct IPAContext {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue