[FFmpeg-devel] [PATCH 1/2] avcodec/fft_template: improve performance of the ff_fft_init in fft_template

Steven Liu lq at chinaffmpeg.org
Sun Dec 16 15:19:17 EET 2018


move the two if condition out of the loop, that can less n-1 times than condition
in loop.

Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
---
 libavcodec/fft_template.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/libavcodec/fft_template.c b/libavcodec/fft_template.c
index 762c014bc8..2d97534505 100644
--- a/libavcodec/fft_template.c
+++ b/libavcodec/fft_template.c
@@ -261,17 +261,26 @@ av_cold int ff_fft_init(FFTContext *s, int nbits, int inverse)
     if (s->fft_permutation == FF_FFT_PERM_AVX) {
         fft_perm_avx(s);
     } else {
+        if (s->revtab) {
         for(i=0; i<n; i++) {
             int k;
             j = i;
             if (s->fft_permutation == FF_FFT_PERM_SWAP_LSBS)
                 j = (j&~3) | ((j>>1)&1) | ((j<<1)&2);
             k = -split_radix_permutation(i, n, s->inverse) & (n-1);
-            if (s->revtab)
                 s->revtab[k] = j;
-            if (s->revtab32)
-                s->revtab32[k] = j;
         }
+        }
+            if (s->revtab32) {
+                for(i=0; i<n; i++) {
+                    int k;
+                    j = i;
+                    if (s->fft_permutation == FF_FFT_PERM_SWAP_LSBS)
+                        j = (j&~3) | ((j>>1)&1) | ((j<<1)&2);
+                        k = -split_radix_permutation(i, n, s->inverse) & (n-1);
+                s->revtab32[k] = j;
+            }
+            }
     }
 
     return 0;
-- 
2.15.1





More information about the ffmpeg-devel mailing list