/src/ffmpeg/libavcodec/sinewin_tablegen.h
Line | Count | Source |
1 | | /* |
2 | | * Header file for hardcoded sine windows |
3 | | * |
4 | | * Copyright (c) 2009 Reimar Döffinger <Reimar.Doeffinger@gmx.de> |
5 | | * |
6 | | * This file is part of FFmpeg. |
7 | | * |
8 | | * FFmpeg is free software; you can redistribute it and/or |
9 | | * modify it under the terms of the GNU Lesser General Public |
10 | | * License as published by the Free Software Foundation; either |
11 | | * version 2.1 of the License, or (at your option) any later version. |
12 | | * |
13 | | * FFmpeg is distributed in the hope that it will be useful, |
14 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 | | * Lesser General Public License for more details. |
17 | | * |
18 | | * You should have received a copy of the GNU Lesser General Public |
19 | | * License along with FFmpeg; if not, write to the Free Software |
20 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | | */ |
22 | | |
23 | | #ifndef AVCODEC_SINEWIN_TABLEGEN_H |
24 | | #define AVCODEC_SINEWIN_TABLEGEN_H |
25 | | |
26 | | #include <assert.h> |
27 | | // do not use libavutil/libm.h since this is compiled both |
28 | | // for the host and the target and config.h is only valid for the target |
29 | | #include <math.h> |
30 | | #include "libavutil/attributes.h" |
31 | | #include "libavutil/common.h" |
32 | | |
33 | | #if !CONFIG_HARDCODED_TABLES |
34 | | #ifndef BUILD_TABLES |
35 | | #include "libavutil/thread.h" |
36 | | #endif |
37 | | |
38 | | SINETABLE( 32); |
39 | | SINETABLE( 64); |
40 | | SINETABLE( 128); |
41 | | SINETABLE( 256); |
42 | | SINETABLE( 512); |
43 | | SINETABLE(1024); |
44 | | SINETABLE(2048); |
45 | | SINETABLE(4096); |
46 | | SINETABLE(8192); |
47 | | #else |
48 | | #include "libavcodec/sinewin_tables.h" |
49 | | #endif |
50 | | |
51 | | SINETABLE_CONST float *const ff_sine_windows[] = { |
52 | | NULL, NULL, NULL, NULL, NULL, // unused |
53 | | ff_sine_32, ff_sine_64, ff_sine_128, |
54 | | ff_sine_256, ff_sine_512, ff_sine_1024, |
55 | | ff_sine_2048, ff_sine_4096, ff_sine_8192, |
56 | | }; |
57 | | |
58 | | // Generate a sine window. |
59 | | av_cold void ff_sine_window_init(float *window, int n) |
60 | 3.10k | { |
61 | 3.10k | int i; |
62 | 1.03M | for(i = 0; i < n; i++) |
63 | 1.03M | window[i] = sinf((i + 0.5) * (M_PI / (2.0 * n))); |
64 | 3.10k | } |
65 | | |
66 | | #if !CONFIG_HARDCODED_TABLES && !defined(BUILD_TABLES) |
67 | | #define INIT_FF_SINE_WINDOW_INIT_FUNC(index) \ |
68 | 58 | static void init_ff_sine_window_ ## index(void) \ |
69 | 58 | { \ |
70 | 58 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ |
71 | 58 | } sinewin.c:init_ff_sine_window_5 Line | Count | Source | 68 | 3 | static void init_ff_sine_window_ ## index(void) \ | 69 | 3 | { \ | 70 | 3 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 3 | } |
sinewin.c:init_ff_sine_window_6 Line | Count | Source | 68 | 7 | static void init_ff_sine_window_ ## index(void) \ | 69 | 7 | { \ | 70 | 7 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 7 | } |
sinewin.c:init_ff_sine_window_7 Line | Count | Source | 68 | 10 | static void init_ff_sine_window_ ## index(void) \ | 69 | 10 | { \ | 70 | 10 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 10 | } |
sinewin.c:init_ff_sine_window_8 Line | Count | Source | 68 | 7 | static void init_ff_sine_window_ ## index(void) \ | 69 | 7 | { \ | 70 | 7 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 7 | } |
sinewin.c:init_ff_sine_window_9 Line | Count | Source | 68 | 9 | static void init_ff_sine_window_ ## index(void) \ | 69 | 9 | { \ | 70 | 9 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 9 | } |
sinewin.c:init_ff_sine_window_10 Line | Count | Source | 68 | 9 | static void init_ff_sine_window_ ## index(void) \ | 69 | 9 | { \ | 70 | 9 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 9 | } |
sinewin.c:init_ff_sine_window_11 Line | Count | Source | 68 | 7 | static void init_ff_sine_window_ ## index(void) \ | 69 | 7 | { \ | 70 | 7 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 7 | } |
sinewin.c:init_ff_sine_window_12 Line | Count | Source | 68 | 3 | static void init_ff_sine_window_ ## index(void) \ | 69 | 3 | { \ | 70 | 3 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 3 | } |
sinewin.c:init_ff_sine_window_13 Line | Count | Source | 68 | 3 | static void init_ff_sine_window_ ## index(void) \ | 69 | 3 | { \ | 70 | 3 | ff_sine_window_init(ff_sine_windows[index], 1 << index);\ | 71 | 3 | } |
|
72 | | |
73 | | INIT_FF_SINE_WINDOW_INIT_FUNC(5) |
74 | | INIT_FF_SINE_WINDOW_INIT_FUNC(6) |
75 | | INIT_FF_SINE_WINDOW_INIT_FUNC(7) |
76 | | INIT_FF_SINE_WINDOW_INIT_FUNC(8) |
77 | | INIT_FF_SINE_WINDOW_INIT_FUNC(9) |
78 | | INIT_FF_SINE_WINDOW_INIT_FUNC(10) |
79 | | INIT_FF_SINE_WINDOW_INIT_FUNC(11) |
80 | | INIT_FF_SINE_WINDOW_INIT_FUNC(12) |
81 | | INIT_FF_SINE_WINDOW_INIT_FUNC(13) |
82 | | |
83 | | static void (*const sine_window_init_func_array[])(void) = { |
84 | | init_ff_sine_window_5, |
85 | | init_ff_sine_window_6, |
86 | | init_ff_sine_window_7, |
87 | | init_ff_sine_window_8, |
88 | | init_ff_sine_window_9, |
89 | | init_ff_sine_window_10, |
90 | | init_ff_sine_window_11, |
91 | | init_ff_sine_window_12, |
92 | | init_ff_sine_window_13, |
93 | | }; |
94 | | |
95 | | static AVOnce init_sine_window_once[9] = { |
96 | | AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT, |
97 | | AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT |
98 | | }; |
99 | | #endif |
100 | | |
101 | | av_cold void ff_init_ff_sine_windows(int index) |
102 | 10.3k | { |
103 | 10.3k | assert(index >= 5 && index < FF_ARRAY_ELEMS(ff_sine_windows)); |
104 | 10.3k | #if !CONFIG_HARDCODED_TABLES |
105 | | #ifdef BUILD_TABLES |
106 | | ff_sine_window_init(ff_sine_windows[index], 1 << index); |
107 | | #else |
108 | 10.3k | ff_thread_once(&init_sine_window_once[index - 5], sine_window_init_func_array[index - 5]); |
109 | 10.3k | #endif |
110 | 10.3k | #endif |
111 | 10.3k | } |
112 | | |
113 | | #endif /* AVCODEC_SINEWIN_TABLEGEN_H */ |