From 2f7a52df95e64679c4d0f1b009ed354bbd067c5b Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Wed, 23 Mar 2022 13:19:14 +0000 Subject: 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 Reviewed-by: Jean-Michel Hautbois Tested-by: Jean-Michel Hautbois Tested-by: Kate Hsuan Reviewed-by: Laurent Pinchart --- src/ipa/ipu3/algorithms/af.cpp | 34 +++++++++++++++++----------------- src/ipa/ipu3/algorithms/af.h | 4 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) (limited to 'src/ipa/ipu3') diff --git a/src/ipa/ipu3/algorithms/af.cpp b/src/ipa/ipu3/algorithms/af.cpp index aae191ec..f243aceb 100644 --- a/src/ipa/ipu3/algorithms/af.cpp +++ b/src/ipa/ipu3/algorithms/af.cpp @@ -354,29 +354,29 @@ void Af::afIgnoreFrameReset() * * \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, - bool isY1) +double Af::afEstimateVariance(Span y_items, bool isY1) { - uint32_t z = 0; uint32_t total = 0; double mean; double var_sum = 0; - for (z = 0; z < len; z++) { + for (auto y : y_items) { if (isY1) - total += y_item[z].y1_avg; + total += y.y1_avg; else - total += y_item[z].y2_avg; + total += y.y2_avg; } - mean = total / len; - for (z = 0; z < len; z++) { + + mean = total / y_items.size(); + + for (auto y : y_items) { if (isY1) - var_sum += pow((y_item[z].y1_avg - mean), 2); + var_sum += pow(y.y1_avg - mean, 2); else - var_sum += pow((y_item[z].y2_avg - mean), 2); + var_sum += pow(y.y2_avg - mean, 2); } - return var_sum / static_cast(len); + 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) { - const y_table_item_t *y_item = reinterpret_cast(&stats->af_raw_buffer.y_table); - uint32_t afRawBufferLen; - /* Evaluate the AF buffer length */ - afRawBufferLen = context.configuration.af.afGrid.width * - context.configuration.af.afGrid.height; + uint32_t afRawBufferLen = context.configuration.af.afGrid.width * + context.configuration.af.afGrid.height; ASSERT(afRawBufferLen < IPU3_UAPI_AF_Y_TABLE_MAX_SIZE); + Span y_items(reinterpret_cast(&stats->af_raw_buffer.y_table), + afRawBufferLen); + /* * Calculate the mean and the variance of AF statistics for a given grid. * For coarse: y1 are used. * For fine: y2 results are used. */ - currentVariance_ = afEstimateVariance(y_item, afRawBufferLen, !coarseCompleted_); + currentVariance_ = afEstimateVariance(y_items, !coarseCompleted_); if (!context.frameContext.af.stable) { afCoarseScan(context); diff --git a/src/ipa/ipu3/algorithms/af.h b/src/ipa/ipu3/algorithms/af.h index 3b5758e8..b85cf941 100644 --- a/src/ipa/ipu3/algorithms/af.h +++ b/src/ipa/ipu3/algorithms/af.h @@ -41,8 +41,8 @@ private: void afReset(IPAContext &context); bool afNeedIgnoreFrame(); void afIgnoreFrameReset(); - double afEstimateVariance(const y_table_item_t *y_item, uint32_t len, - bool isY1); + double afEstimateVariance(Span y_items, bool isY1); + bool afIsOutOfFocus(IPAContext context); /* VCM step configuration. It is the current setting of the VCM step. */ -- cgit v1.2.1