avcodec/vp56: Cleanup generically in case of init failure

Reviewed-by: Peter Ross <pross@xvid.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2022-02-11 08:22:47 +01:00
parent 90e5eef731
commit 55379dac53
4 changed files with 8 additions and 3 deletions

View File

@ -306,4 +306,5 @@ const AVCodec ff_vp5_decoder = {
.close = ff_vp56_free, .close = ff_vp56_free,
.decode = ff_vp56_decode_frame, .decode = ff_vp56_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}; };

View File

@ -800,11 +800,9 @@ av_cold int ff_vp56_init_context(AVCodecContext *avctx, VP56Context *s,
for (i = 0; i < FF_ARRAY_ELEMS(s->frames); i++) { for (i = 0; i < FF_ARRAY_ELEMS(s->frames); i++) {
s->frames[i] = av_frame_alloc(); s->frames[i] = av_frame_alloc();
if (!s->frames[i]) { if (!s->frames[i])
ff_vp56_free(avctx);
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
} }
}
s->edge_emu_buffer_alloc = NULL; s->edge_emu_buffer_alloc = NULL;
s->above_blocks = NULL; s->above_blocks = NULL;

View File

@ -217,6 +217,10 @@ struct vp56_context {
int ff_vp56_init(AVCodecContext *avctx, int flip, int has_alpha); 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 ff_vp56_init_context(AVCodecContext *avctx, VP56Context *s,
int flip, int has_alpha); int flip, int has_alpha);
int ff_vp56_free(AVCodecContext *avctx); int ff_vp56_free(AVCodecContext *avctx);

View File

@ -720,6 +720,7 @@ const AVCodec ff_vp6_decoder = {
.close = vp6_decode_free, .close = vp6_decode_free,
.decode = ff_vp56_decode_frame, .decode = ff_vp56_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}; };
/* flash version, not flipped upside-down */ /* flash version, not flipped upside-down */
@ -733,6 +734,7 @@ const AVCodec ff_vp6f_decoder = {
.close = vp6_decode_free, .close = vp6_decode_free,
.decode = ff_vp56_decode_frame, .decode = ff_vp56_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}; };
/* flash version, not flipped upside-down, with alpha channel */ /* flash version, not flipped upside-down, with alpha channel */