diff options
author | Kacper Michajłow <[email protected]> | 2025-09-13 16:10:51 +0200 |
---|---|---|
committer | Kacper Michajłow <[email protected]> | 2025-09-13 18:14:02 +0200 |
commit | 66faef3dbe74bdae40c852caa0ab28ca8cb7a8f7 (patch) | |
tree | 23dd5796e41c4f175e9e5811a55400699f6b2e20 | |
parent | a4fd3f27f4d911e807f9c45931a5fd5d3ae95c87 (diff) |
swscale/ops_chain: add type removed ff_sws_op_chain_free_cb
to avoid pointer casting and UB of calling function with different
pointer type.
Signed-off-by: Kacper Michajłow <[email protected]>
-rw-r--r-- | libswscale/ops_backend.c | 2 | ||||
-rw-r--r-- | libswscale/ops_chain.c | 5 | ||||
-rw-r--r-- | libswscale/ops_chain.h | 6 | ||||
-rw-r--r-- | libswscale/x86/ops.c | 2 |
4 files changed, 10 insertions, 5 deletions
diff --git a/libswscale/ops_backend.c b/libswscale/ops_backend.c index ac76dedbee..248a591fd2 100644 --- a/libswscale/ops_backend.c +++ b/libswscale/ops_backend.c @@ -98,7 +98,7 @@ static int compile(SwsContext *ctx, SwsOpList *ops, SwsCompiledOp *out) .block_size = SWS_BLOCK_SIZE, .cpu_flags = chain->cpu_flags, .priv = chain, - .free = (void (*)(void *)) ff_sws_op_chain_free, + .free = ff_sws_op_chain_free_cb, }; return 0; } diff --git a/libswscale/ops_chain.c b/libswscale/ops_chain.c index ef768b4904..314789a652 100644 --- a/libswscale/ops_chain.c +++ b/libswscale/ops_chain.c @@ -31,11 +31,12 @@ SwsOpChain *ff_sws_op_chain_alloc(void) return av_mallocz(sizeof(SwsOpChain)); } -void ff_sws_op_chain_free(SwsOpChain *chain) +void ff_sws_op_chain_free_cb(void *ptr) { - if (!chain) + if (!ptr) return; + SwsOpChain *chain = ptr; for (int i = 0; i < chain->num_impl + 1; i++) { if (chain->free[i]) chain->free[i](chain->impl[i].priv.ptr); diff --git a/libswscale/ops_chain.h b/libswscale/ops_chain.h index ceff7e4e7e..7f436869b1 100644 --- a/libswscale/ops_chain.h +++ b/libswscale/ops_chain.h @@ -86,7 +86,11 @@ typedef struct SwsOpChain { } SwsOpChain; SwsOpChain *ff_sws_op_chain_alloc(void); -void ff_sws_op_chain_free(SwsOpChain *chain); +void ff_sws_op_chain_free_cb(void *chain); +static inline void ff_sws_op_chain_free(SwsOpChain *chain) +{ + ff_sws_op_chain_free_cb(chain); +} /* Returns 0 on success, or a negative error code. */ int ff_sws_op_chain_append(SwsOpChain *chain, SwsFuncPtr func, diff --git a/libswscale/x86/ops.c b/libswscale/x86/ops.c index 82a6d233b9..26f49582ae 100644 --- a/libswscale/x86/ops.c +++ b/libswscale/x86/ops.c @@ -649,7 +649,7 @@ static int compile(SwsContext *ctx, SwsOpList *ops, SwsCompiledOp *out) *out = (SwsCompiledOp) { .priv = chain, - .free = (void (*)(void *)) ff_sws_op_chain_free, + .free = ff_sws_op_chain_free_cb, /* Use at most two full YMM regs during the widest precision section */ .block_size = 2 * FFMIN(mmsize, 32) / ff_sws_op_list_max_size(ops), |