[FFmpeg-cvslog] avfilter: add anlmf filter

Paul B Mahol git at videolan.org
Sat Dec 25 12:34:00 EET 2021


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Dec 18 16:04:40 2021 +0100| [209488ccb0f38fbb384a4821f8c170986255d21b] | committer: Paul B Mahol

avfilter: add anlmf filter

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

 Changelog                |  1 +
 doc/filters.texi         |  4 ++--
 libavfilter/Makefile     |  1 +
 libavfilter/af_anlms.c   | 22 +++++++++++++++++++++-
 libavfilter/allfilters.c |  1 +
 libavfilter/version.h    |  2 +-
 6 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/Changelog b/Changelog
index a613e2c5a6..edb4152d0f 100644
--- a/Changelog
+++ b/Changelog
@@ -43,6 +43,7 @@ version <next>:
 - adynamicequalizer audio filter
 - yadif_videotoolbox filter
 - VideoToolbox ProRes encoder
+- anlmf audio filter
 
 
 version 4.4:
diff --git a/doc/filters.texi b/doc/filters.texi
index da95688c53..05d4b1a56e 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -2301,8 +2301,8 @@ Set smooth factor. Default value is @var{11}. Allowed range is from @var{1} to @
 
 This filter supports the all above options as @ref{commands}.
 
- at section anlms
-Apply Normalized Least-Mean-Squares algorithm to the first audio stream using the second audio stream.
+ at section anlmf, anlms
+Apply Normalized Least-Mean-(Squares|Fourth) algorithm to the first audio stream using the second audio stream.
 
 This adaptive filter is used to mimic a desired filter by finding the filter coefficients that
 relate to producing the least mean square of the error signal (difference between the desired,
diff --git a/libavfilter/Makefile b/libavfilter/Makefile
index cb328c2bf8..090944a99c 100644
--- a/libavfilter/Makefile
+++ b/libavfilter/Makefile
@@ -71,6 +71,7 @@ OBJS-$(CONFIG_AMIX_FILTER)                   += af_amix.o
 OBJS-$(CONFIG_AMULTIPLY_FILTER)              += af_amultiply.o
 OBJS-$(CONFIG_ANEQUALIZER_FILTER)            += af_anequalizer.o
 OBJS-$(CONFIG_ANLMDN_FILTER)                 += af_anlmdn.o
+OBJS-$(CONFIG_ANLMF_FILTER)                  += af_anlms.o
 OBJS-$(CONFIG_ANLMS_FILTER)                  += af_anlms.o
 OBJS-$(CONFIG_ANULL_FILTER)                  += af_anull.o
 OBJS-$(CONFIG_APAD_FILTER)                   += af_apad.o
diff --git a/libavfilter/af_anlms.c b/libavfilter/af_anlms.c
index f1f82b491d..f20e3c0e82 100644
--- a/libavfilter/af_anlms.c
+++ b/libavfilter/af_anlms.c
@@ -54,6 +54,8 @@ typedef struct AudioNLMSContext {
 
     AVFrame *frame[2];
 
+    int anlmf;
+
     AVFloatDSPContext *fdsp;
 } AudioNLMSContext;
 
@@ -74,7 +76,7 @@ static const AVOption anlms_options[] = {
     { NULL }
 };
 
-AVFILTER_DEFINE_CLASS(anlms);
+AVFILTER_DEFINE_CLASS_EXT(anlms, "anlm(f|s)", anlms_options);
 
 static int query_formats(AVFilterContext *ctx)
 {
@@ -130,6 +132,8 @@ static float process_sample(AudioNLMSContext *s, float input, float desired,
 
     norm = s->eps + sum;
     b = mu * e / norm;
+    if (s->anlmf)
+        b *= 4.f * e * e;
 
     memcpy(tmp, delay + offset, order * sizeof(float));
 
@@ -241,6 +245,7 @@ static int config_output(AVFilterLink *outlink)
     AVFilterContext *ctx = outlink->src;
     AudioNLMSContext *s = ctx->priv;
 
+    s->anlmf = !strcmp(ctx->filter->name, "anlmf");
     s->kernel_size = FFALIGN(s->order, 16);
 
     if (!s->offset)
@@ -312,3 +317,18 @@ const AVFilter ff_af_anlms = {
     .flags          = AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
 };
+
+const AVFilter ff_af_anlmf = {
+    .name           = "anlmf",
+    .description    = NULL_IF_CONFIG_SMALL("Apply Normalized Least-Mean-Fourth algorithm to first audio stream."),
+    .priv_size      = sizeof(AudioNLMSContext),
+    .priv_class     = &anlms_class,
+    .init           = init,
+    .uninit         = uninit,
+    .activate       = activate,
+    FILTER_INPUTS(inputs),
+    FILTER_OUTPUTS(outputs),
+    FILTER_QUERY_FUNC(query_formats),
+    .flags          = AVFILTER_FLAG_SLICE_THREADS,
+    .process_command = ff_filter_process_command,
+};
diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c
index 26f1c73505..caa755320e 100644
--- a/libavfilter/allfilters.c
+++ b/libavfilter/allfilters.c
@@ -64,6 +64,7 @@ extern const AVFilter ff_af_amix;
 extern const AVFilter ff_af_amultiply;
 extern const AVFilter ff_af_anequalizer;
 extern const AVFilter ff_af_anlmdn;
+extern const AVFilter ff_af_anlmf;
 extern const AVFilter ff_af_anlms;
 extern const AVFilter ff_af_anull;
 extern const AVFilter ff_af_apad;
diff --git a/libavfilter/version.h b/libavfilter/version.h
index 0253c911be..a4066fd883 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -30,7 +30,7 @@
 #include "libavutil/version.h"
 
 #define LIBAVFILTER_VERSION_MAJOR   8
-#define LIBAVFILTER_VERSION_MINOR  20
+#define LIBAVFILTER_VERSION_MINOR  21
 #define LIBAVFILTER_VERSION_MICRO 100
 
 



More information about the ffmpeg-cvslog mailing list