diff options
author | Timo Rothenpieler <timo@rothenpieler.org> | 2022-07-06 01:32:27 +0200 |
---|---|---|
committer | Timo Rothenpieler <timo@rothenpieler.org> | 2022-07-18 02:13:25 +0200 |
commit | 54e0971edbd6cf783f6209d762514633f6d9d413 (patch) | |
tree | 42d73a57f8a8a35e50f8369e36f7c498d5b535e8 /libavutil | |
parent | 7389a49fd348719d1fab393c2087183cde4dbd9c (diff) | |
download | ffmpeg-54e0971edbd6cf783f6209d762514633f6d9d413.tar.gz |
avutil/hwcontext_d3d11va: fix texture_infos writes on non-fixed-size pools
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/hwcontext_d3d11va.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c index 8ab96bad25..b55deb0d88 100644 --- a/libavutil/hwcontext_d3d11va.c +++ b/libavutil/hwcontext_d3d11va.c @@ -166,6 +166,17 @@ static AVBufferRef *wrap_texture_buf(AVHWFramesContext *ctx, ID3D11Texture2D *te return NULL; } + if (s->nb_surfaces <= s->nb_surfaces_used) { + frames_hwctx->texture_infos = av_realloc_f(frames_hwctx->texture_infos, + s->nb_surfaces_used + 1, + sizeof(*frames_hwctx->texture_infos)); + if (!frames_hwctx->texture_infos) { + ID3D11Texture2D_Release(tex); + return NULL; + } + s->nb_surfaces = s->nb_surfaces_used + 1; + } + frames_hwctx->texture_infos[s->nb_surfaces_used].texture = tex; frames_hwctx->texture_infos[s->nb_surfaces_used].index = index; s->nb_surfaces_used++; @@ -284,7 +295,7 @@ static int d3d11va_frames_init(AVHWFramesContext *ctx) } } - hwctx->texture_infos = av_calloc(ctx->initial_pool_size, sizeof(*hwctx->texture_infos)); + hwctx->texture_infos = av_realloc_f(NULL, ctx->initial_pool_size, sizeof(*hwctx->texture_infos)); if (!hwctx->texture_infos) return AVERROR(ENOMEM); s->nb_surfaces = ctx->initial_pool_size; |