Mercurial > libavcodec.hg
changeset 6538:b8f886bce6f5 libavcodec
only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
author | jbr |
---|---|
date | Wed, 26 Mar 2008 22:36:41 +0000 |
parents | ea2f7235c3e1 |
children | 04763b6fd4f0 |
files | ac3dec.c |
diffstat | 1 files changed, 11 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ac3dec.c Tue Mar 25 23:34:49 2008 +0000 +++ b/ac3dec.c Wed Mar 26 22:36:41 2008 +0000 @@ -194,7 +194,7 @@ GetBitContext gbc; ///< bitstream reader AVRandomState dith_state; ///< for dither generation AVCodecContext *avctx; ///< parent context - uint8_t input_buffer[AC3_MAX_FRAME_SIZE]; ///< temp buffer to prevent overread + uint8_t *input_buffer; ///< temp buffer to prevent overread } AC3DecodeContext; /** @@ -294,6 +294,13 @@ } s->downmixed = 1; + /* allocate context input buffer */ + if (avctx->error_resilience >= FF_ER_CAREFUL) { + s->input_buffer = av_mallocz(AC3_MAX_FRAME_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); + if (!s->input_buffer) + return AVERROR_NOMEM; + } + return 0; } @@ -1137,7 +1144,7 @@ int i, blk, ch, err; /* initialize the GetBitContext with the start of valid AC-3 Frame */ - if(avctx->error_resilience >= FF_ER_CAREFUL) { + if (s->input_buffer) { /* copy input buffer to decoder context to avoid reading past the end of the buffer, which can be caused by a damaged input stream. */ memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_MAX_FRAME_SIZE)); @@ -1229,6 +1236,8 @@ ff_mdct_end(&s->imdct_512); ff_mdct_end(&s->imdct_256); + av_freep(&s->input_buffer); + return 0; }