diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index 9819fa58cc..c8850d3368 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -532,6 +532,26 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, +/* + * + * Uninit smacker decoder + * + */ +static av_cold int decode_end(AVCodecContext *avctx) +{ + SmackVContext * const smk = avctx->priv_data; + + av_freep(&smk->mmap_tbl); + av_freep(&smk->mclr_tbl); + av_freep(&smk->full_tbl); + av_freep(&smk->type_tbl); + + av_frame_unref(&smk->pic); + + return 0; +} + + /* * * Init smacker decoder @@ -552,34 +572,16 @@ static av_cold int decode_init(AVCodecContext *avctx) return -1; } - if (decode_header_trees(c)) + if (decode_header_trees(c)) { + decode_end(avctx); return -1; + } return 0; } -/* - * - * Uninit smacker decoder - * - */ -static av_cold int decode_end(AVCodecContext *avctx) -{ - SmackVContext * const smk = avctx->priv_data; - - av_freep(&smk->mmap_tbl); - av_freep(&smk->mclr_tbl); - av_freep(&smk->full_tbl); - av_freep(&smk->type_tbl); - - av_frame_unref(&smk->pic); - - return 0; -} - - static av_cold int smka_decode_init(AVCodecContext *avctx) { if (avctx->channels < 1 || avctx->channels > 2) {