[FFmpeg-devel] [PATCH 2/2] checkasm: sw_scale: Reduce range of test data in the yuv2yuvX test to get closer to real data

Martin Storsjö martin at martin.st
Wed Aug 17 23:31:47 EEST 2022


This avoids overflows on some inputs in the x86 case, where the
assembly version would clip/overflow differently from the
C reference function.

This doesn't seem to be a real issue with actual input data, but
only with the previous fully random input data.

This also makes the test produce a bit more realistic output pixel
values, instead of having essentially all pixels clipped to either
0 or 255.

Signed-off-by: Martin Storsjö <martin at martin.st>
---
 tests/checkasm/sw_scale.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tests/checkasm/sw_scale.c b/tests/checkasm/sw_scale.c
index d72506ed86..89403da317 100644
--- a/tests/checkasm/sw_scale.c
+++ b/tests/checkasm/sw_scale.c
@@ -187,8 +187,16 @@ static void check_yuv2yuvX(int accurate)
     } *vFilterData;
     uint8_t d_val = rnd();
     memset(dither, d_val, LARGEST_INPUT_SIZE);
+
     randomize_buffers((uint8_t*)src_pixels, LARGEST_FILTER * LARGEST_INPUT_SIZE * sizeof(int16_t));
     randomize_buffers((uint8_t*)filter_coeff, LARGEST_FILTER * sizeof(int16_t));
+    // Limit the range of the filter coefficients and intermediate
+    // pixel values, to avoid risk of clipping filter intermediates on x86.
+    for (i = 0; i < LARGEST_FILTER; i++)
+        filter_coeff[i] >>= 2;
+    for (i = 0; i < LARGEST_FILTER * LARGEST_INPUT_SIZE; i++)
+        src_pixels[i] >>= 2;
+
     ctx = sws_alloc_context();
     if (accurate)
         ctx->flags |= SWS_ACCURATE_RND;
-- 
2.25.1



More information about the ffmpeg-devel mailing list