Mercurial > hg > audiostuff
comparison spandsp-0.0.3/spandsp-0.0.3/tests/g726_tests.c @ 5:f762bf195c4b
import spandsp-0.0.3
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Fri, 25 Jun 2010 16:00:21 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4:26cd8f1ef0b1 | 5:f762bf195c4b |
---|---|
1 /* | |
2 * SpanDSP - a series of DSP components for telephony | |
3 * | |
4 * g726_tests.c - Test G.726 encode and decode. | |
5 * | |
6 * Written by Steve Underwood <steveu@coppice.org> | |
7 * | |
8 * Copyright (C) 2006 Steve Underwood | |
9 * | |
10 * All rights reserved. | |
11 * | |
12 * This program is free software; you can redistribute it and/or modify | |
13 * it under the terms of the GNU General Public License version 2, as | |
14 * published by the Free Software Foundation. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
24 * | |
25 * $Id: g726_tests.c,v 1.16 2006/11/19 14:07:27 steveu Exp $ | |
26 */ | |
27 | |
28 /*! \file */ | |
29 | |
30 /*! \page g726_tests_page G.726 tests | |
31 \section g726_tests_page_sec_1 What does it do? | |
32 Two sets of tests are performed: | |
33 - The tests defined in the G.726 specification, using the test data files supplied with | |
34 the specification. | |
35 - A generally audio quality test, consisting of compressing and decompressing a speeech | |
36 file for audible comparison. | |
37 | |
38 The speech file should be recorded at 16 bits/sample, 8000 samples/second, and named | |
39 "pre_g726.wav". | |
40 | |
41 \section g726_tests_page_sec_2 How is it used? | |
42 To perform the tests in the G.726 specification you need to obtain the test data files from the | |
43 specification. These are copyright material, and so cannot be distributed with spandsp. | |
44 | |
45 The files, containing test vectors, which are supplied with the G.726 specification, should be | |
46 copied to itutests/g726 so the files are arranged in the same directory heirarchy in which they | |
47 are supplied. That is, you should have file names like | |
48 | |
49 - itutests/g726/DISK1/INPUT/NRM.M | |
50 - itutests/g726/DISK1/INPUT/OVR.M | |
51 - itutests/g726/DISK2/INPUT/NRM.A | |
52 - itutests/g726/DISK2/INPUT/OVR.A | |
53 | |
54 in your spandsp source tree. The ITU tests can then be run by executing g726_tests without | |
55 any parameters. | |
56 | |
57 To perform a general audio quality test, g726_tests should be run with a parameter specifying | |
58 the required bit rate for compression. The valid parameters are "-16", "-24", "-32", and "-40". | |
59 The test file ../localtests/short_nb_voice.wav will be compressed to the specified bit rate, | |
60 decompressed, and the resulting audio stored in post_g726.wav. | |
61 */ | |
62 | |
63 #ifdef HAVE_CONFIG_H | |
64 #include <config.h> | |
65 #endif | |
66 | |
67 #include <stdlib.h> | |
68 #include <unistd.h> | |
69 #include <stdio.h> | |
70 #include <fcntl.h> | |
71 #include <inttypes.h> | |
72 #include <memory.h> | |
73 #include <stdlib.h> | |
74 #if defined(HAVE_TGMATH_H) | |
75 #include <tgmath.h> | |
76 #endif | |
77 #if defined(HAVE_MATH_H) | |
78 #include <math.h> | |
79 #endif | |
80 #include <audiofile.h> | |
81 #include <ctype.h> | |
82 #include <tiffio.h> | |
83 | |
84 #include "spandsp.h" | |
85 | |
86 #define BLOCK_LEN 320 | |
87 #define MAX_TEST_VECTOR_LEN 40000 | |
88 | |
89 #define IN_FILE_NAME "../localtests/short_nb_voice.wav" | |
90 #define OUT_FILE_NAME "post_g726.wav" | |
91 | |
92 #define TESTDATA_DIR "../itutests/g726/" | |
93 | |
94 int16_t outdata[MAX_TEST_VECTOR_LEN]; | |
95 uint8_t adpcmdata[MAX_TEST_VECTOR_LEN]; | |
96 | |
97 int16_t itudata[MAX_TEST_VECTOR_LEN]; | |
98 uint8_t itu_ref[MAX_TEST_VECTOR_LEN]; | |
99 uint8_t unpacked[MAX_TEST_VECTOR_LEN]; | |
100 uint8_t xlaw[MAX_TEST_VECTOR_LEN]; | |
101 | |
102 /* | |
103 Table 4 - V Reset and homing sequences for u-law | |
104 Normal I-input Overload | |
105 Algorithm Input Intermediate Output Input Output Input Intermediate Output | |
106 (PCM) (ADPCM) (PCM) (ADPCM) (PCM) (PCM) (ADPCM) (PCM) | |
107 | |
108 16F NRM.M RN16FM.I RN16FM.O I16 RI16FM.O OVR.M RV16FM.I RV16FM.O | |
109 HN16FM.I HN16FM.O HI16FM.O HV16FM.I HV16FM.O | |
110 | |
111 24F NRM.M RN24FM.I RN24FM.O I24 RI24FM.O OVR.M RV24FM.I RV24FM.O | |
112 HN24FM.I HN24FM.O HI24FM.O HV24FM.I HV24FM.O | |
113 | |
114 32F NRM.M RN32FM.I RN32FM.O I32 RI32FM.O OVR.M RV32FM.I RV32FM.O | |
115 HN32FM.I HN32FM.O HI32FM.O HV32FM.I HV32FM.O | |
116 | |
117 40F NRM.M RN40FM.I RN40FM.O I40 RI40FM.O OVR.M RV40FM.I RV40FM.O | |
118 HN40FM.I HN40FM.O HI40FM.O HV40FM.I HV40FM.O | |
119 | |
120 | |
121 Table 5 - V Reset and homing sequences for A-law | |
122 Normal I-input Overload | |
123 Algorithm Input Intermediate Output Input Output Input Intermediate Output | |
124 (PCM) (ADPCM) (PCM) (ADPCM) (PCM) (PCM) (ADPCM) (PCM) | |
125 16F NRM.A RN16FA.I RN16FA.O I16 RI16FA.O OVR.A RV16FA.I RV16FA.O | |
126 HN16FA.I HN16FA.O HI16FA.O HV16FA.I HV16FA.O | |
127 | |
128 24F NRM.A RN24FA.I RN24FA.O I24 RI24FA.O OVR.A RV24FA.I RV24FA.O | |
129 HN24FA.I HN24FA.O HI24FA.O HV24FA.I HV24FA.O | |
130 | |
131 32F NRM.A RN32FA.I RN32FA.O I32 RI32FA.O OVR.A RV32FA.I RV32FA.O | |
132 HN32FA.I HN32FA.O HI32FA.O HV32FA.I HV32FA.O | |
133 | |
134 40F NRM.A RN40FA.I RN40FA.O I40 RI40FA.O OVR.A RV40FA.I RV40FA.O | |
135 HN40FA.I HN40FA.O HI40FA.O HV40FA.I HV40FA.O | |
136 | |
137 Table 6 ¡V Reset and homing cross sequences for u-law -> A-law | |
138 Normal Overload | |
139 Algorithm Input Intermediate Output Input Intermediate Output | |
140 (PCM) (ADPCM) (PCM) (PCM) (ADPCM) (PCM) | |
141 16F NRM.M RN16FM.I RN16FC.O OVR.M RV16FM.I RV16FC.O | |
142 HN16FM.I HN16FC.O HV16FM.I HV16FC.O | |
143 | |
144 24F NRM.M RN24FM.I RN24FC.O OVR.M RV24FM.I RV24FC.O | |
145 HN24FM.I HN24FC.O HV24FM.I HV24FC.O | |
146 | |
147 32F NRM.M RN32FM.I RN32FC.O OVR.M RV32FM.I RV32FC.O | |
148 HN32FM.I HN32FC.O HV32FM.I HV32FC.O | |
149 | |
150 40F NRM.M RN40FM.I RN40FC.O OVR.M RV40FM.I RV40FC.O | |
151 HN40FM.I HN40FC.O HV40FM.I HV40FC.O | |
152 | |
153 Table 7 ¡V Reset and homing cross sequences for A-law -> u-law | |
154 Normal Overload | |
155 Algorithm Input Intermediate Output Input Intermediate Output | |
156 (PCM) (ADPCM) (PCM) (PCM) (ADPCM) (PCM) | |
157 16F NRM.A RN16FA.I RN16FX.O OVR.A RV16FA.I RV16FX.O | |
158 HN16FA.I HN16FX.O HV16FA.I HV16FX.O | |
159 | |
160 24F NRM.A RN24FA.I RN24FX.O OVR.A RV24FA.I RV24FX.O | |
161 HN24FA.I HN24FX.O HV24FA.I HV24FX.O | |
162 | |
163 32F NRM.A RN32FA.I RN32FX.O OVR.A RV32FA.I RV32FX.O | |
164 HN32FA.I HN32FX.O HV32FA.I HV32FX.O | |
165 | |
166 40F NRM.A RN40FA.I RN40FX.O OVR.A RV40FA.I RV40FX.O | |
167 HN40FA.I HN40FX.O HV40FA.I HV40FX.O | |
168 */ | |
169 | |
170 #define G726_ENCODING_NONE 9999 | |
171 | |
172 typedef struct | |
173 { | |
174 const char *conditioning_pcm_file; | |
175 const char *pcm_file; | |
176 const char *conditioning_adpcm_file; | |
177 const char *adpcm_file; | |
178 const char *output_file; | |
179 int rate; | |
180 int compression_law; | |
181 int decompression_law; | |
182 } test_set_t; | |
183 | |
184 static test_set_t itu_test_sets[] = | |
185 { | |
186 /* u-law to u-law tests */ | |
187 { | |
188 "", | |
189 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
190 "", | |
191 TESTDATA_DIR "DISK1/RESET/16/RN16FM.I", | |
192 TESTDATA_DIR "DISK1/RESET/16/RN16FM.O", | |
193 16000, | |
194 G726_ENCODING_ULAW, | |
195 G726_ENCODING_ULAW | |
196 }, | |
197 { | |
198 "", | |
199 "", | |
200 "", | |
201 TESTDATA_DIR "DISK1/INPUT/I16", | |
202 TESTDATA_DIR "DISK1/RESET/16/RI16FM.O", | |
203 16000, | |
204 G726_ENCODING_NONE, | |
205 G726_ENCODING_ULAW | |
206 }, | |
207 { | |
208 "", | |
209 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
210 "", | |
211 TESTDATA_DIR "DISK1/RESET/16/RV16FM.I", | |
212 TESTDATA_DIR "DISK1/RESET/16/RV16FM.O", | |
213 16000, | |
214 G726_ENCODING_ULAW, | |
215 G726_ENCODING_ULAW | |
216 }, | |
217 { | |
218 "", | |
219 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
220 "", | |
221 TESTDATA_DIR "DISK1/RESET/24/RN24FM.I", | |
222 TESTDATA_DIR "DISK1/RESET/24/RN24FM.O", | |
223 24000, | |
224 G726_ENCODING_ULAW, | |
225 G726_ENCODING_ULAW | |
226 }, | |
227 { | |
228 "", | |
229 "", | |
230 "", | |
231 TESTDATA_DIR "DISK1/INPUT/I24", | |
232 TESTDATA_DIR "DISK1/RESET/24/RI24FM.O", | |
233 24000, | |
234 G726_ENCODING_NONE, | |
235 G726_ENCODING_ULAW | |
236 }, | |
237 { | |
238 "", | |
239 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
240 "", | |
241 TESTDATA_DIR "DISK1/RESET/24/RV24FM.I", | |
242 TESTDATA_DIR "DISK1/RESET/24/RV24FM.O", | |
243 24000, | |
244 G726_ENCODING_ULAW, | |
245 G726_ENCODING_ULAW | |
246 }, | |
247 { | |
248 "", | |
249 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
250 "", | |
251 TESTDATA_DIR "DISK1/RESET/32/RN32FM.I", | |
252 TESTDATA_DIR "DISK1/RESET/32/RN32FM.O", | |
253 32000, | |
254 G726_ENCODING_ULAW, | |
255 G726_ENCODING_ULAW | |
256 }, | |
257 { | |
258 "", | |
259 "", | |
260 "", | |
261 TESTDATA_DIR "DISK1/INPUT/I32", | |
262 TESTDATA_DIR "DISK1/RESET/32/RI32FM.O", | |
263 32000, | |
264 G726_ENCODING_NONE, | |
265 G726_ENCODING_ULAW | |
266 }, | |
267 { | |
268 "", | |
269 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
270 "", | |
271 TESTDATA_DIR "DISK1/RESET/32/RV32FM.I", | |
272 TESTDATA_DIR "DISK1/RESET/32/RV32FM.O", | |
273 32000, | |
274 G726_ENCODING_ULAW, | |
275 G726_ENCODING_ULAW | |
276 }, | |
277 { | |
278 "", | |
279 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
280 "", | |
281 TESTDATA_DIR "DISK1/RESET/40/RN40FM.I", | |
282 TESTDATA_DIR "DISK1/RESET/40/RN40FM.O", | |
283 40000, | |
284 G726_ENCODING_ULAW, | |
285 G726_ENCODING_ULAW | |
286 }, | |
287 { | |
288 "", | |
289 "", | |
290 "", | |
291 TESTDATA_DIR "DISK1/INPUT/I40", | |
292 TESTDATA_DIR "DISK1/RESET/40/RI40FM.O", | |
293 40000, | |
294 G726_ENCODING_NONE, | |
295 G726_ENCODING_ULAW | |
296 }, | |
297 { | |
298 "", | |
299 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
300 "", | |
301 TESTDATA_DIR "DISK1/RESET/40/RV40FM.I", | |
302 TESTDATA_DIR "DISK1/RESET/40/RV40FM.O", | |
303 40000, | |
304 G726_ENCODING_ULAW, | |
305 G726_ENCODING_ULAW | |
306 }, | |
307 /* A-law to A-law tests */ | |
308 { | |
309 "", | |
310 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
311 "", | |
312 TESTDATA_DIR "DISK2/RESET/16/RN16FA.I", | |
313 TESTDATA_DIR "DISK2/RESET/16/RN16FA.O", | |
314 16000, | |
315 G726_ENCODING_ALAW, | |
316 G726_ENCODING_ALAW | |
317 }, | |
318 { | |
319 "", | |
320 "", | |
321 "", | |
322 TESTDATA_DIR "DISK2/INPUT/I16", | |
323 TESTDATA_DIR "DISK2/RESET/16/RI16FA.O", | |
324 16000, | |
325 G726_ENCODING_NONE, | |
326 G726_ENCODING_ALAW | |
327 }, | |
328 { | |
329 "", | |
330 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
331 "", | |
332 TESTDATA_DIR "DISK2/RESET/16/RV16FA.I", | |
333 TESTDATA_DIR "DISK2/RESET/16/RV16FA.O", | |
334 16000, | |
335 G726_ENCODING_ALAW, | |
336 G726_ENCODING_ALAW | |
337 }, | |
338 { | |
339 "", | |
340 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
341 "", | |
342 TESTDATA_DIR "DISK2/RESET/24/RN24FA.I", | |
343 TESTDATA_DIR "DISK2/RESET/24/RN24FA.O", | |
344 24000, | |
345 G726_ENCODING_ALAW, | |
346 G726_ENCODING_ALAW | |
347 }, | |
348 { | |
349 "", | |
350 "", | |
351 "", | |
352 TESTDATA_DIR "DISK2/INPUT/I24", | |
353 TESTDATA_DIR "DISK2/RESET/24/RI24FA.O", | |
354 24000, | |
355 G726_ENCODING_NONE, | |
356 G726_ENCODING_ALAW | |
357 }, | |
358 { | |
359 "", | |
360 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
361 "", | |
362 TESTDATA_DIR "DISK2/RESET/24/RV24FA.I", | |
363 TESTDATA_DIR "DISK2/RESET/24/RV24FA.O", | |
364 24000, | |
365 G726_ENCODING_ALAW, | |
366 G726_ENCODING_ALAW | |
367 }, | |
368 { | |
369 "", | |
370 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
371 "", | |
372 TESTDATA_DIR "DISK2/RESET/32/RN32FA.I", | |
373 TESTDATA_DIR "DISK2/RESET/32/RN32FA.O", | |
374 32000, | |
375 G726_ENCODING_ALAW, | |
376 G726_ENCODING_ALAW | |
377 }, | |
378 { | |
379 "", | |
380 "", | |
381 "", | |
382 TESTDATA_DIR "DISK2/INPUT/I32", | |
383 TESTDATA_DIR "DISK2/RESET/32/RI32FA.O", | |
384 32000, | |
385 G726_ENCODING_NONE, | |
386 G726_ENCODING_ALAW | |
387 }, | |
388 { | |
389 "", | |
390 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
391 "", | |
392 TESTDATA_DIR "DISK2/RESET/32/RV32FA.I", | |
393 TESTDATA_DIR "DISK2/RESET/32/RV32FA.O", | |
394 32000, | |
395 G726_ENCODING_ALAW, | |
396 G726_ENCODING_ALAW | |
397 }, | |
398 { | |
399 "", | |
400 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
401 "", | |
402 TESTDATA_DIR "DISK2/RESET/40/RN40FA.I", | |
403 TESTDATA_DIR "DISK2/RESET/40/RN40FA.O", | |
404 40000, | |
405 G726_ENCODING_ALAW, | |
406 G726_ENCODING_ALAW | |
407 }, | |
408 { | |
409 "", | |
410 "", | |
411 "", | |
412 TESTDATA_DIR "DISK2/INPUT/I40", | |
413 TESTDATA_DIR "DISK2/RESET/40/RI40FA.O", | |
414 40000, | |
415 G726_ENCODING_NONE, | |
416 G726_ENCODING_ALAW | |
417 }, | |
418 { | |
419 "", | |
420 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
421 "", | |
422 TESTDATA_DIR "DISK2/RESET/40/RV40FA.I", | |
423 TESTDATA_DIR "DISK2/RESET/40/RV40FA.O", | |
424 40000, | |
425 G726_ENCODING_ALAW, | |
426 G726_ENCODING_ALAW | |
427 }, | |
428 /* u-law to A-law tests */ | |
429 { | |
430 "", | |
431 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
432 "", | |
433 TESTDATA_DIR "DISK1/RESET/16/RN16FM.I", | |
434 TESTDATA_DIR "DISK1/RESET/16/RN16FC.O", | |
435 16000, | |
436 G726_ENCODING_ULAW, | |
437 G726_ENCODING_ALAW | |
438 }, | |
439 { | |
440 "", | |
441 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
442 "", | |
443 TESTDATA_DIR "DISK1/RESET/16/RV16FM.I", | |
444 TESTDATA_DIR "DISK1/RESET/16/RV16FC.O", | |
445 16000, | |
446 G726_ENCODING_ULAW, | |
447 G726_ENCODING_ALAW | |
448 }, | |
449 { | |
450 "", | |
451 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
452 "", | |
453 TESTDATA_DIR "DISK1/RESET/24/RN24FM.I", | |
454 TESTDATA_DIR "DISK1/RESET/24/RN24FC.O", | |
455 24000, | |
456 G726_ENCODING_ULAW, | |
457 G726_ENCODING_ALAW | |
458 }, | |
459 { | |
460 "", | |
461 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
462 "", | |
463 TESTDATA_DIR "DISK1/RESET/24/RV24FM.I", | |
464 TESTDATA_DIR "DISK1/RESET/24/RV24FC.O", | |
465 24000, | |
466 G726_ENCODING_ULAW, | |
467 G726_ENCODING_ALAW | |
468 }, | |
469 { | |
470 "", | |
471 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
472 "", | |
473 TESTDATA_DIR "DISK1/RESET/32/RN32FM.I", | |
474 TESTDATA_DIR "DISK1/RESET/32/RN32FC.O", | |
475 32000, | |
476 G726_ENCODING_ULAW, | |
477 G726_ENCODING_ALAW | |
478 }, | |
479 { | |
480 "", | |
481 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
482 "", | |
483 TESTDATA_DIR "DISK1/RESET/32/RV32FM.I", | |
484 TESTDATA_DIR "DISK1/RESET/32/RV32FC.O", | |
485 32000, | |
486 G726_ENCODING_ULAW, | |
487 G726_ENCODING_ALAW | |
488 }, | |
489 { | |
490 "", | |
491 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
492 "", | |
493 TESTDATA_DIR "DISK1/RESET/40/RN40FM.I", | |
494 TESTDATA_DIR "DISK1/RESET/40/RN40FC.O", | |
495 40000, | |
496 G726_ENCODING_ULAW, | |
497 G726_ENCODING_ALAW | |
498 }, | |
499 { | |
500 "", | |
501 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
502 "", | |
503 TESTDATA_DIR "DISK1/RESET/40/RV40FM.I", | |
504 TESTDATA_DIR "DISK1/RESET/40/RV40FC.O", | |
505 40000, | |
506 G726_ENCODING_ULAW, | |
507 G726_ENCODING_ALAW | |
508 }, | |
509 /* A-law to u-law tests */ | |
510 { | |
511 "", | |
512 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
513 "", | |
514 TESTDATA_DIR "DISK2/RESET/16/RN16FA.I", | |
515 TESTDATA_DIR "DISK2/RESET/16/RN16FX.O", | |
516 16000, | |
517 G726_ENCODING_ALAW, | |
518 G726_ENCODING_ULAW | |
519 }, | |
520 { | |
521 "", | |
522 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
523 "", | |
524 TESTDATA_DIR "DISK2/RESET/16/RV16FA.I", | |
525 TESTDATA_DIR "DISK2/RESET/16/RV16FX.O", | |
526 16000, | |
527 G726_ENCODING_ALAW, | |
528 G726_ENCODING_ULAW | |
529 }, | |
530 { | |
531 "", | |
532 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
533 "", | |
534 TESTDATA_DIR "DISK2/RESET/24/RN24FA.I", | |
535 TESTDATA_DIR "DISK2/RESET/24/RN24FX.O", | |
536 24000, | |
537 G726_ENCODING_ALAW, | |
538 G726_ENCODING_ULAW | |
539 }, | |
540 { | |
541 "", | |
542 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
543 "", | |
544 TESTDATA_DIR "DISK2/RESET/24/RV24FA.I", | |
545 TESTDATA_DIR "DISK2/RESET/24/RV24FX.O", | |
546 24000, | |
547 G726_ENCODING_ALAW, | |
548 G726_ENCODING_ULAW | |
549 }, | |
550 { | |
551 "", | |
552 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
553 "", | |
554 TESTDATA_DIR "DISK2/RESET/32/RN32FA.I", | |
555 TESTDATA_DIR "DISK2/RESET/32/RN32FX.O", | |
556 32000, | |
557 G726_ENCODING_ALAW, | |
558 G726_ENCODING_ULAW | |
559 }, | |
560 { | |
561 "", | |
562 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
563 "", | |
564 TESTDATA_DIR "DISK2/RESET/32/RV32FA.I", | |
565 TESTDATA_DIR "DISK2/RESET/32/RV32FX.O", | |
566 32000, | |
567 G726_ENCODING_ALAW, | |
568 G726_ENCODING_ULAW | |
569 }, | |
570 { | |
571 "", | |
572 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
573 "", | |
574 TESTDATA_DIR "DISK2/RESET/40/RN40FA.I", | |
575 TESTDATA_DIR "DISK2/RESET/40/RN40FX.O", | |
576 40000, | |
577 G726_ENCODING_ALAW, | |
578 G726_ENCODING_ULAW | |
579 }, | |
580 { | |
581 "", | |
582 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
583 "", | |
584 TESTDATA_DIR "DISK2/RESET/40/RV40FA.I", | |
585 TESTDATA_DIR "DISK2/RESET/40/RV40FX.O", | |
586 40000, | |
587 G726_ENCODING_ALAW, | |
588 G726_ENCODING_ULAW | |
589 }, | |
590 /* u-law to u-law tests */ | |
591 { | |
592 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
593 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
594 TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M", | |
595 TESTDATA_DIR "DISK1/HOMING/16/HN16FM.I", | |
596 TESTDATA_DIR "DISK1/HOMING/16/HN16FM.O", | |
597 16000, | |
598 G726_ENCODING_ULAW, | |
599 G726_ENCODING_ULAW | |
600 }, | |
601 { | |
602 "", | |
603 "", | |
604 TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M", | |
605 TESTDATA_DIR "DISK1/INPUT/I16", | |
606 TESTDATA_DIR "DISK1/HOMING/16/HI16FM.O", | |
607 16000, | |
608 G726_ENCODING_NONE, | |
609 G726_ENCODING_ULAW | |
610 }, | |
611 { | |
612 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
613 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
614 TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M", | |
615 TESTDATA_DIR "DISK1/HOMING/16/HV16FM.I", | |
616 TESTDATA_DIR "DISK1/HOMING/16/HV16FM.O", | |
617 16000, | |
618 G726_ENCODING_ULAW, | |
619 G726_ENCODING_ULAW | |
620 }, | |
621 { | |
622 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
623 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
624 TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M", | |
625 TESTDATA_DIR "DISK1/HOMING/24/HN24FM.I", | |
626 TESTDATA_DIR "DISK1/HOMING/24/HN24FM.O", | |
627 24000, | |
628 G726_ENCODING_ULAW, | |
629 G726_ENCODING_ULAW | |
630 }, | |
631 { | |
632 "", | |
633 "", | |
634 TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M", | |
635 TESTDATA_DIR "DISK1/INPUT/I24", | |
636 TESTDATA_DIR "DISK1/HOMING/24/HI24FM.O", | |
637 24000, | |
638 G726_ENCODING_NONE, | |
639 G726_ENCODING_ULAW | |
640 }, | |
641 { | |
642 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
643 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
644 TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M", | |
645 TESTDATA_DIR "DISK1/HOMING/24/HV24FM.I", | |
646 TESTDATA_DIR "DISK1/HOMING/24/HV24FM.O", | |
647 24000, | |
648 G726_ENCODING_ULAW, | |
649 G726_ENCODING_ULAW | |
650 }, | |
651 { | |
652 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
653 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
654 TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M", | |
655 TESTDATA_DIR "DISK1/HOMING/32/HN32FM.I", | |
656 TESTDATA_DIR "DISK1/HOMING/32/HN32FM.O", | |
657 32000, | |
658 G726_ENCODING_ULAW, | |
659 G726_ENCODING_ULAW | |
660 }, | |
661 { | |
662 "", | |
663 "", | |
664 TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M", | |
665 TESTDATA_DIR "DISK1/INPUT/I32", | |
666 TESTDATA_DIR "DISK1/HOMING/32/HI32FM.O", | |
667 32000, | |
668 G726_ENCODING_NONE, | |
669 G726_ENCODING_ULAW | |
670 }, | |
671 { | |
672 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
673 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
674 TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M", | |
675 TESTDATA_DIR "DISK1/HOMING/32/HV32FM.I", | |
676 TESTDATA_DIR "DISK1/HOMING/32/HV32FM.O", | |
677 32000, | |
678 G726_ENCODING_ULAW, | |
679 G726_ENCODING_ULAW | |
680 }, | |
681 { | |
682 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
683 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
684 TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M", | |
685 TESTDATA_DIR "DISK1/HOMING/40/HN40FM.I", | |
686 TESTDATA_DIR "DISK1/HOMING/40/HN40FM.O", | |
687 40000, | |
688 G726_ENCODING_ULAW, | |
689 G726_ENCODING_ULAW | |
690 }, | |
691 { | |
692 "", | |
693 "", | |
694 TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M", | |
695 TESTDATA_DIR "DISK1/INPUT/I40", | |
696 TESTDATA_DIR "DISK1/HOMING/40/HI40FM.O", | |
697 40000, | |
698 G726_ENCODING_NONE, | |
699 G726_ENCODING_ULAW | |
700 }, | |
701 { | |
702 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
703 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
704 TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M", | |
705 TESTDATA_DIR "DISK1/HOMING/40/HV40FM.I", | |
706 TESTDATA_DIR "DISK1/HOMING/40/HV40FM.O", | |
707 40000, | |
708 G726_ENCODING_ULAW, | |
709 G726_ENCODING_ULAW | |
710 }, | |
711 /* A-law to A-law tests */ | |
712 { | |
713 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
714 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
715 TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A", | |
716 TESTDATA_DIR "DISK2/HOMING/16/HN16FA.I", | |
717 TESTDATA_DIR "DISK2/HOMING/16/HN16FA.O", | |
718 16000, | |
719 G726_ENCODING_ALAW, | |
720 G726_ENCODING_ALAW | |
721 }, | |
722 { | |
723 "", | |
724 "", | |
725 TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A", | |
726 TESTDATA_DIR "DISK2/INPUT/I16", | |
727 TESTDATA_DIR "DISK2/HOMING/16/HI16FA.O", | |
728 16000, | |
729 G726_ENCODING_NONE, | |
730 G726_ENCODING_ALAW | |
731 }, | |
732 { | |
733 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
734 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
735 TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A", | |
736 TESTDATA_DIR "DISK2/HOMING/16/HV16FA.I", | |
737 TESTDATA_DIR "DISK2/HOMING/16/HV16FA.O", | |
738 16000, | |
739 G726_ENCODING_ALAW, | |
740 G726_ENCODING_ALAW | |
741 }, | |
742 { | |
743 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
744 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
745 TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A", | |
746 TESTDATA_DIR "DISK2/HOMING/24/HN24FA.I", | |
747 TESTDATA_DIR "DISK2/HOMING/24/HN24FA.O", | |
748 24000, | |
749 G726_ENCODING_ALAW, | |
750 G726_ENCODING_ALAW | |
751 }, | |
752 { | |
753 "", | |
754 "", | |
755 TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A", | |
756 TESTDATA_DIR "DISK2/INPUT/I24", | |
757 TESTDATA_DIR "DISK2/HOMING/24/HI24FA.O", | |
758 24000, | |
759 G726_ENCODING_NONE, | |
760 G726_ENCODING_ALAW | |
761 }, | |
762 { | |
763 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
764 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
765 TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A", | |
766 TESTDATA_DIR "DISK2/HOMING/24/HV24FA.I", | |
767 TESTDATA_DIR "DISK2/HOMING/24/HV24FA.O", | |
768 24000, | |
769 G726_ENCODING_ALAW, | |
770 G726_ENCODING_ALAW | |
771 }, | |
772 { | |
773 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
774 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
775 TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A", | |
776 TESTDATA_DIR "DISK2/HOMING/32/HN32FA.I", | |
777 TESTDATA_DIR "DISK2/HOMING/32/HN32FA.O", | |
778 32000, | |
779 G726_ENCODING_ALAW, | |
780 G726_ENCODING_ALAW | |
781 }, | |
782 { | |
783 "", | |
784 "", | |
785 TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A", | |
786 TESTDATA_DIR "DISK2/INPUT/I32", | |
787 TESTDATA_DIR "DISK2/HOMING/32/HI32FA.O", | |
788 32000, | |
789 G726_ENCODING_NONE, | |
790 G726_ENCODING_ALAW | |
791 }, | |
792 { | |
793 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
794 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
795 TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A", | |
796 TESTDATA_DIR "DISK2/HOMING/32/HV32FA.I", | |
797 TESTDATA_DIR "DISK2/HOMING/32/HV32FA.O", | |
798 32000, | |
799 G726_ENCODING_ALAW, | |
800 G726_ENCODING_ALAW | |
801 }, | |
802 { | |
803 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
804 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
805 TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A", | |
806 TESTDATA_DIR "DISK2/HOMING/40/HN40FA.I", | |
807 TESTDATA_DIR "DISK2/HOMING/40/HN40FA.O", | |
808 40000, | |
809 G726_ENCODING_ALAW, | |
810 G726_ENCODING_ALAW | |
811 }, | |
812 { | |
813 "", | |
814 "", | |
815 TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A", | |
816 TESTDATA_DIR "DISK2/INPUT/I40", | |
817 TESTDATA_DIR "DISK2/HOMING/40/HI40FA.O", | |
818 40000, | |
819 G726_ENCODING_NONE, | |
820 G726_ENCODING_ALAW | |
821 }, | |
822 { | |
823 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
824 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
825 TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A", | |
826 TESTDATA_DIR "DISK2/HOMING/40/HV40FA.I", | |
827 TESTDATA_DIR "DISK2/HOMING/40/HV40FA.O", | |
828 40000, | |
829 G726_ENCODING_ALAW, | |
830 G726_ENCODING_ALAW | |
831 }, | |
832 /* u-law to A-law tests */ | |
833 { | |
834 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
835 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
836 TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A", | |
837 TESTDATA_DIR "DISK1/HOMING/16/HN16FM.I", | |
838 TESTDATA_DIR "DISK1/HOMING/16/HN16FC.O", | |
839 16000, | |
840 G726_ENCODING_ULAW, | |
841 G726_ENCODING_ALAW | |
842 }, | |
843 { | |
844 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
845 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
846 TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A", | |
847 TESTDATA_DIR "DISK1/HOMING/16/HV16FM.I", | |
848 TESTDATA_DIR "DISK1/HOMING/16/HV16FC.O", | |
849 16000, | |
850 G726_ENCODING_ULAW, | |
851 G726_ENCODING_ALAW | |
852 }, | |
853 { | |
854 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
855 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
856 TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A", | |
857 TESTDATA_DIR "DISK1/HOMING/24/HN24FM.I", | |
858 TESTDATA_DIR "DISK1/HOMING/24/HN24FC.O", | |
859 24000, | |
860 G726_ENCODING_ULAW, | |
861 G726_ENCODING_ALAW | |
862 }, | |
863 { | |
864 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
865 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
866 TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A", | |
867 TESTDATA_DIR "DISK1/HOMING/24/HV24FM.I", | |
868 TESTDATA_DIR "DISK1/HOMING/24/HV24FC.O", | |
869 24000, | |
870 G726_ENCODING_ULAW, | |
871 G726_ENCODING_ALAW | |
872 }, | |
873 { | |
874 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
875 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
876 TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A", | |
877 TESTDATA_DIR "DISK1/HOMING/32/HN32FM.I", | |
878 TESTDATA_DIR "DISK1/HOMING/32/HN32FC.O", | |
879 32000, | |
880 G726_ENCODING_ULAW, | |
881 G726_ENCODING_ALAW | |
882 }, | |
883 { | |
884 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
885 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
886 TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A", | |
887 TESTDATA_DIR "DISK1/HOMING/32/HV32FM.I", | |
888 TESTDATA_DIR "DISK1/HOMING/32/HV32FC.O", | |
889 32000, | |
890 G726_ENCODING_ULAW, | |
891 G726_ENCODING_ALAW | |
892 }, | |
893 { | |
894 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
895 TESTDATA_DIR "DISK1/INPUT/NRM.M", | |
896 TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A", | |
897 TESTDATA_DIR "DISK1/HOMING/40/HN40FM.I", | |
898 TESTDATA_DIR "DISK1/HOMING/40/HN40FC.O", | |
899 40000, | |
900 G726_ENCODING_ULAW, | |
901 G726_ENCODING_ALAW | |
902 }, | |
903 { | |
904 TESTDATA_DIR "DISK1/PCM_INIT.M", | |
905 TESTDATA_DIR "DISK1/INPUT/OVR.M", | |
906 TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A", | |
907 TESTDATA_DIR "DISK1/HOMING/40/HV40FM.I", | |
908 TESTDATA_DIR "DISK1/HOMING/40/HV40FC.O", | |
909 40000, | |
910 G726_ENCODING_ULAW, | |
911 G726_ENCODING_ALAW | |
912 }, | |
913 /* A-law to u-law tests */ | |
914 { | |
915 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
916 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
917 TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M", | |
918 TESTDATA_DIR "DISK2/HOMING/16/HN16FA.I", | |
919 TESTDATA_DIR "DISK2/HOMING/16/HN16FX.O", | |
920 16000, | |
921 G726_ENCODING_ALAW, | |
922 G726_ENCODING_ULAW | |
923 }, | |
924 { | |
925 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
926 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
927 TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M", | |
928 TESTDATA_DIR "DISK2/HOMING/16/HV16FA.I", | |
929 TESTDATA_DIR "DISK2/HOMING/16/HV16FX.O", | |
930 16000, | |
931 G726_ENCODING_ALAW, | |
932 G726_ENCODING_ULAW | |
933 }, | |
934 { | |
935 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
936 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
937 TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M", | |
938 TESTDATA_DIR "DISK2/HOMING/24/HN24FA.I", | |
939 TESTDATA_DIR "DISK2/HOMING/24/HN24FX.O", | |
940 24000, | |
941 G726_ENCODING_ALAW, | |
942 G726_ENCODING_ULAW | |
943 }, | |
944 { | |
945 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
946 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
947 TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M", | |
948 TESTDATA_DIR "DISK2/HOMING/24/HV24FA.I", | |
949 TESTDATA_DIR "DISK2/HOMING/24/HV24FX.O", | |
950 24000, | |
951 G726_ENCODING_ALAW, | |
952 G726_ENCODING_ULAW | |
953 }, | |
954 { | |
955 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
956 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
957 TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M", | |
958 TESTDATA_DIR "DISK2/HOMING/32/HN32FA.I", | |
959 TESTDATA_DIR "DISK2/HOMING/32/HN32FX.O", | |
960 32000, | |
961 G726_ENCODING_ALAW, | |
962 G726_ENCODING_ULAW | |
963 }, | |
964 { | |
965 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
966 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
967 TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M", | |
968 TESTDATA_DIR "DISK2/HOMING/32/HV32FA.I", | |
969 TESTDATA_DIR "DISK2/HOMING/32/HV32FX.O", | |
970 32000, | |
971 G726_ENCODING_ALAW, | |
972 G726_ENCODING_ULAW | |
973 }, | |
974 { | |
975 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
976 TESTDATA_DIR "DISK2/INPUT/NRM.A", | |
977 TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M", | |
978 TESTDATA_DIR "DISK2/HOMING/40/HN40FA.I", | |
979 TESTDATA_DIR "DISK2/HOMING/40/HN40FX.O", | |
980 40000, | |
981 G726_ENCODING_ALAW, | |
982 G726_ENCODING_ULAW | |
983 }, | |
984 { | |
985 TESTDATA_DIR "DISK2/PCM_INIT.A", | |
986 TESTDATA_DIR "DISK2/INPUT/OVR.A", | |
987 TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M", | |
988 TESTDATA_DIR "DISK2/HOMING/40/HV40FA.I", | |
989 TESTDATA_DIR "DISK2/HOMING/40/HV40FX.O", | |
990 40000, | |
991 G726_ENCODING_ALAW, | |
992 G726_ENCODING_ULAW | |
993 }, | |
994 { | |
995 NULL, | |
996 NULL, | |
997 NULL, | |
998 NULL, | |
999 NULL, | |
1000 0, | |
1001 0, | |
1002 0 | |
1003 } | |
1004 }; | |
1005 | |
1006 static int hex_get(char *s) | |
1007 { | |
1008 int i; | |
1009 int value; | |
1010 int x; | |
1011 | |
1012 for (value = i = 0; i < 2; i++) | |
1013 { | |
1014 x = *s++ - 0x30; | |
1015 if (x > 9) | |
1016 x -= 0x07; | |
1017 if (x > 15) | |
1018 x -= 0x20; | |
1019 if (x < 0 || x > 15) | |
1020 return -1; | |
1021 value <<= 4; | |
1022 value |= x; | |
1023 } | |
1024 return value; | |
1025 } | |
1026 /*- End of function --------------------------------------------------------*/ | |
1027 | |
1028 static int get_vector(FILE *file, uint8_t vec[]) | |
1029 { | |
1030 char buf[132 + 1]; | |
1031 char *s; | |
1032 int i; | |
1033 int value; | |
1034 | |
1035 while (fgets(buf, 133, file)) | |
1036 { | |
1037 s = buf; | |
1038 i = 0; | |
1039 while ((value = hex_get(s)) >= 0) | |
1040 { | |
1041 vec[i++] = value; | |
1042 s += 2; | |
1043 } | |
1044 return i; | |
1045 } | |
1046 return 0; | |
1047 } | |
1048 /*- End of function --------------------------------------------------------*/ | |
1049 | |
1050 static int get_test_vector(const char *file, uint8_t buf[], int max_len) | |
1051 { | |
1052 int octets; | |
1053 int i; | |
1054 int sum; | |
1055 FILE *infile; | |
1056 | |
1057 if ((infile = fopen(file, "r")) == NULL) | |
1058 { | |
1059 fprintf(stderr, " Failed to open '%s'\n", file); | |
1060 exit(2); | |
1061 } | |
1062 octets = 0; | |
1063 while ((i = get_vector(infile, buf + octets)) > 0) | |
1064 octets += i; | |
1065 fclose(infile); | |
1066 /* The last octet is a sumcheck, so the real data octets are one less than | |
1067 the total we have */ | |
1068 octets--; | |
1069 /* Test the checksum */ | |
1070 for (sum = i = 0; i < octets; i++) | |
1071 sum += buf[i]; | |
1072 if (sum%255 != (int) buf[i]) | |
1073 { | |
1074 fprintf(stderr, " Sumcheck failed in '%s' - %x %x\n", file, sum%255, buf[i]); | |
1075 exit(2); | |
1076 } | |
1077 return octets; | |
1078 } | |
1079 /*- End of function --------------------------------------------------------*/ | |
1080 | |
1081 int main(int argc, char *argv[]) | |
1082 { | |
1083 g726_state_t enc_state; | |
1084 g726_state_t dec_state; | |
1085 int len2; | |
1086 int len3; | |
1087 int i; | |
1088 int test; | |
1089 int bits_per_code; | |
1090 int itutests; | |
1091 int bit_rate; | |
1092 int bad_samples; | |
1093 AFfilehandle inhandle; | |
1094 AFfilehandle outhandle; | |
1095 AFfilesetup filesetup; | |
1096 int16_t amp[1024]; | |
1097 int frames; | |
1098 int outframes; | |
1099 int conditioning_samples; | |
1100 int samples; | |
1101 int conditioning_adpcm; | |
1102 int adpcm; | |
1103 int packing; | |
1104 float x; | |
1105 | |
1106 i = 1; | |
1107 bit_rate = 32000; | |
1108 itutests = TRUE; | |
1109 packing = G726_PACKING_NONE; | |
1110 while (argc > i) | |
1111 { | |
1112 if (strcmp(argv[i], "-16") == 0) | |
1113 { | |
1114 bit_rate = 16000; | |
1115 itutests = FALSE; | |
1116 i++; | |
1117 } | |
1118 else if (strcmp(argv[i], "-24") == 0) | |
1119 { | |
1120 bit_rate = 24000; | |
1121 itutests = FALSE; | |
1122 i++; | |
1123 } | |
1124 else if (strcmp(argv[i], "-32") == 0) | |
1125 { | |
1126 bit_rate = 32000; | |
1127 itutests = FALSE; | |
1128 i++; | |
1129 } | |
1130 else if (strcmp(argv[i], "-40") == 0) | |
1131 { | |
1132 bit_rate = 40000; | |
1133 itutests = FALSE; | |
1134 i++; | |
1135 } | |
1136 else if (strcmp(argv[i], "-l") == 0) | |
1137 { | |
1138 packing = G726_PACKING_LEFT; | |
1139 i++; | |
1140 } | |
1141 else if (strcmp(argv[i], "-r") == 0) | |
1142 { | |
1143 packing = G726_PACKING_RIGHT; | |
1144 i++; | |
1145 } | |
1146 else | |
1147 { | |
1148 fprintf(stderr, "Unknown parameter %s specified.\n", argv[i]); | |
1149 exit(2); | |
1150 } | |
1151 } | |
1152 | |
1153 len2 = 0; | |
1154 conditioning_samples = 0; | |
1155 if (itutests) | |
1156 { | |
1157 for (test = 0; itu_test_sets[test].rate; test++) | |
1158 { | |
1159 printf("Test %2d: '%s' + '%s'\n" | |
1160 " -> '%s' + '%s'\n" | |
1161 " -> '%s' [%d, %d, %d]\n", | |
1162 test, | |
1163 itu_test_sets[test].conditioning_pcm_file, | |
1164 itu_test_sets[test].pcm_file, | |
1165 itu_test_sets[test].conditioning_adpcm_file, | |
1166 itu_test_sets[test].adpcm_file, | |
1167 itu_test_sets[test].output_file, | |
1168 itu_test_sets[test].rate, | |
1169 itu_test_sets[test].compression_law, | |
1170 itu_test_sets[test].decompression_law); | |
1171 switch (itu_test_sets[test].rate) | |
1172 { | |
1173 case 16000: | |
1174 bits_per_code = 2; | |
1175 break; | |
1176 case 24000: | |
1177 bits_per_code = 3; | |
1178 break; | |
1179 case 32000: | |
1180 default: | |
1181 bits_per_code = 4; | |
1182 break; | |
1183 case 40000: | |
1184 bits_per_code = 5; | |
1185 break; | |
1186 } | |
1187 if (itu_test_sets[test].compression_law != G726_ENCODING_NONE) | |
1188 { | |
1189 /* Test the encode side */ | |
1190 g726_init(&enc_state, itu_test_sets[test].rate, itu_test_sets[test].compression_law, G726_PACKING_NONE); | |
1191 if (itu_test_sets[test].conditioning_pcm_file[0]) | |
1192 { | |
1193 conditioning_samples = get_test_vector(itu_test_sets[test].conditioning_pcm_file, xlaw, MAX_TEST_VECTOR_LEN); | |
1194 printf("Test %d: Homing %d samples at %dbps\n", test, conditioning_samples, itu_test_sets[test].rate); | |
1195 } | |
1196 else | |
1197 { | |
1198 conditioning_samples = 0; | |
1199 } | |
1200 samples = get_test_vector(itu_test_sets[test].pcm_file, xlaw + conditioning_samples, MAX_TEST_VECTOR_LEN); | |
1201 memcpy(itudata, xlaw, samples + conditioning_samples); | |
1202 printf("Test %d: Compressing %d samples at %dbps\n", test, samples, itu_test_sets[test].rate); | |
1203 len2 = g726_encode(&enc_state, adpcmdata, itudata, conditioning_samples + samples); | |
1204 } | |
1205 /* Test the decode side */ | |
1206 g726_init(&dec_state, itu_test_sets[test].rate, itu_test_sets[test].decompression_law, G726_PACKING_NONE); | |
1207 if (itu_test_sets[test].conditioning_adpcm_file[0]) | |
1208 { | |
1209 conditioning_adpcm = get_test_vector(itu_test_sets[test].conditioning_adpcm_file, unpacked, MAX_TEST_VECTOR_LEN); | |
1210 printf("Test %d: Homing %d octets at %dbps\n", test, conditioning_adpcm, itu_test_sets[test].rate); | |
1211 } | |
1212 else | |
1213 { | |
1214 conditioning_adpcm = 0; | |
1215 } | |
1216 adpcm = get_test_vector(itu_test_sets[test].adpcm_file, unpacked + conditioning_adpcm, MAX_TEST_VECTOR_LEN); | |
1217 if (itu_test_sets[test].compression_law != G726_ENCODING_NONE) | |
1218 { | |
1219 /* Test our compressed version against the reference compressed version */ | |
1220 printf("Test %d: Compressed data check - %d/%d octets\n", test, conditioning_adpcm + adpcm, len2); | |
1221 if (conditioning_adpcm + adpcm == len2) | |
1222 { | |
1223 for (bad_samples = 0, i = conditioning_samples; i < len2; i++) | |
1224 { | |
1225 if (adpcmdata[i] != unpacked[i]) | |
1226 { | |
1227 bad_samples++; | |
1228 printf("Test %d: Compressed mismatch %d %x %x\n", test, i, adpcmdata[i], unpacked[i]); | |
1229 } | |
1230 } | |
1231 if (bad_samples > 0) | |
1232 { | |
1233 printf("Test failed\n"); | |
1234 exit(2); | |
1235 } | |
1236 printf("Test passed\n"); | |
1237 } | |
1238 else | |
1239 { | |
1240 printf("Test %d: Length mismatch - ref = %d, processed = %d\n", test, conditioning_adpcm + adpcm, len2); | |
1241 exit(2); | |
1242 } | |
1243 } | |
1244 | |
1245 len3 = g726_decode(&dec_state, outdata, unpacked, conditioning_adpcm + adpcm); | |
1246 | |
1247 /* Get the output reference data */ | |
1248 samples = get_test_vector(itu_test_sets[test].output_file, xlaw, MAX_TEST_VECTOR_LEN); | |
1249 memcpy(itu_ref, xlaw, samples); | |
1250 /* Test our decompressed version against the reference decompressed version */ | |
1251 printf("Test %d: Decompressed data check - %d/%d samples\n", test, samples, len3 - conditioning_adpcm); | |
1252 if (samples == len3 - conditioning_adpcm) | |
1253 { | |
1254 for (bad_samples = 0, i = 0; i < len3; i++) | |
1255 { | |
1256 if (itu_ref[i] != ((uint8_t *) outdata)[i + conditioning_adpcm]) | |
1257 { | |
1258 bad_samples++; | |
1259 printf("Test %d: Decompressed mismatch %d %x %x\n", test, i, itu_ref[i], ((uint8_t *) outdata)[i + conditioning_adpcm]); | |
1260 } | |
1261 } | |
1262 if (bad_samples > 0) | |
1263 { | |
1264 printf("Test failed\n"); | |
1265 exit(2); | |
1266 } | |
1267 printf("Test passed\n"); | |
1268 } | |
1269 else | |
1270 { | |
1271 printf("Test %d: Length mismatch - ref = %d, processed = %d\n", test, samples, len3 - conditioning_adpcm); | |
1272 exit(2); | |
1273 } | |
1274 } | |
1275 | |
1276 printf("Tests passed.\n"); | |
1277 } | |
1278 else | |
1279 { | |
1280 if ((inhandle = afOpenFile(IN_FILE_NAME, "r", 0)) == AF_NULL_FILEHANDLE) | |
1281 { | |
1282 printf(" Cannot open wave file '%s'\n", IN_FILE_NAME); | |
1283 exit(2); | |
1284 } | |
1285 if ((x = afGetFrameSize(inhandle, AF_DEFAULT_TRACK, 1)) != 2.0) | |
1286 { | |
1287 printf(" Unexpected frame size in wave file '%s'\n", IN_FILE_NAME); | |
1288 exit(2); | |
1289 } | |
1290 if ((x = afGetRate(inhandle, AF_DEFAULT_TRACK)) != (float) SAMPLE_RATE) | |
1291 { | |
1292 printf(" Unexpected sample rate in wave file '%s'\n", IN_FILE_NAME); | |
1293 exit(2); | |
1294 } | |
1295 if ((x = afGetChannels(inhandle, AF_DEFAULT_TRACK)) != 1.0) | |
1296 { | |
1297 printf(" Unexpected number of channels in wave file '%s'\n", IN_FILE_NAME); | |
1298 exit(2); | |
1299 } | |
1300 if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP) | |
1301 { | |
1302 fprintf(stderr, " Failed to create file setup\n"); | |
1303 exit(2); | |
1304 } | |
1305 afInitSampleFormat(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16); | |
1306 afInitRate(filesetup, AF_DEFAULT_TRACK, (float) SAMPLE_RATE); | |
1307 afInitFileFormat(filesetup, AF_FILE_WAVE); | |
1308 afInitChannels(filesetup, AF_DEFAULT_TRACK, 1); | |
1309 | |
1310 outhandle = afOpenFile(OUT_FILE_NAME, "w", filesetup); | |
1311 if (outhandle == AF_NULL_FILEHANDLE) | |
1312 { | |
1313 fprintf(stderr, " Cannot create wave file '%s'\n", OUT_FILE_NAME); | |
1314 exit(2); | |
1315 } | |
1316 | |
1317 printf("ADPCM packing is %d\n", packing); | |
1318 g726_init(&enc_state, bit_rate, G726_ENCODING_LINEAR, packing); | |
1319 g726_init(&dec_state, bit_rate, G726_ENCODING_LINEAR, packing); | |
1320 | |
1321 while ((frames = afReadFrames(inhandle, AF_DEFAULT_TRACK, amp, 159))) | |
1322 { | |
1323 adpcm = g726_encode(&enc_state, adpcmdata, amp, frames); | |
1324 frames = g726_decode(&dec_state, amp, adpcmdata, adpcm); | |
1325 outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, amp, frames); | |
1326 } | |
1327 if (afCloseFile(inhandle) != 0) | |
1328 { | |
1329 printf(" Cannot close wave file '%s'\n", IN_FILE_NAME); | |
1330 exit(2); | |
1331 } | |
1332 if (afCloseFile(outhandle) != 0) | |
1333 { | |
1334 printf(" Cannot close wave file '%s'\n", OUT_FILE_NAME); | |
1335 exit(2); | |
1336 } | |
1337 afFreeFileSetup(filesetup); | |
1338 printf("'%s' transcoded to '%s' at %dbps.\n", IN_FILE_NAME, OUT_FILE_NAME, bit_rate); | |
1339 } | |
1340 return 0; | |
1341 } | |
1342 /*- End of function --------------------------------------------------------*/ | |
1343 /*- End of file ------------------------------------------------------------*/ |