diff mbox series

[FFmpeg-devel,v2,1/2] checkasm: added additional dstW tests for hscale

Message ID 36fdb39238cf499c815f9c2704381656@EX13D07UWB004.ant.amazon.com
State Superseded
Headers show
Series checkasm: added additional dstW tests for hscale | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Swinney, Jonathan May 25, 2022, 1:21 a.m. UTC
Signed-off-by: Jonathan Swinney <jswinney@amazon.com>
---
 tests/checkasm/sw_scale.c | 38 ++++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

Comments

Martin Storsjö May 25, 2022, 8:25 a.m. UTC | #1
On Wed, 25 May 2022, Swinney, Jonathan wrote:

> Signed-off-by: Jonathan Swinney <jswinney@amazon.com>
> ---
> tests/checkasm/sw_scale.c | 38 ++++++++++++++++++++++----------------
> 1 file changed, 22 insertions(+), 16 deletions(-)
>
> diff --git a/tests/checkasm/sw_scale.c b/tests/checkasm/sw_scale.c
> index 3c0a083b42..6c223c48f9 100644
> --- a/tests/checkasm/sw_scale.c
> +++ b/tests/checkasm/sw_scale.c
> @@ -148,7 +148,11 @@ static void check_hscale(void)
>         { 8, 18 },
>     };
>
> -    int i, j, fsi, hpi, width;
> +#define LARGEST_INPUT_SIZE 512
> +#define INPUT_SIZES 6
> +    static const int input_sizes[INPUT_SIZES] = {8, 24, 128, 144, 256, 512};
> +

While these are all nice even values, would it make sense to test things 
with uneven sizes too?


This patch does seem good to me, however it does break the checkasm test 
on x86. Offhand I don't know where it differs between how swscale is used 
in reality (where I presume it does work just fine) and how it's set up in 
checkasm.

// Martin
diff mbox series

Patch

diff --git a/tests/checkasm/sw_scale.c b/tests/checkasm/sw_scale.c
index 3c0a083b42..6c223c48f9 100644
--- a/tests/checkasm/sw_scale.c
+++ b/tests/checkasm/sw_scale.c
@@ -148,7 +148,11 @@  static void check_hscale(void)
         { 8, 18 },
     };
 
-    int i, j, fsi, hpi, width;
+#define LARGEST_INPUT_SIZE 512
+#define INPUT_SIZES 6
+    static const int input_sizes[INPUT_SIZES] = {8, 24, 128, 144, 256, 512};
+
+    int i, j, fsi, hpi, width, dstWi;
     struct SwsContext *ctx;
 
     // padded
@@ -183,7 +187,6 @@  static void check_hscale(void)
             ctx->srcBpc = hscale_pairs[hpi][0];
             ctx->dstBpc = hscale_pairs[hpi][1];
             ctx->hLumFilterSize = ctx->hChrFilterSize = width;
-            ctx->dstW = ctx->chrDstW = SRC_PIXELS;
 
             for (i = 0; i < SRC_PIXELS; i++) {
                 filterPos[i] = i;
@@ -215,20 +218,23 @@  static void check_hscale(void)
 
                 filter[SRC_PIXELS * width + i] = rnd();
             }
-            ff_sws_init_scale(ctx);
-            memcpy(filterAvx2, filter, sizeof(uint16_t) * (SRC_PIXELS * MAX_FILTER_WIDTH + MAX_FILTER_WIDTH));
-            if ((cpu_flags & AV_CPU_FLAG_AVX2) && !(cpu_flags & AV_CPU_FLAG_SLOW_GATHER))
-                ff_shuffle_filter_coefficients(ctx, filterPosAvx, width, filterAvx2, SRC_PIXELS);
-
-            if (check_func(ctx->hcScale, "hscale_%d_to_%d_width%d", ctx->srcBpc, ctx->dstBpc + 1, width)) {
-                memset(dst0, 0, SRC_PIXELS * sizeof(dst0[0]));
-                memset(dst1, 0, SRC_PIXELS * sizeof(dst1[0]));
-
-                call_ref(NULL, dst0, SRC_PIXELS, src, filter, filterPos, width);
-                call_new(NULL, dst1, SRC_PIXELS, src, filterAvx2, filterPosAvx, width);
-                if (memcmp(dst0, dst1, SRC_PIXELS * sizeof(dst0[0])))
-                    fail();
-                bench_new(NULL, dst0, SRC_PIXELS, src, filter, filterPosAvx, width);
+            for (dstWi = 0; dstWi < INPUT_SIZES; dstWi++) {
+                ctx->dstW = ctx->chrDstW = input_sizes[dstWi];
+                ff_sws_init_scale(ctx);
+                memcpy(filterAvx2, filter, sizeof(uint16_t) * (SRC_PIXELS * MAX_FILTER_WIDTH + MAX_FILTER_WIDTH));
+                if ((cpu_flags & AV_CPU_FLAG_AVX2) && !(cpu_flags & AV_CPU_FLAG_SLOW_GATHER))
+                    ff_shuffle_filter_coefficients(ctx, filterPosAvx, width, filterAvx2, SRC_PIXELS);
+
+                if (check_func(ctx->hcScale, "hscale_%d_to_%d__fs_%d_dstW_%d", ctx->srcBpc, ctx->dstBpc + 1, width, ctx->dstW)) {
+                    memset(dst0, 0, SRC_PIXELS * sizeof(dst0[0]));
+                    memset(dst1, 0, SRC_PIXELS * sizeof(dst1[0]));
+
+                    call_ref(NULL, dst0, ctx->dstW, src, filter, filterPos, width);
+                    call_new(NULL, dst1, ctx->dstW, src, filterAvx2, filterPosAvx, width);
+                    if (memcmp(dst0, dst1, ctx->dstW * sizeof(dst0[0])))
+                        fail();
+                    bench_new(NULL, dst0, ctx->dstW, src, filter, filterPosAvx, width);
+                }
             }
         }
     }