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;
         }
     }
 }