ipa: ipu3: af: Use Span for y_table_item_t
Convert the y_table_item_t to a Span and use that for iteration when estimating variance of the table. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Tested-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Tested-by: Kate Hsuan <hpa@redhat.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
9366dd6d12
commit
2f7a52df95
2 changed files with 22 additions and 22 deletions
|
@ -354,29 +354,29 @@ void Af::afIgnoreFrameReset()
|
||||||
*
|
*
|
||||||
* \return The variance of the values in the data set \a y_item selected by \a isY1
|
* \return The variance of the values in the data set \a y_item selected by \a isY1
|
||||||
*/
|
*/
|
||||||
double Af::afEstimateVariance(const y_table_item_t *y_item, uint32_t len,
|
double Af::afEstimateVariance(Span<const y_table_item_t> y_items, bool isY1)
|
||||||
bool isY1)
|
|
||||||
{
|
{
|
||||||
uint32_t z = 0;
|
|
||||||
uint32_t total = 0;
|
uint32_t total = 0;
|
||||||
double mean;
|
double mean;
|
||||||
double var_sum = 0;
|
double var_sum = 0;
|
||||||
|
|
||||||
for (z = 0; z < len; z++) {
|
for (auto y : y_items) {
|
||||||
if (isY1)
|
if (isY1)
|
||||||
total += y_item[z].y1_avg;
|
total += y.y1_avg;
|
||||||
else
|
else
|
||||||
total += y_item[z].y2_avg;
|
total += y.y2_avg;
|
||||||
}
|
|
||||||
mean = total / len;
|
|
||||||
for (z = 0; z < len; z++) {
|
|
||||||
if (isY1)
|
|
||||||
var_sum += pow((y_item[z].y1_avg - mean), 2);
|
|
||||||
else
|
|
||||||
var_sum += pow((y_item[z].y2_avg - mean), 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return var_sum / static_cast<double>(len);
|
mean = total / y_items.size();
|
||||||
|
|
||||||
|
for (auto y : y_items) {
|
||||||
|
if (isY1)
|
||||||
|
var_sum += pow(y.y1_avg - mean, 2);
|
||||||
|
else
|
||||||
|
var_sum += pow(y.y2_avg - mean, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return var_sum / y_items.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -424,21 +424,21 @@ bool Af::afIsOutOfFocus(IPAContext context)
|
||||||
*/
|
*/
|
||||||
void Af::process(IPAContext &context, const ipu3_uapi_stats_3a *stats)
|
void Af::process(IPAContext &context, const ipu3_uapi_stats_3a *stats)
|
||||||
{
|
{
|
||||||
const y_table_item_t *y_item = reinterpret_cast<const y_table_item_t *>(&stats->af_raw_buffer.y_table);
|
|
||||||
uint32_t afRawBufferLen;
|
|
||||||
|
|
||||||
/* Evaluate the AF buffer length */
|
/* Evaluate the AF buffer length */
|
||||||
afRawBufferLen = context.configuration.af.afGrid.width *
|
uint32_t afRawBufferLen = context.configuration.af.afGrid.width *
|
||||||
context.configuration.af.afGrid.height;
|
context.configuration.af.afGrid.height;
|
||||||
|
|
||||||
ASSERT(afRawBufferLen < IPU3_UAPI_AF_Y_TABLE_MAX_SIZE);
|
ASSERT(afRawBufferLen < IPU3_UAPI_AF_Y_TABLE_MAX_SIZE);
|
||||||
|
|
||||||
|
Span<const y_table_item_t> y_items(reinterpret_cast<const y_table_item_t *>(&stats->af_raw_buffer.y_table),
|
||||||
|
afRawBufferLen);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calculate the mean and the variance of AF statistics for a given grid.
|
* Calculate the mean and the variance of AF statistics for a given grid.
|
||||||
* For coarse: y1 are used.
|
* For coarse: y1 are used.
|
||||||
* For fine: y2 results are used.
|
* For fine: y2 results are used.
|
||||||
*/
|
*/
|
||||||
currentVariance_ = afEstimateVariance(y_item, afRawBufferLen, !coarseCompleted_);
|
currentVariance_ = afEstimateVariance(y_items, !coarseCompleted_);
|
||||||
|
|
||||||
if (!context.frameContext.af.stable) {
|
if (!context.frameContext.af.stable) {
|
||||||
afCoarseScan(context);
|
afCoarseScan(context);
|
||||||
|
|
|
@ -41,8 +41,8 @@ private:
|
||||||
void afReset(IPAContext &context);
|
void afReset(IPAContext &context);
|
||||||
bool afNeedIgnoreFrame();
|
bool afNeedIgnoreFrame();
|
||||||
void afIgnoreFrameReset();
|
void afIgnoreFrameReset();
|
||||||
double afEstimateVariance(const y_table_item_t *y_item, uint32_t len,
|
double afEstimateVariance(Span<const y_table_item_t> y_items, bool isY1);
|
||||||
bool isY1);
|
|
||||||
bool afIsOutOfFocus(IPAContext context);
|
bool afIsOutOfFocus(IPAContext context);
|
||||||
|
|
||||||
/* VCM step configuration. It is the current setting of the VCM step. */
|
/* VCM step configuration. It is the current setting of the VCM step. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue