[FFmpeg-cvslog] avfilter/af_afftdn: refactor noise sampling
Paul B Mahol
git at videolan.org
Tue Mar 15 17:11:28 EET 2022
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Tue Mar 15 14:05:36 2022 +0100| [bd5da8ad96a0fb925df656782e8f544c5ffc4a7b] | committer: Paul B Mahol
avfilter/af_afftdn: refactor noise sampling
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bd5da8ad96a0fb925df656782e8f544c5ffc4a7b
---
libavfilter/af_afftdn.c | 62 ++++++++++++++++++++++++-------------------------
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/libavfilter/af_afftdn.c b/libavfilter/af_afftdn.c
index 0d24b4620a..b1b3402bf2 100644
--- a/libavfilter/af_afftdn.c
+++ b/libavfilter/af_afftdn.c
@@ -35,6 +35,13 @@
#define SFM_FLAGS_SIZE (512)
#define SFM_FLAGS_MASK (SFM_FLAGS_SIZE - 1)
+enum SampleNoiseModes {
+ SAMPLE_NONE,
+ SAMPLE_START,
+ SAMPLE_STOP,
+ NB_SAMPLEMODES
+};
+
enum OutModes {
IN_MODE,
OUT_MODE,
@@ -124,8 +131,7 @@ typedef struct AudioFFTDeNoiseContext {
int channels;
int sample_noise;
- int sample_noise_start;
- int sample_noise_end;
+ int sample_noise_mode;
float sample_rate;
int buffer_length;
int fft_length;
@@ -204,6 +210,13 @@ static const AVOption afftdn_options[] = {
{ "average", "average", 0, AV_OPT_TYPE_CONST, {.i64 = AVERAGE_LINK}, 0, 0, AFR, "link" },
{ "band_multiplier", "set band multiplier",OFFSET(band_multiplier), AV_OPT_TYPE_FLOAT,{.dbl = 1.25}, 0.2,5, AF },
{ "bm", "set band multiplier", OFFSET(band_multiplier), AV_OPT_TYPE_FLOAT,{.dbl = 1.25}, 0.2,5, AF },
+ { "sample_noise", "set sample noise mode",OFFSET(sample_noise_mode),AV_OPT_TYPE_INT,{.i64 = SAMPLE_NONE}, 0, NB_SAMPLEMODES-1, AFR, "sample" },
+ { "sn", "set sample noise mode",OFFSET(sample_noise_mode),AV_OPT_TYPE_INT,{.i64 = SAMPLE_NONE}, 0, NB_SAMPLEMODES-1, AFR, "sample" },
+ { "none", "none", 0, AV_OPT_TYPE_CONST, {.i64 = SAMPLE_NONE}, 0, 0, AFR, "sample" },
+ { "start", "start", 0, AV_OPT_TYPE_CONST, {.i64 = SAMPLE_START}, 0, 0, AFR, "sample" },
+ { "begin", "start", 0, AV_OPT_TYPE_CONST, {.i64 = SAMPLE_START}, 0, 0, AFR, "sample" },
+ { "stop", "stop", 0, AV_OPT_TYPE_CONST, {.i64 = SAMPLE_STOP}, 0, 0, AFR, "sample" },
+ { "end", "stop", 0, AV_OPT_TYPE_CONST, {.i64 = SAMPLE_STOP}, 0, 0, AFR, "sample" },
{ NULL }
};
@@ -1155,13 +1168,13 @@ static int output_frame(AVFilterLink *inlink, AVFrame *in)
}
}
- if (s->sample_noise_start) {
+ if (s->sample_noise_mode == SAMPLE_START) {
for (int ch = 0; ch < inlink->ch_layout.nb_channels; ch++) {
DeNoiseChannel *dnch = &s->dnch[ch];
init_sample_noise(dnch);
}
- s->sample_noise_start = 0;
+ s->sample_noise_mode = SAMPLE_NONE;
s->sample_noise = 1;
}
@@ -1173,7 +1186,7 @@ static int output_frame(AVFilterLink *inlink, AVFrame *in)
}
}
- if (s->sample_noise_end) {
+ if (s->sample_noise_mode == SAMPLE_STOP) {
for (int ch = 0; ch < inlink->ch_layout.nb_channels; ch++) {
DeNoiseChannel *dnch = &s->dnch[ch];
double sample_noise[NB_PROFILE_BANDS];
@@ -1183,7 +1196,7 @@ static int output_frame(AVFilterLink *inlink, AVFrame *in)
set_parameters(s, dnch, 1, 1);
}
s->sample_noise = 0;
- s->sample_noise_end = 0;
+ s->sample_noise_mode = SAMPLE_NONE;
}
s->block_count++;
@@ -1297,36 +1310,23 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
char *res, int res_len, int flags)
{
AudioFFTDeNoiseContext *s = ctx->priv;
- int need_reset = 0;
int ret = 0;
- if (!strcmp(cmd, "sample_noise") ||
- !strcmp(cmd, "sn")) {
- if (!strcmp(args, "start")) {
- s->sample_noise_start = 1;
- s->sample_noise_end = 0;
- } else if (!strcmp(args, "end") ||
- !strcmp(args, "stop")) {
- s->sample_noise_start = 0;
- s->sample_noise_end = 1;
- }
- } else {
- ret = ff_filter_process_command(ctx, cmd, args, res, res_len, flags);
- if (ret < 0)
- return ret;
- need_reset = 1;
- }
+ ret = ff_filter_process_command(ctx, cmd, args, res, res_len, flags);
+ if (ret < 0)
+ return ret;
- if (need_reset) {
- for (int ch = 0; ch < s->channels; ch++) {
- DeNoiseChannel *dnch = &s->dnch[ch];
+ if (!strcmp(cmd, "sample_noise") || !strcmp(cmd, "sn"))
+ return 0;
- dnch->noise_reduction = s->noise_reduction;
- dnch->noise_floor = s->noise_floor;
- dnch->residual_floor = s->residual_floor;
+ for (int ch = 0; ch < s->channels; ch++) {
+ DeNoiseChannel *dnch = &s->dnch[ch];
- set_parameters(s, dnch, 1, 1);
- }
+ dnch->noise_reduction = s->noise_reduction;
+ dnch->noise_floor = s->noise_floor;
+ dnch->residual_floor = s->residual_floor;
+
+ set_parameters(s, dnch, 1, 1);
}
return 0;
More information about the ffmpeg-cvslog
mailing list