[FFmpeg-devel] [PATCH] avfilter: add compensationdelay filter

Michael Niedermayer michaelni at gmx.at
Wed Nov 25 01:42:05 CET 2015


On Tue, Nov 24, 2015 at 01:18:20PM +0100, Paul B Mahol wrote:
> Subject: [PATCH] avfilter: add compensation delay line filter
> 
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
>  doc/filters.texi                   |  42 ++++++++
>  libavfilter/Makefile               |   1 +
>  libavfilter/af_compensationdelay.c | 196 +++++++++++++++++++++++++++++++++++++
>  libavfilter/allfilters.c           |   1 +
>  4 files changed, 240 insertions(+)
>  create mode 100644 libavfilter/af_compensationdelay.c
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index f351390..d8b2fb5 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -1628,6 +1628,48 @@
> compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
>  @end example
>  @end itemize
> 
> + at section compensationdelay
> +
> +Compensation Delay Line is a metric based delay to compensate differing
> +positions of microphones or speakers.
> +
> +For example, you have recorded guitar with two microphones placed in
> +different location. Because the front of sound wave has fixed speed in
> +normal conditions, the phasing of microphones can vary and depends on
> +their location and interposition. The best sound mix you will get when
> +these microphones are in phase (synchronized). Note that distance of
> +~30 cm between microphones makes one microphone to capture signal in
> +antiphase to another microphone. That makes the final mix sounding moody.
> +This filter helps to solve phasing problems by adding different delays
> +to each microphone track and make them synchronized.
> +
> +The best result can be reached when you take one track as base and
> +synchronize other tracks one by one with it.
> +Remember that synchronization/delay tolerance depends on sample rate, too.
> +Higher sample rates will give more tolerance.
> +
> +It accepts the following parameters:
> +
> + at table @option
> + at item mm
> +Set millimeters distance. This is compensation distance for fine tuning.
> +
> + at item cm
> +Set cm distance. This is compensation distance for tighten distance setup.
> +
> + at item m
> +Set meters distance. This is compensation distance for hard distance setup.
> +
> + at item dry
> +Set dry amount. Amount of unprocessed (dry) signal.
> +
> + at item wet
> +Set wet amount. Amount of processed (wet) signal.
> +
> + at item temp
> +Set temperature degree in Celzius. This is the temperature of the environment.
> + at end table
> +
>  @section dcshift
>  Apply a DC shift to the audio.
> 
> diff --git a/libavfilter/Makefile b/libavfilter/Makefile
> index 1f4abeb..c896374 100644
> --- a/libavfilter/Makefile
> +++ b/libavfilter/Makefile
> @@ -64,6 +64,7 @@ OBJS-$(CONFIG_CHANNELMAP_FILTER)             +=
> af_channelmap.o
>  OBJS-$(CONFIG_CHANNELSPLIT_FILTER)           += af_channelsplit.o
>  OBJS-$(CONFIG_CHORUS_FILTER)                 += af_chorus.o
> generate_wave_table.o
>  OBJS-$(CONFIG_COMPAND_FILTER)                += af_compand.o
> +OBJS-$(CONFIG_COMPENSATIONDELAY_FILTER)      += af_compensationdelay.o
>  OBJS-$(CONFIG_DCSHIFT_FILTER)                += af_dcshift.o
>  OBJS-$(CONFIG_DYNAUDNORM_FILTER)             += af_dynaudnorm.o
>  OBJS-$(CONFIG_EARWAX_FILTER)                 += af_earwax.o
> diff --git a/libavfilter/af_compensationdelay.c
> b/libavfilter/af_compensationdelay.c
> new file mode 100644
> index 0000000..1a32879
> --- /dev/null
> +++ b/libavfilter/af_compensationdelay.c
> @@ -0,0 +1,196 @@
> +/*
> + * Copyright (c) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor
> Harald Johansen, Vladimir Sadovnikov and others
> + * Copyright (c) 2015 Paul B Mahol
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#include "libavutil/opt.h"
> +#include "libavutil/samplefmt.h"
> +#include "avfilter.h"
> +#include "audio.h"
> +#include "internal.h"
> +
> +typedef struct CompensationDelayContext {
> +    const AVClass *class;
> +    int distance_mm;
> +    int distance_cm;
> +    int distance_m;
> +    double dry, wet;
> +    int temp;
> +
> +    unsigned delay;
> +    unsigned w_ptr;
> +    unsigned buf_size;
> +    AVFrame *delay_frame;
> +} CompensationDelayContext;
> +
> +#define OFFSET(x) offsetof(CompensationDelayContext, x)
> +#define A AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
> +
> +static const AVOption compensationdelay_options[] = {
> +    { "mm",   "set mm distance",    OFFSET(distance_mm),
> AV_OPT_TYPE_INT,    {.i64=0},                           0,  10, A },
> +    { "cm",   "set cm distance",    OFFSET(distance_cm),
> AV_OPT_TYPE_INT,    {.i64=0},                           0, 100, A },
> +    { "m",    "set meter distance", OFFSET(distance_m),
> AV_OPT_TYPE_INT,    {.i64=0},                           0, 100, A },
> +    { "dry",  "set dry amount",     OFFSET(dry),
> AV_OPT_TYPE_DOUBLE, {.dbl=0.000244140625}, 0.000244140625,   1, A },
> +    { "wet",  "set wet amount",     OFFSET(wet),

I tried to apply this to test but it corrupted by newlines

Applying: avfilter: add compensation delay line filter
fatal: corrupt patch at line 14
Repository lacks necessary blobs to fall back on 3-way merge.
Cannot fall back to three-way merge.
Patch failed at 0001 avfilter: add compensation delay line filter
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

it is not once nor twice but times without number that the same ideas make
their appearance in the world. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151125/f889d42b/attachment.sig>


More information about the ffmpeg-devel mailing list