[SCM] libav/experimental: optimize encode_residual_lpc() 37%/45%/90% faster on core2/k8/p4, making flac encoding overall 15%/17%/40% faster at compression_level>=8 (less at low levels).

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:07:32 UTC 2013


The following commit has been merged in the experimental branch:
commit f74471e043c6788a59bf6e8143f71d3968353152
Author: Loren Merritt <lorenm at u.washington.edu>
Date:   Tue Sep 25 23:30:29 2007 +0000

    optimize encode_residual_lpc()
    37%/45%/90% faster on core2/k8/p4, making flac encoding overall 15%/17%/40% faster at compression_level>=8 (less at low levels).
    
    Originally committed as revision 10585 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
index 9dd6c7e..8dd55ea 100644
--- a/libavcodec/flacenc.c
+++ b/libavcodec/flacenc.c
@@ -838,17 +838,22 @@ static void encode_residual_lpc(int32_t *res, const int32_t *smp, int n,
                                 int order, const int32_t *coefs, int shift)
 {
     int i, j;
-    int32_t pred;
 
     for(i=0; i<order; i++) {
         res[i] = smp[i];
     }
-    for(i=order; i<n; i++) {
-        pred = 0;
-        for(j=0; j<order; j++) {
-            pred += coefs[j] * smp[i-j-1];
+    for(i=order; i<n; i+=2) {
+        int32_t c = coefs[0];
+        int32_t p0 = 0, p1 = c*smp[i];
+        for(j=1; j<order; j++) {
+            int32_t s = smp[i-j];
+            p0 += c*s;
+            c = coefs[j];
+            p1 += c*s;
         }
-        res[i] = smp[i] - (pred >> shift);
+        p0 += c*smp[i-order];
+        res[i+0] = smp[i+0] - (p0 >> shift);
+        res[i+1] = smp[i+1] - (p1 >> shift);
     }
 }
 

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list