summaryrefslogtreecommitdiff
path: root/libavcodec/vp9.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-05-05 21:18:45 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-05-10 22:12:01 +0200
commit3572590e75950487c88db2130dac08a5a2b892b2 (patch)
treecce3944403a8132e24705c18cb10992bbfbe3f7f /libavcodec/vp9.c
parent4848a7abff37c868aa5a701c56e2a6b9588720d5 (diff)
avcodec/vp9: Cleanup generically on init failure
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec/vp9.c')
-rw-r--r--libavcodec/vp9.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c
index 32776ebae7..7409178501 100644
--- a/libavcodec/vp9.c
+++ b/libavcodec/vp9.c
@@ -1798,7 +1798,6 @@ static int init_frames(AVCodecContext *avctx)
for (i = 0; i < 3; i++) {
s->s.frames[i].tf.f = av_frame_alloc();
if (!s->s.frames[i].tf.f) {
- vp9_decode_free(avctx);
av_log(avctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i);
return AVERROR(ENOMEM);
}
@@ -1807,7 +1806,6 @@ static int init_frames(AVCodecContext *avctx)
s->s.refs[i].f = av_frame_alloc();
s->next_refs[i].f = av_frame_alloc();
if (!s->s.refs[i].f || !s->next_refs[i].f) {
- vp9_decode_free(avctx);
av_log(avctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i);
return AVERROR(ENOMEM);
}
@@ -1883,7 +1881,8 @@ const AVCodec ff_vp9_decoder = {
.close = vp9_decode_free,
.decode = vp9_decode_frame,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS,
- .caps_internal = FF_CODEC_CAP_SLICE_THREAD_HAS_MF |
+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
+ FF_CODEC_CAP_SLICE_THREAD_HAS_MF |
FF_CODEC_CAP_ALLOCATE_PROGRESS,
.flush = vp9_decode_flush,
.update_thread_context = ONLY_IF_THREADS_ENABLED(vp9_decode_update_thread_context),