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 021101301 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 