summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-09-13 03:34:19 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-09-17 00:09:08 +0200
commit657756c353526e8807a214770c54a5bcb903bcad (patch)
tree06fe8a9e60549761e627dbd5eb7aaf08a7a7906f
parentef6c52f3c56ffdefb6c1f108b583b60657ff0bfc (diff)
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>
-rw-r--r--libavcodec/tscc2.c14
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,
};