diff options
author | Timo Rothenpieler <timo@rothenpieler.org> | 2022-07-06 01:32:27 +0200 |
---|---|---|
committer | Timo Rothenpieler <timo@rothenpieler.org> | 2022-07-18 00:32:14 +0200 |
commit | 30bbc0a624bc43fa4aaabd695546ad426d0d086b (patch) | |
tree | 318aa8f8675ab7c2689f57968dbdccdaa2f15c64 /libavutil | |
parent | e18c5754745b56a4467fd85ee07b21c3306c2678 (diff) | |
download | ffmpeg-30bbc0a624bc43fa4aaabd695546ad426d0d086b.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 e5afcb2a9d..6355bd1e29 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; |