]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/af_astats.c
avfilter/af_aiir: check if frame clone is set
[ffmpeg] / libavfilter / af_astats.c
index 1ec56d72cc07aab3d49c35aeed2297a07f9eca0e..7707f3158d8f76767c0a269bc00c698928d38128 100644 (file)
@@ -174,10 +174,10 @@ static void reset_stats(AudioStatsContext *s)
         ChannelStats *p = &s->chstats[c];
 
         p->min = p->nmin = p->min_sigma_x2 = DBL_MAX;
-        p->max = p->nmax = p->max_sigma_x2 = DBL_MIN;
+        p->max = p->nmax = p->max_sigma_x2 =-DBL_MAX;
         p->min_non_zero = DBL_MAX;
         p->min_diff = DBL_MAX;
-        p->max_diff = DBL_MIN;
+        p->max_diff = 0;
         p->sigma_x = 0;
         p->sigma_x2 = 0;
         p->avg_sigma_x2 = 0;
@@ -196,6 +196,7 @@ static void reset_stats(AudioStatsContext *s)
         p->nb_nans = 0;
         p->nb_infs = 0;
         p->nb_denormals = 0;
+        p->last = NAN;
     }
 }
 
@@ -285,10 +286,12 @@ static inline void update_stat(AudioStatsContext *s, ChannelStats *p, double d,
     p->sigma_x += nd;
     p->sigma_x2 += nd * nd;
     p->avg_sigma_x2 = p->avg_sigma_x2 * s->mult + (1.0 - s->mult) * nd * nd;
-    p->min_diff = FFMIN(p->min_diff, fabs(d - p->last));
-    p->max_diff = FFMAX(p->max_diff, fabs(d - p->last));
-    p->diff1_sum += fabs(d - p->last);
-    p->diff1_sum_x2 += (d - p->last) * (d - p->last);
+    if (!isnan(p->last)) {
+        p->min_diff = FFMIN(p->min_diff, fabs(d - p->last));
+        p->max_diff = FFMAX(p->max_diff, fabs(d - p->last));
+        p->diff1_sum += fabs(d - p->last);
+        p->diff1_sum_x2 += (d - p->last) * (d - p->last);
+    }
     p->last = d;
     p->mask |= i;
     p->imask &= i;
@@ -339,15 +342,15 @@ static void set_metadata(AudioStatsContext *s, AVDictionary **metadata)
     uint64_t mask = 0, imask = 0xFFFFFFFFFFFFFFFF, min_count = 0, max_count = 0, nb_samples = 0;
     uint64_t nb_nans = 0, nb_infs = 0, nb_denormals = 0;
     double min_runs = 0, max_runs = 0,
-           min = DBL_MAX, max = DBL_MIN, min_diff = DBL_MAX, max_diff = 0,
-           nmin = DBL_MAX, nmax = DBL_MIN,
+           min = DBL_MAX, max =-DBL_MAX, min_diff = DBL_MAX, max_diff = 0,
+           nmin = DBL_MAX, nmax =-DBL_MAX,
            max_sigma_x = 0,
            diff1_sum = 0,
            diff1_sum_x2 = 0,
            sigma_x = 0,
            sigma_x2 = 0,
            min_sigma_x2 = DBL_MAX,
-           max_sigma_x2 = DBL_MIN;
+           max_sigma_x2 =-DBL_MAX;
     AVRational depth;
     int c;
 
@@ -496,7 +499,7 @@ static void set_metadata(AudioStatsContext *s, AVDictionary **metadata)
 
 #define UPDATE_STATS(planar, type, sample, normalizer_suffix, int_sample) \
     if ((s->measure_overall | s->measure_perchannel) & ~MEASURE_MINMAXPEAK) {                          \
-        UPDATE_STATS_##planar(type, update_stat(s, p, sample, sample normalizer_suffix, int_sample), s->is_float ? update_float_stat(s, p, sample) : s->is_double ? update_double_stat(s, p, sample) : NULL, );    \
+        UPDATE_STATS_##planar(type, update_stat(s, p, sample, sample normalizer_suffix, int_sample), s->is_float ? update_float_stat(s, p, sample) : s->is_double ? update_double_stat(s, p, sample) : (void)NULL, ); \
     } else {                                                                                           \
         UPDATE_STATS_##planar(type, update_minmax(s, p, sample), , p->nmin = p->min normalizer_suffix; p->nmax = p->max normalizer_suffix;); \
     }
@@ -562,15 +565,15 @@ static void print_stats(AVFilterContext *ctx)
     uint64_t mask = 0, imask = 0xFFFFFFFFFFFFFFFF, min_count = 0, max_count = 0, nb_samples = 0;
     uint64_t nb_nans = 0, nb_infs = 0, nb_denormals = 0;
     double min_runs = 0, max_runs = 0,
-           min = DBL_MAX, max = DBL_MIN, min_diff = DBL_MAX, max_diff = 0,
-           nmin = DBL_MAX, nmax = DBL_MIN,
+           min = DBL_MAX, max =-DBL_MAX, min_diff = DBL_MAX, max_diff = 0,
+           nmin = DBL_MAX, nmax =-DBL_MAX,
            max_sigma_x = 0,
            diff1_sum_x2 = 0,
            diff1_sum = 0,
            sigma_x = 0,
            sigma_x2 = 0,
            min_sigma_x2 = DBL_MAX,
-           max_sigma_x2 = DBL_MIN;
+           max_sigma_x2 =-DBL_MAX;
     AVRational depth;
     int c;