Commit af5b19db91 for ffmpeg
commit af5b19db918b483feb1956261895080b8c89d40f
Author: Ramiro Polla <ramiro.polla@gmail.com>
Date: Mon Nov 9 17:27:22 2026 +0100
swscale/tests/sws_ops_aarch64: enumerate op lists for all relevant flags
The aarch64 backend failed to set up conversions to 12-, 14- and 16-bit
formats with SWS_ACCURATE_RND, such as rgb24 -> yuv444p16le and
gray -> gbrp12le. With SWS_ACCURATE_RND, a 1x1 dither is added before
converting from float to integer, which becomes SWS_UOP_ADD. But the
aarch64 kernel list was only generated from the op lists for the
default flags, so even though SWS_UOP_ADD was added in the previous
commit, its entries were not being generated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Ramiro Polla <ramiro.polla@gmail.com>
diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c
index c2487e5a0c..7005e269b1 100644
--- a/libswscale/aarch64/ops_entries.c
+++ b/libswscale/aarch64/ops_entries.c
@@ -245,6 +245,14 @@ ENTRY(ff_sws_scale_16_u8_0001_neon, { .uop = SWS_UOP_SCALE,
ENTRY(ff_sws_scale_16_u8_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 })
ENTRY(ff_sws_scale_16_u16_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 })
ENTRY(ff_sws_scale_16_u16_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 })
+ENTRY(ff_sws_add_8_f32_0001_neon, { .uop = SWS_UOP_ADD, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 })
+ENTRY(ff_sws_add_8_f32_0011_neon, { .uop = SWS_UOP_ADD, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 })
+ENTRY(ff_sws_add_8_f32_0101_neon, { .uop = SWS_UOP_ADD, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x5 })
+ENTRY(ff_sws_add_8_f32_0111_neon, { .uop = SWS_UOP_ADD, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 })
+ENTRY(ff_sws_add_8_f32_1000_neon, { .uop = SWS_UOP_ADD, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 })
+ENTRY(ff_sws_add_8_f32_1001_neon, { .uop = SWS_UOP_ADD, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 })
+ENTRY(ff_sws_add_8_f32_1110_neon, { .uop = SWS_UOP_ADD, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe })
+ENTRY(ff_sws_add_8_f32_1111_neon, { .uop = SWS_UOP_ADD, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf })
ENTRY(ff_sws_min_8_f32_0001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 })
ENTRY(ff_sws_min_8_f32_0010_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 })
ENTRY(ff_sws_min_8_f32_0011_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 })
diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c
index 97bc2c37e5..303dc6d6cf 100644
--- a/libswscale/tests/sws_ops_aarch64.c
+++ b/libswscale/tests/sws_ops_aarch64.c
@@ -474,8 +474,19 @@ int main(int argc, char *argv[])
graph->ctx = ctx;
ctx->opaque = &root;
- ret = ff_sws_enum_op_lists(ctx, graph, NULL, AV_PIX_FMT_NONE, AV_PIX_FMT_NONE,
- register_op);
+ static const SwsFlags flags_list[] = {
+ 0,
+ SWS_ACCURATE_RND, /* may insert extra 1x1 dither ops (for accurate rounding) */
+ SWS_BITEXACT, /* prevents some FMA optimizations */
+ SWS_ACCURATE_RND | SWS_BITEXACT,
+ };
+ for (int i = 0; i < FF_ARRAY_ELEMS(flags_list); i++) {
+ ctx->flags = flags_list[i];
+ ret = ff_sws_enum_op_lists(ctx, graph, NULL, AV_PIX_FMT_NONE,
+ AV_PIX_FMT_NONE, register_op);
+ if (ret < 0)
+ break;
+ }
/**
* Generate a C file with all the unique function parameter entries
diff --git a/tests/ref/fate/sws-coverage-aarch64-neon b/tests/ref/fate/sws-coverage-aarch64-neon
index 2a6d735e50..18319477c3 100644
--- a/tests/ref/fate/sws-coverage-aarch64-neon
+++ b/tests/ref/fate/sws-coverage-aarch64-neon
@@ -1 +1 @@
-3e084cc8f6cb0d5f41c51f80322237ec 59628/69696
+add63e9e646ddbbf0975f345fd27108c 69696/69696