simpler delta decreasing algorithm patch by (Jeff Muizelaar <jrmuizel at student dot cs dot uwaterloo dot ca>)

Originally committed as revision 3369 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Jeff Muizelaar 21 years ago committed by Michael Niedermayer
parent d8665b1274
commit e44cad5291
  1. 26
      libavcodec/ac3enc.c

@ -515,7 +515,7 @@ static int encode_exp(uint8_t encoded_exp[N/2],
int nb_exps, int nb_exps,
int exp_strategy) int exp_strategy)
{ {
int group_size, nb_groups, i, j, k, recurse, exp_min, delta; int group_size, nb_groups, i, j, k, exp_min;
uint8_t exp1[N/2]; uint8_t exp1[N/2];
switch(exp_strategy) { switch(exp_strategy) {
@ -550,24 +550,12 @@ static int encode_exp(uint8_t encoded_exp[N/2],
if (exp1[0] > 15) if (exp1[0] > 15)
exp1[0] = 15; exp1[0] = 15;
/* Iterate until the delta constraints between each groups are /* Decrease the delta between each groups to within 2
satisfyed. I'm sure it is possible to find a better algorithm, * so that they can be differentially encoded */
but I am lazy */ for (i=1;i<=nb_groups;i++)
do { exp1[i] = FFMIN(exp1[i], exp1[i-1] + 2);
recurse = 0; for (i=nb_groups-1;i>=0;i--)
for(i=1;i<=nb_groups;i++) { exp1[i] = FFMIN(exp1[i], exp1[i+1] + 2);
delta = exp1[i] - exp1[i-1];
if (delta > 2) {
/* if delta too big, we encode a smaller exponent */
exp1[i] = exp1[i-1] + 2;
} else if (delta < -2) {
/* if delta is too small, we must decrease the previous
exponent, which means we must recurse */
recurse = 1;
exp1[i-1] = exp1[i] + 2;
}
}
} while (recurse);
/* now we have the exponent values the decoder will see */ /* now we have the exponent values the decoder will see */
encoded_exp[0] = exp1[0]; encoded_exp[0] = exp1[0];

Loading…
Cancel
Save