[FFmpeg-devel] [PATCH 2/6] avcodec/vp56: Cleanup generically in case of init failure

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Fri Feb 11 10:50:57 EET 2022


Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
 libavcodec/vp5.c  | 1 +
 libavcodec/vp56.c | 4 +---
 libavcodec/vp56.h | 4 ++++
 libavcodec/vp6.c  | 2 ++
 4 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/libavcodec/vp5.c b/libavcodec/vp5.c
index f68c62527b..a3c3da7ba6 100644
--- a/libavcodec/vp5.c
+++ b/libavcodec/vp5.c
@@ -306,4 +306,5 @@ const AVCodec ff_vp5_decoder = {
     .close          = ff_vp56_free,
     .decode         = ff_vp56_decode_frame,
     .capabilities   = AV_CODEC_CAP_DR1,
+    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
 };
diff --git a/libavcodec/vp56.c b/libavcodec/vp56.c
index 695f37e972..d4184f59b4 100644
--- a/libavcodec/vp56.c
+++ b/libavcodec/vp56.c
@@ -800,10 +800,8 @@ av_cold int ff_vp56_init_context(AVCodecContext *avctx, VP56Context *s,
 
     for (i = 0; i < FF_ARRAY_ELEMS(s->frames); i++) {
         s->frames[i] = av_frame_alloc();
-        if (!s->frames[i]) {
-            ff_vp56_free(avctx);
+        if (!s->frames[i])
             return AVERROR(ENOMEM);
-        }
     }
     s->edge_emu_buffer_alloc = NULL;
 
diff --git a/libavcodec/vp56.h b/libavcodec/vp56.h
index 46090f25c9..0a9eebc7ea 100644
--- a/libavcodec/vp56.h
+++ b/libavcodec/vp56.h
@@ -217,6 +217,10 @@ struct vp56_context {
 
 
 int ff_vp56_init(AVCodecContext *avctx, int flip, int has_alpha);
+/**
+ * Initializes an VP56Context. Expects its caller to clean up
+ * in case of error.
+ */
 int ff_vp56_init_context(AVCodecContext *avctx, VP56Context *s,
                           int flip, int has_alpha);
 int ff_vp56_free(AVCodecContext *avctx);
diff --git a/libavcodec/vp6.c b/libavcodec/vp6.c
index 95ed5eba0f..6bcbbce47b 100644
--- a/libavcodec/vp6.c
+++ b/libavcodec/vp6.c
@@ -720,6 +720,7 @@ const AVCodec ff_vp6_decoder = {
     .close          = vp6_decode_free,
     .decode         = ff_vp56_decode_frame,
     .capabilities   = AV_CODEC_CAP_DR1,
+    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
 };
 
 /* flash version, not flipped upside-down */
@@ -733,6 +734,7 @@ const AVCodec ff_vp6f_decoder = {
     .close          = vp6_decode_free,
     .decode         = ff_vp56_decode_frame,
     .capabilities   = AV_CODEC_CAP_DR1,
+    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
 };
 
 /* flash version, not flipped upside-down, with alpha channel */
-- 
2.32.0



More information about the ffmpeg-devel mailing list