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