diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c index e218f7c043..3e2fffb850 100644 --- a/libavcodec/apedec.c +++ b/libavcodec/apedec.c @@ -1497,6 +1497,14 @@ static int ape_decode_frame(AVCodecContext *avctx, void *data, /* reallocate decoded sample buffer if needed */ decoded_buffer_size = 2LL * FFALIGN(blockstodecode, 8) * sizeof(*s->decoded_buffer); av_assert0(decoded_buffer_size <= INT_MAX); + + /* get output buffer */ + frame->nb_samples = blockstodecode; + if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) { + s->samples=0; + return ret; + } + av_fast_malloc(&s->decoded_buffer, &s->decoded_size, decoded_buffer_size); if (!s->decoded_buffer) return AVERROR(ENOMEM); @@ -1504,11 +1512,6 @@ static int ape_decode_frame(AVCodecContext *avctx, void *data, s->decoded[0] = s->decoded_buffer; s->decoded[1] = s->decoded_buffer + FFALIGN(blockstodecode, 8); - /* get output buffer */ - frame->nb_samples = blockstodecode; - if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) - return ret; - s->error=0; if ((s->channels == 1) || (s->frameflags & APE_FRAMECODE_PSEUDO_STEREO))