diff options
Diffstat (limited to 'libavfilter/window_func.c')
-rw-r--r-- | libavfilter/window_func.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/libavfilter/window_func.c b/libavfilter/window_func.c index 9c6202a..1931c8e 100644 --- a/libavfilter/window_func.c +++ b/libavfilter/window_func.c @@ -116,6 +116,18 @@ void ff_generate_window_func(float *lut, int N, int win_func, float *overlap) } *overlap = 0.33; break; + case WFUNC_DOLPH: { + double b = cosh(acosh(pow(10., 3)) / (N-1)), sum, t, c, norm = 0; + int j; + for (c = 1 - 1 / (b*b), n = (N-1) / 2; n >= 0; --n) { + for (sum = !n, b = t = j = 1; j <= n && sum != t; b *= (n-j) * (1./j), ++j) + t = sum, sum += (b *= c * (N - n - j) * (1./j)); + sum /= (N - 1 - n), sum /= (norm = norm ? norm : sum); + lut[n] = sum; + lut[N - 1 - n] = sum; + } + *overlap = 0.5;} + break; default: av_assert0(0); } |