Statistics
| Branch: | Revision:

ffmpeg / libavcodec / kbdwin.c @ a45fbda9

History | View | Annotate | Download (1.49 KB)

1
/*
2
 * This file is part of Libav.
3
 *
4
 * Libav is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
6
 * License as published by the Free Software Foundation; either
7
 * version 2.1 of the License, or (at your option) any later version.
8
 *
9
 * Libav is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 * Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
15
 * License along with Libav; if not, write to the Free Software
16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
 */
18

    
19
#include <assert.h>
20
#include <libavutil/mathematics.h>
21
#include "libavutil/attributes.h"
22
#include "kbdwin.h"
23

    
24
#define BESSEL_I0_ITER 50 // default: 50 iterations of Bessel I0 approximation
25

    
26
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
27
{
28
   int i, j;
29
   double sum = 0.0, bessel, tmp;
30
   double local_window[FF_KBD_WINDOW_MAX];
31
   double alpha2 = (alpha * M_PI / n) * (alpha * M_PI / n);
32

    
33
   assert(n <= FF_KBD_WINDOW_MAX);
34

    
35
   for (i = 0; i < n; i++) {
36
       tmp = i * (n - i) * alpha2;
37
       bessel = 1.0;
38
       for (j = BESSEL_I0_ITER; j > 0; j--)
39
           bessel = bessel * tmp / (j * j) + 1;
40
       sum += bessel;
41
       local_window[i] = sum;
42
   }
43

    
44
   sum++;
45
   for (i = 0; i < n; i++)
46
       window[i] = sqrt(local_window[i] / sum);
47
}
48