summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2010-12-14 14:52:53 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2010-12-14 14:52:53 +0000
commit152cc52803222e18aaf808b4903c6960fd565aac (patch)
treeef02f66eeaa4a4943e557a6193aea7e2b5e0761d
parent98f6ee445369ce0983be19bf4524e4cfe20fec6e (diff)
Separate functionally different calculations in ac3_encode_frame().
Originally committed as revision 25988 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/ac3enc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index a6353cc0f8..f6cbbe726c 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -1114,9 +1114,8 @@ static int ac3_encode_frame(AVCodecContext *avctx,
AC3_BLOCK_SIZE * sizeof(planar_samples[0][0]));
}
- frame_bits = 0;
+ /* apply MDCT */
for (ch = 0; ch < s->channels; ch++) {
- /* fixed mdct to the six sub blocks & exponent computation */
for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
int16_t *input_samples = &planar_samples[ch][blk * AC3_BLOCK_SIZE];
@@ -1137,7 +1136,12 @@ static int ac3_encode_frame(AVCodecContext *avctx,
/* do the MDCT */
mdct512(mdct_coef[blk][ch], windowed_samples);
+ }
+ }
+ /* extract exponents */
+ for (ch = 0; ch < s->channels; ch++) {
+ for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
/* compute "exponents". We take into account the normalization there */
for (i = 0; i < AC3_MAX_COEFS; i++) {
int e;
@@ -1154,9 +1158,16 @@ static int ac3_encode_frame(AVCodecContext *avctx,
exp[blk][ch][i] = e;
}
}
+ }
+ /* compute exponent strategies */
+ for (ch = 0; ch < s->channels; ch++) {
compute_exp_strategy_ch(exp_strategy, exp, ch, ch == s->lfe_channel);
+ }
+ /* encode exponents */
+ frame_bits = 0;
+ for (ch = 0; ch < s->channels; ch++) {
/* compute the exponents as the decoder will see them. The
EXP_REUSE case must be handled carefully : we select the
min of the exponents */