1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-11-23 21:54:53 +02:00

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 <kasper93@gmail.com>
This commit is contained in:
Kacper Michajłow
2025-09-13 16:10:51 +02:00
parent a4fd3f27f4
commit 66faef3dbe
4 changed files with 10 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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,

View File

@@ -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),