1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00

avfilter/af_afftdn: refactor set_noise_profile()

This commit is contained in:
Paul B Mahol
2022-03-18 10:38:15 +01:00
parent ef8283fe1c
commit 28447a4290

View File

@@ -912,58 +912,39 @@ static void finish_sample_noise(AudioFFTDeNoiseContext *s,
static void set_noise_profile(AudioFFTDeNoiseContext *s, static void set_noise_profile(AudioFFTDeNoiseContext *s,
DeNoiseChannel *dnch, DeNoiseChannel *dnch,
double *sample_noise, double *sample_noise)
int new_profile)
{ {
double new_band_noise[NB_PROFILE_BANDS]; double new_band_noise[NB_PROFILE_BANDS];
double temp[NB_PROFILE_BANDS]; double temp[NB_PROFILE_BANDS];
double sum = 0.0, d1; double sum = 0.0;
float new_noise_floor;
int i = 0, n;
for (int m = 0; m < NB_PROFILE_BANDS; m++) for (int m = 0; m < NB_PROFILE_BANDS; m++)
temp[m] = sample_noise[m]; temp[m] = sample_noise[m];
if (new_profile) { for (int m = 0, i = 0; m < SOLVE_SIZE; m++) {
for (int m = 0; m < SOLVE_SIZE; m++) { sum = 0.0;
sum = 0.0; for (int n = 0; n < NB_PROFILE_BANDS; n++)
for (n = 0; n < NB_PROFILE_BANDS; n++) sum += s->matrix_b[i++] * temp[n];
sum += s->matrix_b[i++] * temp[n]; s->vector_b[m] = sum;
s->vector_b[m] = sum; }
} solve(s->matrix_a, s->vector_b, SOLVE_SIZE);
solve(s->matrix_a, s->vector_b, SOLVE_SIZE); for (int m = 0, i = 0; m < NB_PROFILE_BANDS; m++) {
i = 0; sum = 0.0;
for (int m = 0; m < NB_PROFILE_BANDS; m++) { for (int n = 0; n < SOLVE_SIZE; n++)
sum = 0.0; sum += s->matrix_c[i++] * s->vector_b[n];
for (n = 0; n < SOLVE_SIZE; n++) temp[m] = sum;
sum += s->matrix_c[i++] * s->vector_b[n];
temp[m] = sum;
}
} }
sum = 0.0; reduce_mean(temp);
for (int m = 0; m < NB_PROFILE_BANDS; m++)
sum += temp[m];
d1 = sum / NB_PROFILE_BANDS; av_log(s, AV_LOG_INFO, "bn=");
for (int m = 0; m < NB_PROFILE_BANDS; m++) for (int m = 0; m < NB_PROFILE_BANDS; m++) {
temp[m] -= d1; new_band_noise[m] = temp[m];
new_band_noise[m] = av_clipd(new_band_noise[m], -24.0, 24.0);
new_noise_floor = d1; av_log(s, AV_LOG_INFO, "%f ", new_band_noise[m]);
if (new_profile) {
av_log(s, AV_LOG_INFO, "bn=");
for (int m = 0; m < NB_PROFILE_BANDS; 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));
} }
av_log(s, AV_LOG_INFO, "\n");
if (s->track_noise) memcpy(dnch->band_noise, new_band_noise, sizeof(new_band_noise));
dnch->noise_floor = new_noise_floor;
} }
static int filter_channel(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) static int filter_channel(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
@@ -1074,7 +1055,7 @@ static int output_frame(AVFilterLink *inlink, AVFrame *in)
double sample_noise[NB_PROFILE_BANDS]; double sample_noise[NB_PROFILE_BANDS];
finish_sample_noise(s, dnch, sample_noise); finish_sample_noise(s, dnch, sample_noise);
set_noise_profile(s, dnch, sample_noise, 1); set_noise_profile(s, dnch, sample_noise);
set_parameters(s, dnch, 1, 1); set_parameters(s, dnch, 1, 1);
} }
s->sample_noise = 0; s->sample_noise = 0;