Mercurial > libavcodec.hg
changeset 5739:832a3152d38e libavcodec
unroll finite differences to avoid swapping registers.
1.5x faster encode_residual_fixed().
overall flac encoding: 3% faster at compression_levels 0-2.
author | lorenm |
---|---|
date | Sat, 29 Sep 2007 23:44:34 +0000 |
parents | c1a4aae5adb4 |
children | 4d62c0055174 |
files | flacenc.c |
diffstat | 1 files changed, 12 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/flacenc.c Sat Sep 29 23:21:57 2007 +0000 +++ b/flacenc.c Sat Sep 29 23:44:34 2007 +0000 @@ -841,33 +841,36 @@ res[i]= smp[i] - smp[i-1]; }else if(order==2){ int a = smp[order-1] - smp[order-2]; - for(i=order; i<n; i++) { + for(i=order; i<n; i+=2) { int b = smp[i] - smp[i-1]; res[i]= b - a; - a = b; + a = smp[i+1] - smp[i]; + res[i+1]= a - b; } }else if(order==3){ int a = smp[order-1] - smp[order-2]; int c = smp[order-1] - 2*smp[order-2] + smp[order-3]; - for(i=order; i<n; i++) { + for(i=order; i<n; i+=2) { int b = smp[i] - smp[i-1]; int d = b - a; res[i]= d - c; - a = b; - c = d; + a = smp[i+1] - smp[i]; + c = a - b; + res[i+1]= c - d; } }else{ int a = smp[order-1] - smp[order-2]; 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++) { + for(i=order; i<n; i+=2) { 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; + a = smp[i+1] - smp[i]; + c = a - b; + e = c - d; + res[i+1]= e - f; } } }