OLD | NEW |
1 /* Copyright (c) 2008 Xiph.Org Foundation | 1 /* Copyright (c) 2008 Xiph.Org Foundation |
2 Written by Jean-Marc Valin */ | 2 Written by Jean-Marc Valin */ |
3 /* | 3 /* |
4 Redistribution and use in source and binary forms, with or without | 4 Redistribution and use in source and binary forms, with or without |
5 modification, are permitted provided that the following conditions | 5 modification, are permitted provided that the following conditions |
6 are met: | 6 are met: |
7 | 7 |
8 - Redistributions of source code must retain the above copyright | 8 - Redistributions of source code must retain the above copyright |
9 notice, this list of conditions and the following disclaimer. | 9 notice, this list of conditions and the following disclaimer. |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | 22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
24 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 24 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 | 27 |
28 #ifdef HAVE_CONFIG_H | 28 #ifdef HAVE_CONFIG_H |
29 #include "config.h" | 29 #include "config.h" |
30 #endif | 30 #endif |
31 | 31 |
32 #define SKIP_CONFIG_H | |
33 | |
34 #ifndef CUSTOM_MODES | |
35 #define CUSTOM_MODES | |
36 #endif | |
37 | |
38 #include <stdio.h> | 32 #include <stdio.h> |
39 | 33 |
40 #define CELT_C | |
41 #define TEST_UNIT_DFT_C | |
42 #include "stack_alloc.h" | 34 #include "stack_alloc.h" |
43 #include "kiss_fft.h" | 35 #include "kiss_fft.h" |
44 #include "kiss_fft.c" | 36 #include "mathops.h" |
45 #include "mathops.c" | 37 #include "modes.h" |
46 #include "entcode.c" | |
47 | |
48 #if defined(OPUS_X86_MAY_HAVE_SSE2) || defined(OPUS_X86_MAY_HAVE_SSE4_1) | |
49 # include "x86/x86cpu.c" | |
50 #elif defined(OPUS_ARM_ASM) || defined(OPUS_ARM_MAY_HAVE_NEON_INTR) | |
51 # include "arm/armcpu.c" | |
52 # include "celt_lpc.c" | |
53 # include "pitch.c" | |
54 # if defined(OPUS_ARM_MAY_HAVE_NEON_INTR) | |
55 # include "arm/celt_neon_intr.c" | |
56 # if defined(HAVE_ARM_NE10) | |
57 # include "mdct.c" | |
58 # include "arm/celt_ne10_fft.c" | |
59 # include "arm/celt_ne10_mdct.c" | |
60 # endif | |
61 # endif | |
62 # include "arm/arm_celt_map.c" | |
63 #endif | |
64 | 38 |
65 #ifndef M_PI | 39 #ifndef M_PI |
66 #define M_PI 3.141592653 | 40 #define M_PI 3.141592653 |
67 #endif | 41 #endif |
68 | 42 |
69 int ret = 0; | 43 int ret = 0; |
70 | 44 |
71 void check(kiss_fft_cpx * in,kiss_fft_cpx * out,int nfft,int isinverse) | 45 void check(kiss_fft_cpx * in,kiss_fft_cpx * out,int nfft,int isinverse) |
72 { | 46 { |
73 int bin,k; | 47 int bin,k; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 printf("nfft=%d inverse=%d,snr = %f\n",nfft,isinverse,snr ); | 79 printf("nfft=%d inverse=%d,snr = %f\n",nfft,isinverse,snr ); |
106 if (snr<60) { | 80 if (snr<60) { |
107 printf( "** poor snr: %f ** \n", snr); | 81 printf( "** poor snr: %f ** \n", snr); |
108 ret = 1; | 82 ret = 1; |
109 } | 83 } |
110 } | 84 } |
111 | 85 |
112 void test1d(int nfft,int isinverse,int arch) | 86 void test1d(int nfft,int isinverse,int arch) |
113 { | 87 { |
114 size_t buflen = sizeof(kiss_fft_cpx)*nfft; | 88 size_t buflen = sizeof(kiss_fft_cpx)*nfft; |
| 89 kiss_fft_cpx *in; |
| 90 kiss_fft_cpx *out; |
| 91 int k; |
| 92 #ifdef CUSTOM_MODES |
| 93 kiss_fft_state *cfg = opus_fft_alloc(nfft,0,0,arch); |
| 94 #else |
| 95 int id; |
| 96 const kiss_fft_state *cfg; |
| 97 CELTMode *mode = opus_custom_mode_create(48000, 960, NULL); |
| 98 if (nfft == 480) id = 0; |
| 99 else if (nfft == 240) id = 1; |
| 100 else if (nfft == 120) id = 2; |
| 101 else if (nfft == 60) id = 3; |
| 102 else return; |
| 103 cfg = mode->mdct.kfft[id]; |
| 104 #endif |
115 | 105 |
116 kiss_fft_cpx * in = (kiss_fft_cpx*)malloc(buflen); | 106 in = (kiss_fft_cpx*)malloc(buflen); |
117 kiss_fft_cpx * out= (kiss_fft_cpx*)malloc(buflen); | 107 out = (kiss_fft_cpx*)malloc(buflen); |
118 kiss_fft_state *cfg = opus_fft_alloc(nfft,0,0,arch); | |
119 int k; | |
120 | 108 |
121 for (k=0;k<nfft;++k) { | 109 for (k=0;k<nfft;++k) { |
122 in[k].r = (rand() % 32767) - 16384; | 110 in[k].r = (rand() % 32767) - 16384; |
123 in[k].i = (rand() % 32767) - 16384; | 111 in[k].i = (rand() % 32767) - 16384; |
124 } | 112 } |
125 | 113 |
126 for (k=0;k<nfft;++k) { | 114 for (k=0;k<nfft;++k) { |
127 in[k].r *= 32768; | 115 in[k].r *= 32768; |
128 in[k].i *= 32768; | 116 in[k].i *= 32768; |
129 } | 117 } |
(...skipping 12 matching lines...) Expand all Loading... |
142 opus_ifft(cfg,in,out, arch); | 130 opus_ifft(cfg,in,out, arch); |
143 else | 131 else |
144 opus_fft(cfg,in,out, arch); | 132 opus_fft(cfg,in,out, arch); |
145 | 133 |
146 /*for (k=0;k<nfft;++k) printf("%d %d ", out[k].r, out[k].i);printf("\n");*/ | 134 /*for (k=0;k<nfft;++k) printf("%d %d ", out[k].r, out[k].i);printf("\n");*/ |
147 | 135 |
148 check(in,out,nfft,isinverse); | 136 check(in,out,nfft,isinverse); |
149 | 137 |
150 free(in); | 138 free(in); |
151 free(out); | 139 free(out); |
| 140 #ifdef CUSTOM_MODES |
152 opus_fft_free(cfg, arch); | 141 opus_fft_free(cfg, arch); |
| 142 #endif |
153 } | 143 } |
154 | 144 |
155 int main(int argc,char ** argv) | 145 int main(int argc,char ** argv) |
156 { | 146 { |
157 ALLOC_STACK; | 147 ALLOC_STACK; |
158 int arch = opus_select_arch(); | 148 int arch = opus_select_arch(); |
159 | 149 |
160 if (argc>1) { | 150 if (argc>1) { |
161 int k; | 151 int k; |
162 for (k=1;k<argc;++k) { | 152 for (k=1;k<argc;++k) { |
(...skipping 17 matching lines...) Expand all Loading... |
180 test1d(120,0,arch); | 170 test1d(120,0,arch); |
181 test1d(120,1,arch); | 171 test1d(120,1,arch); |
182 test1d(240,0,arch); | 172 test1d(240,0,arch); |
183 test1d(240,1,arch); | 173 test1d(240,1,arch); |
184 test1d(480,0,arch); | 174 test1d(480,0,arch); |
185 test1d(480,1,arch); | 175 test1d(480,1,arch); |
186 #endif | 176 #endif |
187 } | 177 } |
188 return ret; | 178 return ret; |
189 } | 179 } |
OLD | NEW |