5
|
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 ------------------------------------------------------------*/
|