Skip to content

Commit

Permalink
avfilter: add anlmf filter
Browse files Browse the repository at this point in the history
  • Loading branch information
richardpl committed Dec 25, 2021
1 parent 2497a45 commit 209488c
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 4 deletions.
1 change: 1 addition & 0 deletions Changelog
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ version <next>:
- adynamicequalizer audio filter
- yadif_videotoolbox filter
- VideoToolbox ProRes encoder
- anlmf audio filter


version 4.4:
Expand Down
4 changes: 2 additions & 2 deletions doc/filters.texi
Original file line number Diff line number Diff line change
Expand Up @@ -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}.

@section anlms
Apply Normalized Least-Mean-Squares algorithm to the first audio stream using the second audio stream.
@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,
Expand Down
1 change: 1 addition & 0 deletions libavfilter/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 21 additions & 1 deletion libavfilter/af_anlms.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ typedef struct AudioNLMSContext {

AVFrame *frame[2];

int anlmf;

AVFloatDSPContext *fdsp;
} AudioNLMSContext;

Expand All @@ -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)
{
Expand Down Expand Up @@ -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));

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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,
};
1 change: 1 addition & 0 deletions libavfilter/allfilters.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion libavfilter/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down

0 comments on commit 209488c

Please sign in to comment.