summaryrefslogtreecommitdiff
path: root/libavutil
diff options
context:
space:
mode:
authorTimo Rothenpieler <timo@rothenpieler.org>2022-07-06 01:32:27 +0200
committerTimo Rothenpieler <timo@rothenpieler.org>2022-07-18 02:13:25 +0200
commit54e0971edbd6cf783f6209d762514633f6d9d413 (patch)
tree42d73a57f8a8a35e50f8369e36f7c498d5b535e8 /libavutil
parent7389a49fd348719d1fab393c2087183cde4dbd9c (diff)
downloadffmpeg-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.c13
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;