Commit 57856905 authored by lorenm's avatar lorenm

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.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@10624 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 6b4815c7
...@@ -840,14 +840,35 @@ static void encode_residual_fixed(int32_t *res, const int32_t *smp, int n, ...@@ -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;
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment