summaryrefslogtreecommitdiff
path: root/libavcodec/ac3enc.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2011-06-10 12:42:36 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2011-06-13 16:49:35 -0400
commite754dfc0bba4f81fe797f240fca94fea5dfd925e (patch)
treea610aa37e26a60e164d0ae4a1c12552c3df12754 /libavcodec/ac3enc.c
parent36151b3e3112cd7d8ae0e02e850dee16bd966696 (diff)
ac3enc: dynamically allocate AC3EncodeContext fields windowed_samples and mdct
This will allow the same struct to be used for both the fixed and float ac3 encoders.
Diffstat (limited to 'libavcodec/ac3enc.c')
-rw-r--r--libavcodec/ac3enc.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 9403bf6443..e71afe62ee 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -273,12 +273,12 @@ static void apply_mdct(AC3EncodeContext *s)
AC3Block *block = &s->blocks[blk];
const SampleType *input_samples = &s->planar_samples[ch][blk * AC3_BLOCK_SIZE];
- apply_window(&s->dsp, s->windowed_samples, input_samples, s->mdct.window, AC3_WINDOW_SIZE);
+ apply_window(&s->dsp, s->windowed_samples, input_samples, s->mdct->window, AC3_WINDOW_SIZE);
block->coeff_shift[ch+1] = normalize_samples(s);
- s->mdct.fft.mdct_calcw(&s->mdct.fft, block->mdct_coef[ch+1],
- s->windowed_samples);
+ s->mdct->fft.mdct_calcw(&s->mdct->fft, block->mdct_coef[ch+1],
+ s->windowed_samples);
}
}
}
@@ -2318,6 +2318,7 @@ static av_cold int ac3_encode_close(AVCodecContext *avctx)
int blk, ch;
AC3EncodeContext *s = avctx->priv_data;
+ av_freep(&s->windowed_samples);
for (ch = 0; ch < s->channels; ch++)
av_freep(&s->planar_samples[ch]);
av_freep(&s->planar_samples);
@@ -2343,7 +2344,8 @@ static av_cold int ac3_encode_close(AVCodecContext *avctx)
av_freep(&block->qmant);
}
- mdct_end(&s->mdct);
+ mdct_end(s->mdct);
+ av_freep(&s->mdct);
av_freep(&avctx->coded_frame);
return 0;
@@ -2598,6 +2600,8 @@ static av_cold int allocate_buffers(AVCodecContext *avctx)
AC3EncodeContext *s = avctx->priv_data;
int channels = s->channels + 1; /* includes coupling channel */
+ FF_ALLOC_OR_GOTO(avctx, s->windowed_samples, AC3_WINDOW_SIZE *
+ sizeof(*s->windowed_samples), alloc_fail);
FF_ALLOC_OR_GOTO(avctx, s->planar_samples, s->channels * sizeof(*s->planar_samples),
alloc_fail);
for (ch = 0; ch < s->channels; ch++) {
@@ -2741,7 +2745,8 @@ static av_cold int ac3_encode_init(AVCodecContext *avctx)
bit_alloc_init(s);
- ret = mdct_init(avctx, &s->mdct, 9);
+ FF_ALLOCZ_OR_GOTO(avctx, s->mdct, sizeof(AC3MDCTContext), init_fail);
+ ret = mdct_init(avctx, s->mdct, 9);
if (ret)
goto init_fail;