This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 1d33874a8275c11d248b918cfdf1bac0c0c3506a Author: Niklas Haas <[email protected]> AuthorDate: Sat Nov 7 14:51:48 2026 +0100 Commit: Niklas Haas <[email protected]> CommitDate: Sun Nov 8 01:48:12 2026 +0000 swscale/ops: only skip over consumed data in SwsOpImpl This commit turns on the mechanism built up by the previous commits. This allows ops to have dynamically sized priv data. Signed-off-by: Niklas Haas <[email protected]> --- libswscale/aarch64/ops.c | 2 +- libswscale/aarch64/ops_static.c | 3 ++- libswscale/ops_chain.c | 2 +- libswscale/uops_tmpl.h | 7 +++++-- libswscale/x86/ops_include.asm | 9 +++++---- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/libswscale/aarch64/ops.c b/libswscale/aarch64/ops.c index 46970f7bf5..4d1e8b3345 100644 --- a/libswscale/aarch64/ops.c +++ b/libswscale/aarch64/ops.c @@ -193,7 +193,7 @@ static int compile_uops_aarch64(SwsContext *ctx, const SwsUOpList *uops, if (ret < 0) goto error; av_assert1(res.priv_size == aarch64_priv_size(¶ms)); - ret = ff_sws_op_chain_append(chain, func, res.ref, &res.priv, sizeof(res.priv)); + ret = ff_sws_op_chain_append(chain, func, res.ref, &res.priv, res.priv_size); av_refstruct_unref(&res.ref); if (ret < 0) goto error; diff --git a/libswscale/aarch64/ops_static.c b/libswscale/aarch64/ops_static.c index f090e4e099..d3fda52c66 100644 --- a/libswscale/aarch64/ops_static.c +++ b/libswscale/aarch64/ops_static.c @@ -635,8 +635,9 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpEntry *entry) i_ret(r); } else { /* Load continuation address and increment impl pointer. */ + const size_t priv_size = FFALIGN(aarch64_priv_size(p), alignof_impl); RasmNode *node = rasm_set_current_node(r, s->load_cont_node); - RasmOp impl_pre = a64op_pre(s->impl, sizeof_impl); + RasmOp impl_pre = a64op_pre(s->impl, offsetof_impl_priv + priv_size); i_ldr(r, s->cont, impl_pre); CMT("SwsFuncPtr cont = (++impl)->func;"); rasm_set_current_node(r, node); /* Common end for remaining CPS functions. */ diff --git a/libswscale/ops_chain.c b/libswscale/ops_chain.c index 62a487fe54..b977c7e69d 100644 --- a/libswscale/ops_chain.c +++ b/libswscale/ops_chain.c @@ -127,7 +127,7 @@ int ff_sws_uop_lookup(SwsContext *ctx, const SwsUOpTable *const tables[], } ret = ff_sws_op_chain_append(chain, res.func ? res.func : match->func, - res.ref, &res.priv, sizeof(res.priv)); + res.ref, &res.priv, res.priv_size); av_refstruct_unref(&res.ref); if (ret < 0) return ret; diff --git a/libswscale/uops_tmpl.h b/libswscale/uops_tmpl.h index 42e0442e15..388ed4c311 100644 --- a/libswscale/uops_tmpl.h +++ b/libswscale/uops_tmpl.h @@ -117,13 +117,16 @@ static_assert(alignof(SwsFilterPriv) <= alignof(SwsOpPriv), #define CALL(NAME, ...) fn(NAME)(iter, impl, x, y, z, w, __VA_ARGS__) +#define NEXT_IMPL(N) \ + ((const SwsOpImpl *) &impl->priv.data[FFALIGN(N, alignof(SwsOpImpl))]) + /* Helper macro to call into the next continuation with a given type; N gives * the size of private data consumed by this op */ #define CONTINUE(N, ...) \ ((void (*)(SwsOpIter *, const SwsOpImpl *, \ void *restrict x, void *restrict y, \ - void *restrict z, void *restrict w)) impl[1].func) \ - (iter, &impl[1], __VA_ARGS__) + void *restrict z, void *restrict w)) NEXT_IMPL(N)->func) \ + (iter, NEXT_IMPL(N), __VA_ARGS__) /* Helper macros for common op setup code */ #define DECL_SETUP(NAME, PARAMS, OUT) \ diff --git a/libswscale/x86/ops_include.asm b/libswscale/x86/ops_include.asm index dfe24f85bd..c0655581f1 100644 --- a/libswscale/x86/ops_include.asm +++ b/libswscale/x86/ops_include.asm @@ -135,8 +135,7 @@ endstruc struc SwsOpImpl .func resq 1 - .priv resb 16 - .next resb 0 + .priv resb 0 endstruc %define SWS_COMP_NONE 0 @@ -306,14 +305,16 @@ endstruc ;--------------------------------------------------------- ; Common macros for linking together different kernels +%define sizeof_impl (SwsOpImpl.priv + ((PRIV_SIZE + gprsize - 1) & ~(gprsize - 1))) + ; Load the next operation kernel's address to a register %macro LOAD_CONT 1 ; reg - mov %1, [implq + SwsOpImpl.next + SwsOpImpl.func] + mov %1, [implq + sizeof_impl + SwsOpImpl.func] %endmacro ; Tail call into the next operation kernel, given that kernel's address %macro CONTINUE 1 ; reg - add implq, SwsOpImpl.next + add implq, sizeof_impl jmp %1 annotate_function_size %endmacro -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
