Index: unit_test/unit_test.h |
diff --git a/unit_test/unit_test.h b/unit_test/unit_test.h |
index 009ff62abf682218f4ecf7bed49e2d3d4435a87f..ae9c9c20b80bf0b92b62e1a85777e2e43d4a81ce 100644 |
--- a/unit_test/unit_test.h |
+++ b/unit_test/unit_test.h |
@@ -28,6 +28,32 @@ static __inline int Abs(int v) { |
#define OFFBY 0 |
+// Scaling uses 16.16 fixed point to step thru the source image, so a |
+// maximum size of 32767.999 can be expressed. 32768 is valid because |
+// the step is 1 beyond the image but not used. |
+// Destination size is mainly constrained by valid scale step not the |
+// absolute size, so it may be possible to relax the destination size |
+// constraint. |
+// Source size is unconstrained for most specialized scalers. e.g. |
+// An image of 65536 scaled to half size would be valid. The test |
+// could be relaxed for special scale factors. |
+// If this test is removed, the scaling function should gracefully |
+// fail with a return code. The test could be changed to know that |
+// libyuv failed in a controlled way. |
+ |
+static const int kMaxWidth = 32768; |
+static const int kMaxHeight = 32768; |
+ |
+static inline bool SizeValid(int src_width, int src_height, |
+ int dst_width, int dst_height) { |
+ if (src_width > kMaxWidth || src_height > kMaxHeight || |
+ dst_width > kMaxWidth || dst_height > kMaxHeight) { |
+ printf("Warning - size too large to test. Skipping\n"); |
+ return false; |
+ } |
+ return true; |
+} |
+ |
#define align_buffer_page_end(var, size) \ |
uint8* var; \ |
uint8* var##_mem; \ |