summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKacper Michajłow <[email protected]>2025-09-13 16:10:51 +0200
committerKacper Michajłow <[email protected]>2025-09-13 18:14:02 +0200
commit66faef3dbe74bdae40c852caa0ab28ca8cb7a8f7 (patch)
tree23dd5796e41c4f175e9e5811a55400699f6b2e20
parenta4fd3f27f4d911e807f9c45931a5fd5d3ae95c87 (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.c2
-rw-r--r--libswscale/ops_chain.c5
-rw-r--r--libswscale/ops_chain.h6
-rw-r--r--libswscale/x86/ops.c2
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),