[FFmpeg-devel] [PATCH 14/16] avcodec/tscc2: Cleanup generically after init failure
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Sun Sep 13 05:57:51 EEST 2020
Do this by setting the FF_CODEC_CAP_INIT_CLEANUP flag.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
---
libavcodec/tscc2.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/libavcodec/tscc2.c b/libavcodec/tscc2.c
index 65fbb010f6..6aadb51ad4 100644
--- a/libavcodec/tscc2.c
+++ b/libavcodec/tscc2.c
@@ -74,18 +74,14 @@ static av_cold int init_vlcs(TSCC2Context *c)
tscc2_nc_vlc_bits[i], 1, 1,
tscc2_nc_vlc_codes[i], 2, 2,
tscc2_nc_vlc_syms, 1, 1, INIT_VLC_LE);
- if (ret) {
- free_vlcs(c);
+ if (ret)
return ret;
- }
ret = ff_init_vlc_sparse(c->ac_vlc + i, 9, tscc2_ac_vlc_sizes[i],
tscc2_ac_vlc_bits[i], 1, 1,
tscc2_ac_vlc_codes[i], 2, 2,
tscc2_ac_vlc_syms[i], 2, 2, INIT_VLC_LE);
- if (ret) {
- free_vlcs(c);
+ if (ret)
return ret;
- }
}
return 0;
@@ -360,15 +356,12 @@ static av_cold int tscc2_decode_init(AVCodecContext *avctx)
c->slice_quants = av_malloc(c->mb_width * c->mb_height);
if (!c->slice_quants) {
av_log(avctx, AV_LOG_ERROR, "Cannot allocate slice information\n");
- free_vlcs(c);
return AVERROR(ENOMEM);
}
c->pic = av_frame_alloc();
- if (!c->pic) {
- tscc2_decode_end(avctx);
+ if (!c->pic)
return AVERROR(ENOMEM);
- }
return 0;
}
@@ -383,4 +376,5 @@ AVCodec ff_tscc2_decoder = {
.close = tscc2_decode_end,
.decode = tscc2_decode_frame,
.capabilities = AV_CODEC_CAP_DR1,
+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};
--
2.25.1
More information about the ffmpeg-devel
mailing list