[FFmpeg-cvslog] avfilter/af_afftdn: change noise profile to floating point precision

Paul B Mahol git at videolan.org
Sat Mar 12 13:11:44 EET 2022


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Mar 12 12:03:15 2022 +0100| [386e5e4cfcd2e1375ca028631cea172e8ea16e08] | committer: Paul B Mahol

avfilter/af_afftdn: change noise profile to floating point precision

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

 libavfilter/af_afftdn.c | 41 +++++++++++++++++++++--------------------
 1 file changed, 21 insertions(+), 20 deletions(-)

diff --git a/libavfilter/af_afftdn.c b/libavfilter/af_afftdn.c
index cc4f95a4c5..2c642f3ae3 100644
--- a/libavfilter/af_afftdn.c
+++ b/libavfilter/af_afftdn.c
@@ -50,7 +50,7 @@ enum NoiseType {
 };
 
 typedef struct DeNoiseChannel {
-    int         band_noise[NB_PROFILE_BANDS];
+    double      band_noise[NB_PROFILE_BANDS];
     double      noise_band_auto_var[NB_PROFILE_BANDS];
     double      noise_band_sample[NB_PROFILE_BANDS];
     double     *amt;
@@ -181,9 +181,9 @@ static const AVOption afftdn_options[] = {
 
 AVFILTER_DEFINE_CLASS(afftdn);
 
-static int get_band_noise(AudioFFTDeNoiseContext *s,
-                          int band, double a,
-                          double b, double c)
+static double get_band_noise(AudioFFTDeNoiseContext *s,
+                             int band, double a,
+                             double b, double c)
 {
     double d1, d2, d3;
 
@@ -194,7 +194,7 @@ static int get_band_noise(AudioFFTDeNoiseContext *s,
     d3 = s->band_centre[band] / c;
     d3 = 10.0 * log(1.0 + d3 * d3) / M_LN10;
 
-    return lrint(-d1 + d2 - d3);
+    return -d1 + d2 - d3;
 }
 
 static void factor(double *array, int size)
@@ -230,9 +230,9 @@ static void solve(double *matrix, double *vector, int size)
     }
 }
 
-static int process_get_band_noise(AudioFFTDeNoiseContext *s,
-                                  DeNoiseChannel *dnch,
-                                  int band)
+static double process_get_band_noise(AudioFFTDeNoiseContext *s,
+                                     DeNoiseChannel *dnch,
+                                     int band)
 {
     double product, sum, f;
     int i = 0;
@@ -257,7 +257,7 @@ static int process_get_band_noise(AudioFFTDeNoiseContext *s,
         product *= f;
     }
 
-    return lrint(sum);
+    return sum;
 }
 
 static void calculate_sfm(AudioFFTDeNoiseContext *s,
@@ -537,7 +537,8 @@ static void read_custom_noise(AudioFFTDeNoiseContext *s, int ch)
 {
     DeNoiseChannel *dnch = &s->dnch[ch];
     char *p, *arg, *saveptr = NULL;
-    int i, ret, band_noise[NB_PROFILE_BANDS] = { 0 };
+    double band_noise[NB_PROFILE_BANDS] = { 0.f };
+    int ret;
 
     if (!s->band_noise_str)
         return;
@@ -546,19 +547,19 @@ static void read_custom_noise(AudioFFTDeNoiseContext *s, int ch)
     if (!p)
         return;
 
-    for (i = 0; i < NB_PROFILE_BANDS; i++) {
+    for (int i = 0; i < NB_PROFILE_BANDS; i++) {
         if (!(arg = av_strtok(p, "| ", &saveptr)))
             break;
 
         p = NULL;
 
-        ret = av_sscanf(arg, "%d", &band_noise[i]);
+        ret = av_sscanf(arg, "%f", &band_noise[i]);
         if (ret != 1) {
-            av_log(s, AV_LOG_ERROR, "Custom band noise must be integer.\n");
+            av_log(s, AV_LOG_ERROR, "Custom band noise must be float.\n");
             break;
         }
 
-        band_noise[i] = av_clip(band_noise[i], -24, 24);
+        band_noise[i] = av_clipd(band_noise[i], -24., 24.);
     }
 
     av_free(p);
@@ -594,7 +595,7 @@ static void set_parameters(AudioFFTDeNoiseContext *s)
     }
 }
 
-static void reduce_mean(int *band_noise)
+static void reduce_mean(double *band_noise)
 {
     double mean = 0.f;
 
@@ -683,7 +684,7 @@ static int config_input(AVFilterLink *inlink)
         switch (s->noise_type) {
         case WHITE_NOISE:
             for (i = 0; i < NB_PROFILE_BANDS; i++)
-                dnch->band_noise[i] = 0;
+                dnch->band_noise[i] = 0.;
             break;
         case VINYL_NOISE:
             for (i = 0; i < NB_PROFILE_BANDS; i++)
@@ -956,7 +957,7 @@ static void set_noise_profile(AudioFFTDeNoiseContext *s,
                               double *sample_noise,
                               int new_profile)
 {
-    int new_band_noise[NB_PROFILE_BANDS];
+    double new_band_noise[NB_PROFILE_BANDS];
     double temp[NB_PROFILE_BANDS];
     double sum = 0.0, d1;
     float new_noise_floor;
@@ -995,9 +996,9 @@ static void set_noise_profile(AudioFFTDeNoiseContext *s,
     if (new_profile) {
         av_log(s, AV_LOG_INFO, "bn=");
         for (int m = 0; m < NB_PROFILE_BANDS; m++) {
-            new_band_noise[m] = lrint(temp[m]);
-            new_band_noise[m] = av_clip(new_band_noise[m], -24, 24);
-            av_log(s, AV_LOG_INFO, "%d ", new_band_noise[m]);
+            new_band_noise[m] = temp[m];
+            new_band_noise[m] = av_clipd(new_band_noise[m], -24.0, 24.0);
+            av_log(s, AV_LOG_INFO, "%f ", new_band_noise[m]);
         }
         av_log(s, AV_LOG_INFO, "\n");
         memcpy(dnch->band_noise, new_band_noise, sizeof(new_band_noise));



More information about the ffmpeg-cvslog mailing list