diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c index e9ed1a9b7c..e9f77d90d9 100644 --- a/libavcodec/mimic.c +++ b/libavcodec/mimic.c @@ -385,6 +385,17 @@ static int mimic_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return AVERROR_INVALIDDATA; } + av_fast_padded_malloc(&ctx->swap_buf, &ctx->swap_buf_size, swap_buf_size); + if (!ctx->swap_buf) + return AVERROR(ENOMEM); + + ctx->bbdsp.bswap_buf(ctx->swap_buf, + (const uint32_t *) (buf + MIMIC_HEADER_SIZE), + swap_buf_size >> 2); + res = init_get_bits8(&ctx->gb, ctx->swap_buf, swap_buf_size); + if (res < 0) + return res; + ff_progress_frame_unref(&ctx->frames[ctx->cur_index]); res = ff_progress_frame_get_buffer(avctx, &ctx->frames[ctx->cur_index], AV_GET_BUFFER_FLAG_REF); @@ -398,17 +409,6 @@ static int mimic_decode_frame(AVCodecContext *avctx, AVFrame *rframe, ff_thread_finish_setup(avctx); - av_fast_padded_malloc(&ctx->swap_buf, &ctx->swap_buf_size, swap_buf_size); - if (!ctx->swap_buf) - return AVERROR(ENOMEM); - - ctx->bbdsp.bswap_buf(ctx->swap_buf, - (const uint32_t *) (buf + MIMIC_HEADER_SIZE), - swap_buf_size >> 2); - res = init_get_bits8(&ctx->gb, ctx->swap_buf, swap_buf_size); - if (res < 0) - return res; - res = decode(ctx, quality, num_coeffs, !is_pframe); ff_progress_frame_report(&ctx->frames[ctx->cur_index], INT_MAX); if (res < 0) {