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