mirror of https://git.ffmpeg.org/ffmpeg.git
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
This commit is contained in:
parent
d8665b1274
commit
e44cad5291
|
@ -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,25 +550,13 @@ 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];
|
||||||
k = 1;
|
k = 1;
|
||||||
|
|
Loading…
Reference in New Issue