The channel loop is now the outer loop for both planar and interleaved. This is
needed by the next patch, and the speed difference is negligable if any.

Signed-off-by: Marton Balint <c...@passwd.hu>
---
 libavfilter/af_astats.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/libavfilter/af_astats.c b/libavfilter/af_astats.c
index f45558909a..9915a7965e 100644
--- a/libavfilter/af_astats.c
+++ b/libavfilter/af_astats.c
@@ -410,17 +410,18 @@ static void set_metadata(AudioStatsContext *s, 
AVDictionary **metadata)
     for (int c = 0; c < channels; c++) {                                       
 \
         ChannelStats *p = &s->chstats[c];                                      
 \
         const type *src = (const type *)data[c];                               
 \
-        for (int i = 0; i < samples; i++, src++)                               
 \
+        const type * const srcend = src + samples;                             
 \
+        for (; src < srcend; src++)                                            
 \
             update_stat(s, p, double_sample, normalized_sample, int_sample);   
 \
     }
 
-#define UPDATE_STATS_I(type, double_sample, normalized_sample, int_sample)     
               \
-    {                                                                          
               \
-        const type *src = (const type *)data[0];                               
               \
-        for (int i = 0; i < samples; i++) {                                    
               \
-            for (int c = 0; c < channels; c++, src++)                          
               \
-                update_stat(s, &s->chstats[c], double_sample, 
normalized_sample, int_sample); \
-        }                                                                      
               \
+#define UPDATE_STATS_I(type, double_sample, normalized_sample, int_sample)     
 \
+    for (int c = 0; c < channels; c++) {                                       
 \
+        ChannelStats *p = &s->chstats[c];                                      
 \
+        const type *src = (const type *)data[0];                               
 \
+        const type * const srcend = src + samples * channels;                  
 \
+        for (src += c; src < srcend; src += channels)                          
 \
+            update_stat(s, p, double_sample, normalized_sample, int_sample);   
 \
     }
 
 #define UPDATE_STATS(planar, type, sample, normalizer_suffix, int_sample) \
-- 
2.16.4

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to