diff options
Diffstat (limited to 'libavcodec/smacker.c')
-rw-r--r-- | libavcodec/smacker.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index 9819fa58cc..c8850d3368 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -534,6 +534,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) { |