[FFmpeg-cvslog] avfilter/af_astats: rework sample loops

Marton Balint git at videolan.org
Thu Mar 21 01:54:28 EET 2019


ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Fri Mar  1 23:48:04 2019 +0100| [5cc4b79b295d01c103eb221e4c8899f33b4cd6bc] | committer: Marton Balint

avfilter/af_astats: rework sample loops

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 <cus at passwd.hu>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5cc4b79b295d01c103eb221e4c8899f33b4cd6bc
---

 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) \



More information about the ffmpeg-cvslog mailing list