summaryrefslogtreecommitdiff
path: root/libavcodec/smacker.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/smacker.c')
-rw-r--r--libavcodec/smacker.c44
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) {