diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index 663acc0ac9..9c0ed7dccb 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -38,9 +38,6 @@ #include "ac3dec_data.h" #include "kbdwin.h" -/** Large enough for maximum possible frame size when the specification limit is ignored */ -#define AC3_FRAME_BUFFER_SIZE 32768 - /** * table for ungrouping 3 values in 7 bits. * used for exponents and bap=2 mantissas @@ -206,11 +203,6 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx) } s->downmixed = 1; - /* allocate context input buffer */ - s->input_buffer = av_mallocz(AC3_FRAME_BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); - if (!s->input_buffer) - return AVERROR(ENOMEM); - return 0; } @@ -1436,8 +1428,6 @@ static av_cold int ac3_decode_end(AVCodecContext *avctx) ff_mdct_end(&s->imdct_512); ff_mdct_end(&s->imdct_256); - av_freep(&s->input_buffer); - return 0; } diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h index a7cebafbe9..38262514b6 100644 --- a/libavcodec/ac3dec.h +++ b/libavcodec/ac3dec.h @@ -62,11 +62,13 @@ #define SPX_MAX_BANDS 17 +/** Large enough for maximum possible frame size when the specification limit is ignored */ +#define AC3_FRAME_BUFFER_SIZE 32768 + typedef struct { AVClass *class; ///< class for AVOptions AVCodecContext *avctx; ///< parent context GetBitContext gbc; ///< bitstream reader - uint8_t *input_buffer; ///< temp buffer to prevent overread ///@name Bit stream information ///@{ @@ -202,6 +204,7 @@ typedef struct { DECLARE_ALIGNED(32, float, window)[AC3_BLOCK_SIZE]; ///< window coefficients DECLARE_ALIGNED(32, float, tmp_output)[AC3_BLOCK_SIZE]; ///< temporary storage for output before windowing DECLARE_ALIGNED(32, float, output)[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]; ///< output after imdct transform and windowing + DECLARE_ALIGNED(32, uint8_t, input_buffer)[AC3_FRAME_BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE]; ///< temp buffer to prevent overread ///@} } AC3DecodeContext;