diff options
author | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2022-03-23 13:19:14 +0000 |
---|---|---|
committer | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2022-04-09 21:00:47 +0200 |
commit | 2f7a52df95e64679c4d0f1b009ed354bbd067c5b (patch) | |
tree | 714b5a3bc8a1dcc95b0f7d9bdd329c50b1d7c94b | |
parent | 9366dd6d124b07b60f853ef72930e4ca210fa000 (diff) |
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>
-rw-r--r-- | src/ipa/ipu3/algorithms/af.cpp | 34 | ||||
-rw-r--r-- | src/ipa/ipu3/algorithms/af.h | 4 |
2 files changed, 19 insertions, 19 deletions
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<const y_table_item_t> 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<double>(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<const y_table_item_t *>(&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<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. * 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<const y_table_item_t> y_items, bool isY1); + bool afIsOutOfFocus(IPAContext context); /* VCM step configuration. It is the current setting of the VCM step. */ |