ipa: ipu3: agc: Rename currentYGain
The "current" prefix in the currentYGain variable name is confusing: - In Agc::estimateLuminance(), the variable contains the gain to be applied to the image, which is neither a "current" gain nor a "Y" gain. Rename it to "gain". - In Agc::computeExposure(), the variable contains the gain computed by the relative luminance method, so rename it to "yGain". While at it, rename variables to match the libcamera coding style. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
8d9b39f8ad
commit
6e02f67457
2 changed files with 18 additions and 18 deletions
|
@ -173,9 +173,9 @@ void Agc::filterExposure()
|
||||||
/**
|
/**
|
||||||
* \brief Estimate the new exposure and gain values
|
* \brief Estimate the new exposure and gain values
|
||||||
* \param[inout] frameContext The shared IPA frame Context
|
* \param[inout] frameContext The shared IPA frame Context
|
||||||
* \param[in] currentYGain The gain calculated on the current brightness level
|
* \param[in] yGain The gain calculated based on the relative luminance target
|
||||||
*/
|
*/
|
||||||
void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain)
|
void Agc::computeExposure(IPAFrameContext &frameContext, double yGain)
|
||||||
{
|
{
|
||||||
/* Get the effective exposure and gain applied on the sensor. */
|
/* Get the effective exposure and gain applied on the sensor. */
|
||||||
uint32_t exposure = frameContext.sensor.exposure;
|
uint32_t exposure = frameContext.sensor.exposure;
|
||||||
|
@ -189,8 +189,8 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain)
|
||||||
*/
|
*/
|
||||||
double evGain = kEvGainTarget * knumHistogramBins / iqMean_;
|
double evGain = kEvGainTarget * knumHistogramBins / iqMean_;
|
||||||
|
|
||||||
if (evGain < currentYGain)
|
if (evGain < yGain)
|
||||||
evGain = currentYGain;
|
evGain = yGain;
|
||||||
|
|
||||||
/* Consider within 1% of the target as correctly exposed */
|
/* Consider within 1% of the target as correctly exposed */
|
||||||
if (std::abs(evGain - 1.0) < 0.01)
|
if (std::abs(evGain - 1.0) < 0.01)
|
||||||
|
@ -254,7 +254,7 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain)
|
||||||
* \param[in] frameContext The shared IPA frame context
|
* \param[in] frameContext The shared IPA frame context
|
||||||
* \param[in] grid The grid used to store the statistics in the IPU3
|
* \param[in] grid The grid used to store the statistics in the IPU3
|
||||||
* \param[in] stats The IPU3 statistics and ISP results
|
* \param[in] stats The IPU3 statistics and ISP results
|
||||||
* \param[in] currentYGain The gain calculated on the current brightness level
|
* \param[in] gain The gain to apply to the frame
|
||||||
* \return The relative luminance
|
* \return The relative luminance
|
||||||
*
|
*
|
||||||
* Luma is the weighted sum of gamma-compressed R′G′B′ components of a color
|
* Luma is the weighted sum of gamma-compressed R′G′B′ components of a color
|
||||||
|
@ -268,7 +268,7 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain)
|
||||||
double Agc::estimateLuminance(IPAFrameContext &frameContext,
|
double Agc::estimateLuminance(IPAFrameContext &frameContext,
|
||||||
const ipu3_uapi_grid_config &grid,
|
const ipu3_uapi_grid_config &grid,
|
||||||
const ipu3_uapi_stats_3a *stats,
|
const ipu3_uapi_stats_3a *stats,
|
||||||
double currentYGain)
|
double gain)
|
||||||
{
|
{
|
||||||
double redSum = 0, greenSum = 0, blueSum = 0;
|
double redSum = 0, greenSum = 0, blueSum = 0;
|
||||||
|
|
||||||
|
@ -281,9 +281,9 @@ double Agc::estimateLuminance(IPAFrameContext &frameContext,
|
||||||
&stats->awb_raw_buffer.meta_data[cellPosition]
|
&stats->awb_raw_buffer.meta_data[cellPosition]
|
||||||
);
|
);
|
||||||
|
|
||||||
redSum += cell->R_avg * currentYGain;
|
redSum += cell->R_avg * gain;
|
||||||
greenSum += (cell->Gr_avg + cell->Gb_avg) / 2 * currentYGain;
|
greenSum += (cell->Gr_avg + cell->Gb_avg) / 2 * gain;
|
||||||
blueSum += cell->B_avg * currentYGain;
|
blueSum += cell->B_avg * gain;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,7 +310,7 @@ void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats)
|
||||||
{
|
{
|
||||||
measureBrightness(stats, context.configuration.grid.bdsGrid);
|
measureBrightness(stats, context.configuration.grid.bdsGrid);
|
||||||
|
|
||||||
double currentYGain = 1.0;
|
double yGain = 1.0;
|
||||||
double yTarget = kRelativeLuminanceTarget;
|
double yTarget = kRelativeLuminanceTarget;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -320,18 +320,18 @@ void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats)
|
||||||
for (unsigned int i = 0; i < 8; i++) {
|
for (unsigned int i = 0; i < 8; i++) {
|
||||||
double yValue = estimateLuminance(context.frameContext,
|
double yValue = estimateLuminance(context.frameContext,
|
||||||
context.configuration.grid.bdsGrid,
|
context.configuration.grid.bdsGrid,
|
||||||
stats, currentYGain);
|
stats, yGain);
|
||||||
double extra_gain = std::min(10.0, yTarget / (yValue + .001));
|
double extraGain = std::min(10.0, yTarget / (yValue + .001));
|
||||||
|
|
||||||
currentYGain *= extra_gain;
|
yGain *= extraGain;
|
||||||
LOG(IPU3Agc, Debug) << "Y value: " << yValue
|
LOG(IPU3Agc, Debug) << "Y value: " << yValue
|
||||||
<< ", Y target: " << yTarget
|
<< ", Y target: " << yTarget
|
||||||
<< ", gives gain " << currentYGain;
|
<< ", gives gain " << yGain;
|
||||||
if (extra_gain < 1.01)
|
if (extraGain < 1.01)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
computeExposure(context.frameContext, currentYGain);
|
computeExposure(context.frameContext, yGain);
|
||||||
frameCount_++;
|
frameCount_++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,11 +34,11 @@ private:
|
||||||
void measureBrightness(const ipu3_uapi_stats_3a *stats,
|
void measureBrightness(const ipu3_uapi_stats_3a *stats,
|
||||||
const ipu3_uapi_grid_config &grid);
|
const ipu3_uapi_grid_config &grid);
|
||||||
void filterExposure();
|
void filterExposure();
|
||||||
void computeExposure(IPAFrameContext &frameContext, double currentYGain);
|
void computeExposure(IPAFrameContext &frameContext, double yGain);
|
||||||
double estimateLuminance(IPAFrameContext &frameContext,
|
double estimateLuminance(IPAFrameContext &frameContext,
|
||||||
const ipu3_uapi_grid_config &grid,
|
const ipu3_uapi_grid_config &grid,
|
||||||
const ipu3_uapi_stats_3a *stats,
|
const ipu3_uapi_stats_3a *stats,
|
||||||
double currentYGain);
|
double gain);
|
||||||
|
|
||||||
uint64_t frameCount_;
|
uint64_t frameCount_;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue