]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
unroll finite differences to avoid swapping registers.
authorlorenm <lorenm@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 29 Sep 2007 23:44:34 +0000 (23:44 +0000)
committerlorenm <lorenm@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 29 Sep 2007 23:44:34 +0000 (23:44 +0000)
1.5x faster encode_residual_fixed().
overall flac encoding: 3% faster at compression_levels 0-2.

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@10625 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/flacenc.c

index e2627a8f9ef7c7894e8fd532f8796a4e040b6748..fb69561010b4768c76a9f330eef7cd6539e33d05 100644 (file)
@@ -841,33 +841,36 @@ static void encode_residual_fixed(int32_t *res, const int32_t *smp, int n,
             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;
         }
     }
 }