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