@@ -24,7 +24,7 @@ int Awb::configure(IPAContext &context,
[[maybe_unused]] const IPAConfigInfo &configInfo)
{
auto &gains = context.activeState.gains;
- gains.red = gains.green = gains.blue = 256;
+ gains.red = gains.green = gains.blue = 1.0;
return 0;
}
@@ -53,12 +53,11 @@ void Awb::process(IPAContext &context,
/*
* Calculate red and blue gains for AWB.
* Clamp max gain at 4.0, this also avoids 0 division.
- * Gain: 128 = 0.5, 256 = 1.0, 512 = 2.0, etc.
*/
auto &gains = context.activeState.gains;
- gains.red = sumR <= sumG / 4 ? 1024 : 256 * sumG / sumR;
- gains.blue = sumB <= sumG / 4 ? 1024 : 256 * sumG / sumB;
- /* Green gain is fixed to 256 */
+ gains.red = sumR <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumR;
+ gains.blue = sumB <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumB;
+ /* Green gain is fixed to 1.0 */
LOG(IPASoftAwb, Debug) << "gain R/B " << gains.red << "/" << gains.blue;
}
@@ -63,15 +63,18 @@ void Lut::prepare(IPAContext &context,
const unsigned int gammaTableSize = gammaTable.size();
for (unsigned int i = 0; i < DebayerParams::kRGBLookupSize; i++) {
- const unsigned int div = static_cast<double>(DebayerParams::kRGBLookupSize) *
- 256 / gammaTableSize;
+ const double div = static_cast<double>(DebayerParams::kRGBLookupSize) /
+ gammaTableSize;
/* Apply gamma after gain! */
unsigned int idx;
- idx = std::min({ i * gains.red / div, gammaTableSize - 1 });
+ idx = std::min({ static_cast<unsigned int>(i * gains.red / div),
+ gammaTableSize - 1 });
params->red[i] = gammaTable[idx];
- idx = std::min({ i * gains.green / div, gammaTableSize - 1 });
+ idx = std::min({ static_cast<unsigned int>(i * gains.green / div),
+ gammaTableSize - 1 });
params->green[i] = gammaTable[idx];
- idx = std::min({ i * gains.blue / div, gammaTableSize - 1 });
+ idx = std::min({ static_cast<unsigned int>(i * gains.blue / div),
+ gammaTableSize - 1 });
params->blue[i] = gammaTable[idx];
}
}
@@ -26,9 +26,9 @@ struct IPAActiveState {
} blc;
struct {
- unsigned int red;
- unsigned int green;
- unsigned int blue;
+ double red;
+ double green;
+ double blue;
} gains;
static constexpr unsigned int kGammaLookupSize = 1024;