[FFmpeg-cvslog] vulkan/ffv1dec: fix FFVkSPIRVCompiler leak
averne
git at videolan.org
Wed Jun 11 07:30:36 EEST 2025
ffmpeg | branch: master | averne <averne381-at-gmail.com at ffmpeg.org> | Tue Jun 10 20:58:57 2025 +0200| [9e9316326812ba62aee8d36c37b1d8fb1fd2ef64] | committer: Lynne
vulkan/ffv1dec: fix FFVkSPIRVCompiler leak
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9e9316326812ba62aee8d36c37b1d8fb1fd2ef64
---
libavcodec/vulkan_ffv1.c | 58 +++++++++++++++++++-----------------------------
1 file changed, 23 insertions(+), 35 deletions(-)
diff --git a/libavcodec/vulkan_ffv1.c b/libavcodec/vulkan_ffv1.c
index 8329b5d7df..b02bc71683 100644
--- a/libavcodec/vulkan_ffv1.c
+++ b/libavcodec/vulkan_ffv1.c
@@ -1033,23 +1033,17 @@ static int vk_decode_ffv1_init(AVCodecContext *avctx)
/* Intermediate frame pool for RCT */
for (int i = 0; i < 2; i++) { /* 16/32 bit */
- err = init_indirect(avctx, &ctx->s, &fv->intermediate_frames_ref[i],
- i ? AV_PIX_FMT_GBRAP32 : AV_PIX_FMT_GBRAP16);
- if (err < 0)
- return err;
+ RET(init_indirect(avctx, &ctx->s, &fv->intermediate_frames_ref[i],
+ i ? AV_PIX_FMT_GBRAP32 : AV_PIX_FMT_GBRAP16));
}
/* Setup shader */
- err = init_setup_shader(f, &ctx->s, &ctx->exec_pool, spv, &fv->setup);
- if (err < 0)
- return err;
+ RET(init_setup_shader(f, &ctx->s, &ctx->exec_pool, spv, &fv->setup));
/* Reset shaders */
for (int i = 0; i < 2; i++) { /* AC/Golomb */
- err = init_reset_shader(f, &ctx->s, &ctx->exec_pool,
- spv, &fv->reset[i], !i ? AC_RANGE_CUSTOM_TAB : 0);
- if (err < 0)
- return err;
+ RET(init_reset_shader(f, &ctx->s, &ctx->exec_pool,
+ spv, &fv->reset[i], !i ? AC_RANGE_CUSTOM_TAB : 0));
}
/* Decode shaders */
@@ -1059,39 +1053,31 @@ static int vk_decode_ffv1_init(AVCodecContext *avctx)
AVHWFramesContext *dec_frames_ctx;
dec_frames_ctx = k ? (AVHWFramesContext *)fv->intermediate_frames_ref[i]->data :
(AVHWFramesContext *)avctx->hw_frames_ctx->data;
- err = init_decode_shader(f, &ctx->s, &ctx->exec_pool,
- spv, &fv->decode[i][j][k],
- dec_frames_ctx,
- (AVHWFramesContext *)avctx->hw_frames_ctx->data,
- i,
- !j ? AC_RANGE_CUSTOM_TAB : AC_GOLOMB_RICE,
- k);
- if (err < 0)
- return err;
+ RET(init_decode_shader(f, &ctx->s, &ctx->exec_pool,
+ spv, &fv->decode[i][j][k],
+ dec_frames_ctx,
+ (AVHWFramesContext *)avctx->hw_frames_ctx->data,
+ i,
+ !j ? AC_RANGE_CUSTOM_TAB : AC_GOLOMB_RICE,
+ k));
}
}
}
/* Range coder data */
- err = ff_ffv1_vk_init_state_transition_data(&ctx->s,
- &fv->rangecoder_static_buf,
- f);
- if (err < 0)
- return err;
+ RET(ff_ffv1_vk_init_state_transition_data(&ctx->s,
+ &fv->rangecoder_static_buf,
+ f));
/* Quantization table data */
- err = ff_ffv1_vk_init_quant_table_data(&ctx->s,
- &fv->quant_buf,
- f);
- if (err < 0)
- return err;
+ RET(ff_ffv1_vk_init_quant_table_data(&ctx->s,
+ &fv->quant_buf,
+ f));
/* CRC table buffer */
- err = ff_ffv1_vk_init_crc_table_data(&ctx->s,
- &fv->crc_tab_buf,
- f);
- if (err < 0)
- return err;
+ RET(ff_ffv1_vk_init_crc_table_data(&ctx->s,
+ &fv->crc_tab_buf,
+ f));
/* Update setup global descriptors */
RET(ff_vk_shader_update_desc_buffer(&ctx->s, &ctx->exec_pool.contexts[0],
@@ -1124,6 +1110,8 @@ static int vk_decode_ffv1_init(AVCodecContext *avctx)
}
fail:
+ spv->uninit(&spv);
+
return err;
}
More information about the ffmpeg-cvslog
mailing list