summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefan Klug <stefan.klug@ideasonboard.com>2025-04-03 17:49:19 +0200
committerStefan Klug <stefan.klug@ideasonboard.com>2025-05-20 11:20:08 +0200
commit71b680c8635c7b4c9c28ba347bac91d466aa4ec8 (patch)
treef78a6777a15f2c5d6f41b69e9be440976f721050 /src
parentc699d26573ebc3a6275d697a9032aedd9d19f974 (diff)
ipa: rkisp1: Damp color temperature regulation
Damp the regulation of the color temperature with the same factor as the gains. Not damping the color temperature leads to visible flicker, as the CCM changes too much. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/ipa/rkisp1/algorithms/awb.cpp5
-rw-r--r--src/ipa/rkisp1/algorithms/ccm.cpp4
2 files changed, 3 insertions, 6 deletions
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index 601de9c4..03c5fc99 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -324,8 +324,6 @@ void Awb::process(IPAContext &context,
RkISP1AwbStats awbStats{ rgbMeans };
AwbResult awbResult = awbAlgo_->calculateAwb(awbStats, frameContext.lux.lux);
- activeState.awb.automatic.temperatureK = awbResult.colourTemperature;
-
/*
* Clamp the gain values to the hardware, which expresses gains as Q2.8
* unsigned integer values. Set the minimum just above zero to avoid
@@ -336,9 +334,12 @@ void Awb::process(IPAContext &context,
/* Filter the values to avoid oscillations. */
double speed = 0.2;
+ double ct = awbResult.colourTemperature;
+ ct = ct * speed + activeState.awb.automatic.temperatureK * (1 - speed);
awbResult.gains = awbResult.gains * speed +
activeState.awb.automatic.gains * (1 - speed);
+ activeState.awb.automatic.temperatureK = static_cast<unsigned int>(ct);
activeState.awb.automatic.gains = awbResult.gains;
LOG(RkISP1Awb, Debug)
diff --git a/src/ipa/rkisp1/algorithms/ccm.cpp b/src/ipa/rkisp1/algorithms/ccm.cpp
index 3a96a542..de2b6fe7 100644
--- a/src/ipa/rkisp1/algorithms/ccm.cpp
+++ b/src/ipa/rkisp1/algorithms/ccm.cpp
@@ -142,10 +142,6 @@ void Ccm::prepare(IPAContext &context, const uint32_t frame,
}
uint32_t ct = frameContext.awb.temperatureK;
- /*
- * \todo The colour temperature will likely be noisy, add filtering to
- * avoid updating the CCM matrix all the time.
- */
if (frame > 0 && ct == ct_) {
frameContext.ccm.ccm = context.activeState.ccm.automatic;
return;