summaryrefslogtreecommitdiff
path: root/src/ipa
diff options
context:
space:
mode:
authorKieran Bingham <kieran.bingham@ideasonboard.com>2022-03-15 16:39:16 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2022-04-09 21:00:47 +0200
commit9366dd6d124b07b60f853ef72930e4ca210fa000 (patch)
treeb8df8d21bf53d739636ddd95c284b05989ce41f0 /src/ipa
parent3067203325a8bd7831e24c71fdc4322cde03c715 (diff)
ipa: ipu3: af: Remove redundant memcpy
The af statistics can be accessed directly from the mapped buffer. Remove the redundant memcpy, and simplify the call to afEstimateVariance(). Reviewed-by: Laurent Pinchart <laurent.pinchart@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> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa')
-rw-r--r--src/ipa/ipu3/algorithms/af.cpp12
-rw-r--r--src/ipa/ipu3/algorithms/af.h2
2 files changed, 5 insertions, 9 deletions
diff --git a/src/ipa/ipu3/algorithms/af.cpp b/src/ipa/ipu3/algorithms/af.cpp
index b96078f5..aae191ec 100644
--- a/src/ipa/ipu3/algorithms/af.cpp
+++ b/src/ipa/ipu3/algorithms/af.cpp
@@ -354,7 +354,7 @@ void Af::afIgnoreFrameReset()
*
* \return The variance of the values in the data set \a y_item selected by \a isY1
*/
-double Af::afEstimateVariance(y_table_item_t *y_item, uint32_t len,
+double Af::afEstimateVariance(const y_table_item_t *y_item, uint32_t len,
bool isY1)
{
uint32_t z = 0;
@@ -424,25 +424,21 @@ bool Af::afIsOutOfFocus(IPAContext context)
*/
void Af::process(IPAContext &context, const ipu3_uapi_stats_3a *stats)
{
- y_table_item_t y_item[IPU3_UAPI_AF_Y_TABLE_MAX_SIZE / sizeof(y_table_item_t)];
+ 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;
- memcpy(y_item, stats->af_raw_buffer.y_table,
- afRawBufferLen * sizeof(y_table_item_t));
+ ASSERT(afRawBufferLen < IPU3_UAPI_AF_Y_TABLE_MAX_SIZE);
/*
* Calculate the mean and the variance of AF statistics for a given grid.
* For coarse: y1 are used.
* For fine: y2 results are used.
*/
- if (coarseCompleted_)
- currentVariance_ = afEstimateVariance(y_item, afRawBufferLen, false);
- else
- currentVariance_ = afEstimateVariance(y_item, afRawBufferLen, true);
+ currentVariance_ = afEstimateVariance(y_item, afRawBufferLen, !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 906f2843..3b5758e8 100644
--- a/src/ipa/ipu3/algorithms/af.h
+++ b/src/ipa/ipu3/algorithms/af.h
@@ -41,7 +41,7 @@ private:
void afReset(IPAContext &context);
bool afNeedIgnoreFrame();
void afIgnoreFrameReset();
- double afEstimateVariance(y_table_item_t *y_item, uint32_t len,
+ double afEstimateVariance(const y_table_item_t *y_item, uint32_t len,
bool isY1);
bool afIsOutOfFocus(IPAContext context);