This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit e45e0e708420294995a67f2013b5a64218f1436d Author: Ramiro Polla <[email protected]> AuthorDate: Wed Jun 17 17:50:54 2026 +0200 Commit: Ramiro Polla <[email protected]> CommitDate: Sun Jul 19 15:07:03 2026 +0200 swscale/aarch64/ops: use SwsPackUOp for SwsAArch64OpImplParams.pack This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 14 ++++----- libswscale/aarch64/ops_entries.c | 60 +++++++++++++++++++------------------- libswscale/aarch64/ops_impl.h | 2 +- libswscale/aarch64/ops_impl_conv.c | 12 +++----- libswscale/tests/sws_ops_aarch64.c | 23 +++++++++++---- 5 files changed, 60 insertions(+), 51 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 89f9c542e1..006794a882 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -665,16 +665,16 @@ static void asmgen_op_unpack(SwsAArch64Context *s, const SwsAArch64OpImplParams uint8_t cur_vt = 0; const int offsets[4] = { - MASK_GET(p->pack, 3) + MASK_GET(p->pack, 2) + MASK_GET(p->pack, 1), - MASK_GET(p->pack, 3) + MASK_GET(p->pack, 2), - MASK_GET(p->pack, 3), + p->pack.pattern[3] + p->pack.pattern[2] + p->pack.pattern[1], + p->pack.pattern[3] + p->pack.pattern[2], + p->pack.pattern[3], 0 }; /* Generate masks. */ rasm_add_comment(r, "generate masks"); LOOP_MASK(p, i) { - uint32_t val = (1u << MASK_GET(p->pack, i)) - 1; + uint32_t val = (1u << p->pack.pattern[i]) - 1; for (int j = 0; j < 4; j++) { if (mask_val[j] == val) { mask_val[i] = mask_val[j]; @@ -732,9 +732,9 @@ static void asmgen_op_pack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p RasmOp *vh = s->vh; const int offsets[4] = { - MASK_GET(p->pack, 3) + MASK_GET(p->pack, 2) + MASK_GET(p->pack, 1), - MASK_GET(p->pack, 3) + MASK_GET(p->pack, 2), - MASK_GET(p->pack, 3), + p->pack.pattern[3] + p->pack.pattern[2] + p->pack.pattern[1], + p->pack.pattern[3] + p->pack.pattern[2], + p->pack.pattern[3], 0 }; uint16_t offset_mask = 0; diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 0260f080f3..1a3dd57540 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -253,36 +253,36 @@ ENTRY(ff_sws_max_8_f32_0011_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = ENTRY(ff_sws_max_8_f32_0111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) ENTRY(ff_sws_max_8_f32_1001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) ENTRY(ff_sws_max_8_f32_1111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0121, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0121, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0233, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0233, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0332, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0332, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0444, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0444, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0555, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0555, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0565, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0565, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0100 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0121, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0121, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0233, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0233, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0332, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0332, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0444, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0444, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0555, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0555, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0565, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0565, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0100 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 96c0510a7f..c15135668d 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -62,7 +62,7 @@ typedef struct SwsAArch64OpImplParams { SwsShiftUOp shift; SwsClearUOp clear; SwsMoveUOp move; - SwsAArch64OpMask pack; + SwsPackUOp pack; SwsAArch64LinearOp linear; SwsAArch64DitherOp dither; }; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index dd095bac60..6bb51d0a7b 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -244,19 +244,15 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, out->type = SWS_PIXEL_U8; break; case SWS_UOP_UNPACK: - MASK_SET(out->pack, 0, op->pack.pattern[0]); - MASK_SET(out->pack, 1, op->pack.pattern[1]); - MASK_SET(out->pack, 2, op->pack.pattern[2]); - MASK_SET(out->pack, 3, op->pack.pattern[3]); + for (int i = 0; i < 4; i++) + out->pack.pattern[i] = op->pack.pattern[i]; break; case SWS_UOP_PACK: out->mask = 0; for (int i = 0; i < 4 && op->pack.pattern[i]; i++) MASK_SET(out->mask, i, 1); - MASK_SET(out->pack, 0, op->pack.pattern[0]); - MASK_SET(out->pack, 1, op->pack.pattern[1]); - MASK_SET(out->pack, 2, op->pack.pattern[2]); - MASK_SET(out->pack, 3, op->pack.pattern[3]); + for (int i = 0; i < 4; i++) + out->pack.pattern[i] = op->pack.pattern[i]; break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index b7bb2172ae..829694279b 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -65,6 +65,14 @@ static uint64_t move_to_mask(const SwsMoveUOp *move) return mask; } +static uint16_t pack_to_mask(const SwsPackUOp *pack) +{ + uint16_t mask = 0; + for (int i = 0; i < 4; i++) + MASK_SET(mask, i, pack->pattern[i]); + return mask; +} + static int aarch64_op_impl_cmp(const void *a, const void *b) { const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; @@ -83,10 +91,13 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) break; } case SWS_UOP_UNPACK: - case SWS_UOP_PACK: - if (pa->pack != pb->pack) - return (int) pa->pack - pb->pack; + case SWS_UOP_PACK: { + uint16_t ia = pack_to_mask(&pa->pack); + uint16_t ib = pack_to_mask(&pb->pack); + if (ia != ib) + return (int) ia - ib; break; + } case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: if (pa->shift.amount != pb->shift.amount) @@ -264,7 +275,7 @@ static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) break; case SWS_UOP_UNPACK: case SWS_UOP_PACK: - av_bprintf(bp, "_%04x", params->pack); + av_bprintf(bp, "_%04x", pack_to_mask(¶ms->pack)); break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: @@ -339,7 +350,9 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) break; case SWS_UOP_UNPACK: case SWS_UOP_PACK: - av_bprintf(bp, ", .pack = 0x%04x", params->pack); + av_bprintf(bp, ", .pack = { .pattern = {%d, %d, %d, %d} }", + params->pack.pattern[0], params->pack.pattern[1], + params->pack.pattern[2], params->pack.pattern[3]); break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
