[FFmpeg-cvslog] avfilter/af_anlms: improve documentation and extend option

Paul B Mahol git at videolan.org
Mon May 1 21:09:34 EEST 2023


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Mon May  1 20:01:50 2023 +0200| [561746591660b456e092324f03d393d6dd9147b1] | committer: Paul B Mahol

avfilter/af_anlms: improve documentation and extend option

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

 doc/filters.texi       |  7 +++++--
 libavfilter/af_anlms.c | 11 +++++++----
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 48b321b621..a63304ccd9 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -2674,10 +2674,13 @@ Pass the 1st input.
 Pass the 2nd input.
 
 @item o
-Pass filtered samples.
+Pass difference between desired, 2nd input and error signal estimate.
 
 @item n
-Pass difference between desired and filtered samples.
+Pass difference between input, 1st input and error signal estimate.
+
+ at item e
+Pass error signal estimated samples.
 
 Default value is @var{o}.
 @end table
diff --git a/libavfilter/af_anlms.c b/libavfilter/af_anlms.c
index a2c854b0b8..5b412b87cc 100644
--- a/libavfilter/af_anlms.c
+++ b/libavfilter/af_anlms.c
@@ -34,6 +34,7 @@ enum OutModes {
     DESIRED_MODE,
     OUT_MODE,
     NOISE_MODE,
+    ERROR_MODE,
     NB_OMODES
 };
 
@@ -73,6 +74,7 @@ static const AVOption anlms_options[] = {
     {  "d", "desired",               0,          AV_OPT_TYPE_CONST,    {.i64=DESIRED_MODE}, 0, 0, AT, "mode" },
     {  "o", "output",                0,          AV_OPT_TYPE_CONST,    {.i64=OUT_MODE},     0, 0, AT, "mode" },
     {  "n", "noise",                 0,          AV_OPT_TYPE_CONST,    {.i64=NOISE_MODE},   0, 0, AT, "mode" },
+    {  "e", "error",                 0,          AV_OPT_TYPE_CONST,    {.i64=ERROR_MODE},   0, 0, AT, "mode" },
     { NULL }
 };
 
@@ -102,7 +104,7 @@ static float process_sample(AudioNLMSContext *s, float input, float desired,
     const int order = s->order;
     const float leakage = s->leakage;
     const float mu = s->mu;
-    const float a = 1.f - leakage * mu;
+    const float a = 1.f - leakage;
     float sum, output, e, norm, b;
     int offset = *offsetp;
 
@@ -116,7 +118,7 @@ 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;
+        b *= e * e;
 
     memcpy(tmp, delay + offset, order * sizeof(float));
 
@@ -129,8 +131,9 @@ static float process_sample(AudioNLMSContext *s, float input, float desired,
     switch (s->output_mode) {
     case IN_MODE:       output = input;         break;
     case DESIRED_MODE:  output = desired;       break;
-    case OUT_MODE: /*output = output;*/         break;
-    case NOISE_MODE: output = desired - output; break;
+    case OUT_MODE:   output = desired - output; break;
+    case NOISE_MODE: output = input - output;   break;
+    case ERROR_MODE:                            break;
     }
     return output;
 }



More information about the ffmpeg-cvslog mailing list