mirror of https://git.ffmpeg.org/ffmpeg.git
encode_residual_fixed(): replace FIR with finite differences.
4x faster order 2, 3.5x order 3, 3x order 4. overall flac encoding: 35% faster at compression_levels 0-2, no effect at higher levels. Originally committed as revision 10624 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
0b04ebb326
commit
a309dce75f
|
@ -840,14 +840,35 @@ static void encode_residual_fixed(int32_t *res, const int32_t *smp, int n,
|
||||||
for(i=order; i<n; i++)
|
for(i=order; i<n; i++)
|
||||||
res[i]= smp[i] - smp[i-1];
|
res[i]= smp[i] - smp[i-1];
|
||||||
}else if(order==2){
|
}else if(order==2){
|
||||||
for(i=order; i<n; i++)
|
int a = smp[order-1] - smp[order-2];
|
||||||
res[i]= smp[i] - 2*smp[i-1] + smp[i-2];
|
for(i=order; i<n; i++) {
|
||||||
|
int b = smp[i] - smp[i-1];
|
||||||
|
res[i]= b - a;
|
||||||
|
a = b;
|
||||||
|
}
|
||||||
}else if(order==3){
|
}else if(order==3){
|
||||||
for(i=order; i<n; i++)
|
int a = smp[order-1] - smp[order-2];
|
||||||
res[i]= smp[i] - 3*smp[i-1] + 3*smp[i-2] - smp[i-3];
|
int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
|
||||||
|
for(i=order; i<n; i++) {
|
||||||
|
int b = smp[i] - smp[i-1];
|
||||||
|
int d = b - a;
|
||||||
|
res[i]= d - c;
|
||||||
|
a = b;
|
||||||
|
c = d;
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
for(i=order; i<n; i++)
|
int a = smp[order-1] - smp[order-2];
|
||||||
res[i]= smp[i] - 4*smp[i-1] + 6*smp[i-2] - 4*smp[i-3] + smp[i-4];
|
int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
|
||||||
|
int e = smp[order-1] - 3*smp[order-2] + 3*smp[order-3] - smp[order-4];
|
||||||
|
for(i=order; i<n; i++) {
|
||||||
|
int b = smp[i] - smp[i-1];
|
||||||
|
int d = b - a;
|
||||||
|
int f = d - c;
|
||||||
|
res[i]= f - e;
|
||||||
|
a = b;
|
||||||
|
c = d;
|
||||||
|
e = f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue