ipa: rkisp1: Refactor automatic/manual structure in IPAActiveState
Swap gains and automatic/manual in the IPAActiveState structure. This is in preparation to adding another member, which is easier in the new structure. The patch contains no functional changes. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
1e67b96fb0
commit
5010b65a08
3 changed files with 26 additions and 21 deletions
|
@ -126,8 +126,8 @@ int Awb::init(IPAContext &context, const YamlObject &tuningData)
|
||||||
int Awb::configure(IPAContext &context,
|
int Awb::configure(IPAContext &context,
|
||||||
const IPACameraSensorInfo &configInfo)
|
const IPACameraSensorInfo &configInfo)
|
||||||
{
|
{
|
||||||
context.activeState.awb.gains.manual = RGB<double>{ 1.0 };
|
context.activeState.awb.manual.gains = RGB<double>{ 1.0 };
|
||||||
context.activeState.awb.gains.automatic =
|
context.activeState.awb.automatic.gains =
|
||||||
awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature);
|
awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature);
|
||||||
context.activeState.awb.autoEnabled = true;
|
context.activeState.awb.autoEnabled = true;
|
||||||
context.activeState.awb.temperatureK = kDefaultColourTemperature;
|
context.activeState.awb.temperatureK = kDefaultColourTemperature;
|
||||||
|
@ -175,8 +175,8 @@ void Awb::queueRequest(IPAContext &context,
|
||||||
const auto &colourTemperature = controls.get(controls::ColourTemperature);
|
const auto &colourTemperature = controls.get(controls::ColourTemperature);
|
||||||
bool update = false;
|
bool update = false;
|
||||||
if (colourGains) {
|
if (colourGains) {
|
||||||
awb.gains.manual.r() = (*colourGains)[0];
|
awb.manual.gains.r() = (*colourGains)[0];
|
||||||
awb.gains.manual.b() = (*colourGains)[1];
|
awb.manual.gains.b() = (*colourGains)[1];
|
||||||
/*
|
/*
|
||||||
* \todo Colour temperature reported in metadata is now
|
* \todo Colour temperature reported in metadata is now
|
||||||
* incorrect, as we can't deduce the temperature from the gains.
|
* incorrect, as we can't deduce the temperature from the gains.
|
||||||
|
@ -185,17 +185,17 @@ void Awb::queueRequest(IPAContext &context,
|
||||||
update = true;
|
update = true;
|
||||||
} else if (colourTemperature) {
|
} else if (colourTemperature) {
|
||||||
const auto &gains = awbAlgo_->gainsFromColourTemperature(*colourTemperature);
|
const auto &gains = awbAlgo_->gainsFromColourTemperature(*colourTemperature);
|
||||||
awb.gains.manual.r() = gains.r();
|
awb.manual.gains.r() = gains.r();
|
||||||
awb.gains.manual.b() = gains.b();
|
awb.manual.gains.b() = gains.b();
|
||||||
awb.temperatureK = *colourTemperature;
|
awb.temperatureK = *colourTemperature;
|
||||||
update = true;
|
update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (update)
|
if (update)
|
||||||
LOG(RkISP1Awb, Debug)
|
LOG(RkISP1Awb, Debug)
|
||||||
<< "Set colour gains to " << awb.gains.manual;
|
<< "Set colour gains to " << awb.manual.gains;
|
||||||
|
|
||||||
frameContext.awb.gains = awb.gains.manual;
|
frameContext.awb.gains = awb.manual.gains;
|
||||||
frameContext.awb.temperatureK = awb.temperatureK;
|
frameContext.awb.temperatureK = awb.temperatureK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,7 +210,7 @@ void Awb::prepare(IPAContext &context, const uint32_t frame,
|
||||||
* most up-to-date automatic values we can read.
|
* most up-to-date automatic values we can read.
|
||||||
*/
|
*/
|
||||||
if (frameContext.awb.autoEnabled) {
|
if (frameContext.awb.autoEnabled) {
|
||||||
frameContext.awb.gains = context.activeState.awb.gains.automatic;
|
frameContext.awb.gains = context.activeState.awb.automatic.gains;
|
||||||
frameContext.awb.temperatureK = context.activeState.awb.temperatureK;
|
frameContext.awb.temperatureK = context.activeState.awb.temperatureK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,14 +332,14 @@ void Awb::process(IPAContext &context,
|
||||||
/* Filter the values to avoid oscillations. */
|
/* Filter the values to avoid oscillations. */
|
||||||
double speed = 0.2;
|
double speed = 0.2;
|
||||||
awbResult.gains = awbResult.gains * speed +
|
awbResult.gains = awbResult.gains * speed +
|
||||||
activeState.awb.gains.automatic * (1 - speed);
|
activeState.awb.automatic.gains * (1 - speed);
|
||||||
|
|
||||||
activeState.awb.gains.automatic = awbResult.gains;
|
activeState.awb.automatic.gains = awbResult.gains;
|
||||||
|
|
||||||
LOG(RkISP1Awb, Debug)
|
LOG(RkISP1Awb, Debug)
|
||||||
<< std::showpoint
|
<< std::showpoint
|
||||||
<< "Means " << rgbMeans << ", gains "
|
<< "Means " << rgbMeans << ", gains "
|
||||||
<< activeState.awb.gains.automatic << ", temp "
|
<< activeState.awb.automatic.gains << ", temp "
|
||||||
<< activeState.awb.temperatureK << "K";
|
<< activeState.awb.temperatureK << "K";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -191,14 +191,17 @@ namespace libcamera::ipa::rkisp1 {
|
||||||
* \var IPAActiveState::awb
|
* \var IPAActiveState::awb
|
||||||
* \brief State for the Automatic White Balance algorithm
|
* \brief State for the Automatic White Balance algorithm
|
||||||
*
|
*
|
||||||
* \struct IPAActiveState::awb.gains
|
* \struct IPAActiveState::awb::AwbState
|
||||||
|
* \brief Struct for the AWB regulation state
|
||||||
|
*
|
||||||
|
* \var IPAActiveState::awb::AwbState.gains
|
||||||
* \brief White balance gains
|
* \brief White balance gains
|
||||||
*
|
*
|
||||||
* \var IPAActiveState::awb.gains.manual
|
* \var IPAActiveState::awb.manual
|
||||||
* \brief Manual white balance gains (set through requests)
|
* \brief Manual regulation state (set through requests)
|
||||||
*
|
*
|
||||||
* \var IPAActiveState::awb.gains.automatic
|
* \var IPAActiveState::awb.automatic
|
||||||
* \brief Automatic white balance gains (computed by the algorithm)
|
* \brief Automatic regulation state (computed by the algorithm)
|
||||||
*
|
*
|
||||||
* \var IPAActiveState::awb.temperatureK
|
* \var IPAActiveState::awb.temperatureK
|
||||||
* \brief Estimated color temperature
|
* \brief Estimated color temperature
|
||||||
|
|
|
@ -89,10 +89,12 @@ struct IPAActiveState {
|
||||||
} agc;
|
} agc;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct {
|
struct AwbState {
|
||||||
RGB<double> manual;
|
RGB<double> gains;
|
||||||
RGB<double> automatic;
|
};
|
||||||
} gains;
|
|
||||||
|
AwbState manual;
|
||||||
|
AwbState automatic;
|
||||||
|
|
||||||
unsigned int temperatureK;
|
unsigned int temperatureK;
|
||||||
bool autoEnabled;
|
bool autoEnabled;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue