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>
This commit is contained in:
parent
c699d26573
commit
71b680c863
2 changed files with 3 additions and 6 deletions
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue