From f4fd8ef725a805cfc8fd695f283b8bfe9bef1b5a Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Sat, 12 Jan 2019 15:33:39 +0100 Subject: [PATCH] avfilter/af_anlmdn: rework how denoising strength is used Make into account patch size. --- doc/filters.texi | 2 +- libavfilter/af_anlmdn.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 85d8f6c85b..6a336a71f4 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -1762,7 +1762,7 @@ The filter accepts the following options. @table @option @item s -Set denoising strength. Allowed range is from 1 to 9999. Default value is 1. +Set denoising strength. Allowed range is from 0.00001 to 10. Default value is 0.00001. @item p Set patch radius duration. Allowed range is from 1 to 100 milliseconds. diff --git a/libavfilter/af_anlmdn.c b/libavfilter/af_anlmdn.c index 7cd6f2c477..43ceab8e4a 100644 --- a/libavfilter/af_anlmdn.c +++ b/libavfilter/af_anlmdn.c @@ -66,7 +66,7 @@ typedef struct AudioNLMeansContext { #define AF AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM static const AVOption anlmdn_options[] = { - { "s", "set denoising strength", OFFSET(a), AV_OPT_TYPE_FLOAT, {.dbl=1}, 1, 9999, AF }, + { "s", "set denoising strength", OFFSET(a), AV_OPT_TYPE_FLOAT, {.dbl=0.00001},0.00001, 10, AF }, { "p", "set patch duration", OFFSET(pd), AV_OPT_TYPE_DURATION, {.i64=2000}, 1000, 100000, AF }, { "r", "set research duration", OFFSET(rd), AV_OPT_TYPE_DURATION, {.i64=6000}, 2000, 300000, AF }, { NULL } @@ -186,7 +186,7 @@ static int filter_channel(AVFilterContext *ctx, void *arg, int ch, int nb_jobs) const int K = s->K; const float *f = (const float *)(s->in->extended_data[ch]) + K; float *cache = (float *)s->cache->extended_data[ch]; - const float sw = 32768.f / s->a; + const float sw = (65536.f / (4 * K + 2)) / sqrtf(s->a); float *dst = (float *)out->extended_data[ch] + s->offset; for (int i = S; i < s->H + S; i++) {