[libcamera-devel] [PATCH v2] ipa: ipu3: af: enforce grid size restrictions

Kieran Bingham kieran.bingham at ideasonboard.com
Fri Apr 8 01:14:14 CEST 2022


Provide enforcement of the selection of the block_{width,height}_log2
parameters to the capabilities of the hardware.

While this selection is currently hardcoded to the minimum, providing
the restriction now allows for further dynamic sizing in the future and
documents the restrictions directly in code, making use of the already
existing constants.

Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
---
v2:
 - Finally actually fixed the clang compiler by also adding the
   kAfMaxGrid{Width,Height} constants too.


 src/ipa/ipu3/algorithms/af.cpp | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/ipa/ipu3/algorithms/af.cpp b/src/ipa/ipu3/algorithms/af.cpp
index 0170a3728892..a33c229aabea 100644
--- a/src/ipa/ipu3/algorithms/af.cpp
+++ b/src/ipa/ipu3/algorithms/af.cpp
@@ -168,6 +168,25 @@ int Af::configure(IPAContext &context, const IPAConfigInfo &configInfo)
 	grid.height = kAfMinGridHeight;
 	grid.block_width_log2 = kAfMinGridBlockWidth;
 	grid.block_height_log2 = kAfMinGridBlockHeight;
+
+	/*
+	 * \todo - while this clamping code is effectively a no-op, it satisfies
+	 * the compiler that the constant definitions of the hardware limits
+	 * are used, and paves the way to support dynamic grid sizing in the
+	 * future. While the block_{width,height}_log2 remain assigned to the
+	 * minimum, this code should be optimized out by the compiler.
+	 */
+	grid.width = std::clamp(grid.width, kAfMinGridWidth, kAfMaxGridWidth);
+	grid.height = std::clamp(grid.height, kAfMinGridHeight, kAfMaxGridHeight);
+
+	grid.block_width_log2 = std::clamp(grid.block_width_log2,
+					   kAfMinGridBlockWidth,
+					   kAfMaxGridBlockWidth);
+
+	grid.block_height_log2 = std::clamp(grid.block_height_log2,
+					    kAfMinGridBlockHeight,
+					    kAfMaxGridBlockHeight);
+
 	grid.height_per_slice = kAfDefaultHeightPerSlice;
 
 	/* x_start and y start are default to BDS center */
-- 
2.25.1



More information about the libcamera-devel mailing list