summaryrefslogtreecommitdiff
path: root/libavcodec/ac3enc.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2011-01-15 01:59:15 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2011-01-15 01:59:15 +0000
commit7d87d56ff810b921537138f91048a932065260a1 (patch)
treee348e6c70e1ac61865e8251e467314ed044e5027 /libavcodec/ac3enc.c
parent5bff8590f353c3a47b62c67ff40f7af4cf5b5528 (diff)
Take advantage of per-channel exponent and exponent strategy layout to
simplify and speed up encode_exponents(). 8% faster in function. Originally committed as revision 26357 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ac3enc.c')
-rw-r--r--libavcodec/ac3enc.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 904bd8267c..61986be8f3 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -587,31 +587,36 @@ static void encode_exponents_blk_ch(uint8_t *exp, int nb_exps, int exp_strategy)
*/
static void encode_exponents(AC3EncodeContext *s)
{
- int blk, blk1, blk2, ch;
- AC3Block *block, *block1, *block2;
+ int blk, blk1, ch;
+ uint8_t *exp, *exp1, *exp_strategy;
+ int nb_coefs;
for (ch = 0; ch < s->channels; ch++) {
+ exp = s->blocks[0].exp[ch];
+ exp_strategy = s->exp_strategy[ch];
+ nb_coefs = s->nb_coefs[ch];
+
blk = 0;
- block = &s->blocks[0];
while (blk < AC3_MAX_BLOCKS) {
blk1 = blk + 1;
- block1 = block + 1;
+ exp1 = exp + AC3_MAX_COEFS;
/* for the EXP_REUSE case we select the min of the exponents */
- while (blk1 < AC3_MAX_BLOCKS && s->exp_strategy[ch][blk1] == EXP_REUSE) {
- exponent_min(block->exp[ch], block1->exp[ch], s->nb_coefs[ch]);
+ while (blk1 < AC3_MAX_BLOCKS && exp_strategy[blk1] == EXP_REUSE) {
+ exponent_min(exp, exp1, nb_coefs);
blk1++;
- block1++;
+ exp1 += AC3_MAX_COEFS;
}
- encode_exponents_blk_ch(block->exp[ch], s->nb_coefs[ch],
- s->exp_strategy[ch][blk]);
+ encode_exponents_blk_ch(exp, nb_coefs,
+ exp_strategy[blk]);
/* copy encoded exponents for reuse case */
- block2 = block + 1;
- for (blk2 = blk+1; blk2 < blk1; blk2++, block2++) {
- memcpy(block2->exp[ch], block->exp[ch],
- s->nb_coefs[ch] * sizeof(uint8_t));
+ exp1 = exp + AC3_MAX_COEFS;
+ while (blk < blk1-1) {
+ memcpy(exp1, exp, nb_coefs * sizeof(*exp));
+ exp1 += AC3_MAX_COEFS;
+ blk++;
}
blk = blk1;
- block = block1;
+ exp = exp1;
}
}
}