diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-09-13 03:34:19 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-09-17 00:09:08 +0200 |
commit | 657756c353526e8807a214770c54a5bcb903bcad (patch) | |
tree | 06fe8a9e60549761e627dbd5eb7aaf08a7a7906f /libavcodec | |
parent | ef6c52f3c56ffdefb6c1f108b583b60657ff0bfc (diff) | |
download | ffmpeg-657756c353526e8807a214770c54a5bcb903bcad.tar.gz |
avcodec/tscc2: Cleanup generically after init failure
Do this by setting the FF_CODEC_CAP_INIT_CLEANUP flag.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/tscc2.c | 14 |
1 files 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, }; |