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,46 +912,31 @@ 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 (n = 0; n < NB_PROFILE_BANDS; n++) for (int 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);
i = 0; for (int m = 0, i = 0; m < NB_PROFILE_BANDS; m++) {
for (int m = 0; m < NB_PROFILE_BANDS; m++) {
sum = 0.0; sum = 0.0;
for (n = 0; n < SOLVE_SIZE; n++) for (int n = 0; n < SOLVE_SIZE; n++)
sum += s->matrix_c[i++] * s->vector_b[n]; sum += s->matrix_c[i++] * s->vector_b[n];
temp[m] = sum; 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;
for (int m = 0; m < NB_PROFILE_BANDS; m++)
temp[m] -= d1;
new_noise_floor = d1;
if (new_profile) {
av_log(s, AV_LOG_INFO, "bn="); 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++) {
new_band_noise[m] = temp[m]; new_band_noise[m] = temp[m];
@@ -962,10 +947,6 @@ static void set_noise_profile(AudioFFTDeNoiseContext *s,
memcpy(dnch->band_noise, new_band_noise, sizeof(new_band_noise)); memcpy(dnch->band_noise, new_band_noise, sizeof(new_band_noise));
} }
if (s->track_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)
{ {
AudioFFTDeNoiseContext *s = ctx->priv; AudioFFTDeNoiseContext *s = ctx->priv;
@@ -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;