Libav 0.7.1
|
00001 /* 00002 * QCELP decoder 00003 * Copyright (c) 2007 Reynaldo H. Verdejo Pinochet 00004 * 00005 * This file is part of Libav. 00006 * 00007 * Libav is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * Libav is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with Libav; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00020 */ 00021 00022 #ifndef AVCODEC_QCELPDATA_H 00023 #define AVCODEC_QCELPDATA_H 00024 00033 #include <stddef.h> 00034 #include <stdint.h> 00035 #include "libavutil/common.h" 00036 00040 typedef struct { 00043 uint8_t cbsign[16]; 00044 uint8_t cbgain[16]; 00045 uint8_t cindex[16]; 00046 00047 00050 uint8_t plag[4]; 00051 uint8_t pfrac[4]; 00052 uint8_t pgain[4]; 00053 00054 00060 uint8_t lspv[10]; 00061 00065 uint8_t reserved; 00066 } QCELPFrame; 00067 00074 static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863}; 00075 00076 typedef struct { 00077 uint8_t index; 00078 uint8_t bitpos; 00079 uint8_t bitlen; 00080 } QCELPBitmap; 00081 00082 #define QCELP_OF(variable, bit, len) {offsetof(QCELPFrame, variable), bit, len} 00083 00089 static const QCELPBitmap qcelp_rate_full_bitmap[] = { 00090 // start on bit 00091 QCELP_OF(lspv [ 2], 0, 3), // 265 00092 QCELP_OF(lspv [ 1], 0, 7), // 262 00093 QCELP_OF(lspv [ 0], 0, 6), // 255 00094 QCELP_OF(lspv [ 4], 0, 6), // 249 00095 QCELP_OF(lspv [ 3], 0, 6), // 243 00096 QCELP_OF(lspv [ 2], 3, 4), // 237 00097 QCELP_OF(cbsign[ 0], 0, 1), // 233 00098 QCELP_OF(cbgain[ 0], 0, 4), // 232 00099 QCELP_OF(pfrac [ 0], 0, 1), // 228 00100 QCELP_OF(plag [ 0], 0, 7), // 227 00101 QCELP_OF(pgain [ 0], 0, 3), // 220 00102 QCELP_OF(cindex[ 1], 0, 4), // 217 00103 QCELP_OF(cbsign[ 1], 0, 1), // 213 00104 QCELP_OF(cbgain[ 1], 0, 4), // 212 00105 QCELP_OF(cindex[ 0], 0, 7), // 208 00106 QCELP_OF(cbgain[ 3], 0, 1), // 201 00107 QCELP_OF(cindex[ 2], 0, 7), // 200 00108 QCELP_OF(cbsign[ 2], 0, 1), // 193 00109 QCELP_OF(cbgain[ 2], 0, 4), // 192 00110 QCELP_OF(cindex[ 1], 4, 3), // 188 00111 QCELP_OF(plag [ 1], 0, 3), // 185 00112 QCELP_OF(pgain [ 1], 0, 3), // 182 00113 QCELP_OF(cindex[ 3], 0, 7), // 179 00114 QCELP_OF(cbsign[ 3], 0, 1), // 172 00115 QCELP_OF(cbgain[ 3], 1, 2), // 171 00116 QCELP_OF(cindex[ 4], 0, 6), // 169 00117 QCELP_OF(cbsign[ 4], 0, 1), // 163 00118 QCELP_OF(cbgain[ 4], 0, 4), // 162 00119 QCELP_OF(pfrac [ 1], 0, 1), // 158 00120 QCELP_OF(plag [ 1], 3, 4), // 157 00121 QCELP_OF(cbgain[ 6], 0, 3), // 153 00122 QCELP_OF(cindex[ 5], 0, 7), // 150 00123 QCELP_OF(cbsign[ 5], 0, 1), // 143 00124 QCELP_OF(cbgain[ 5], 0, 4), // 142 00125 QCELP_OF(cindex[ 4], 6, 1), // 138 00126 QCELP_OF(cindex[ 7], 0, 3), // 137 00127 QCELP_OF(cbsign[ 7], 0, 1), // 134 00128 QCELP_OF(cbgain[ 7], 0, 3), // 133 00129 QCELP_OF(cindex[ 6], 0, 7), // 130 00130 QCELP_OF(cbsign[ 6], 0, 1), // 123 00131 QCELP_OF(cbgain[ 6], 3, 1), // 122 00132 QCELP_OF(cbgain[ 8], 0, 1), // 121 00133 QCELP_OF(pfrac [ 2], 0, 1), // 120 00134 QCELP_OF(plag [ 2], 0, 7), // 119 00135 QCELP_OF(pgain [ 2], 0, 3), // 112 00136 QCELP_OF(cindex[ 7], 3, 4), // 109 00137 QCELP_OF(cbsign[ 9], 0, 1), // 105 00138 QCELP_OF(cbgain[ 9], 0, 4), // 104 00139 QCELP_OF(cindex[ 8], 0, 7), // 100 00140 QCELP_OF(cbsign[ 8], 0, 1), // 93 00141 QCELP_OF(cbgain[ 8], 1, 3), // 92 00142 QCELP_OF(cindex[10], 0, 4), // 89 00143 QCELP_OF(cbsign[10], 0, 1), // 85 00144 QCELP_OF(cbgain[10], 0, 4), // 84 00145 QCELP_OF(cindex[ 9], 0, 7), // 80 00146 QCELP_OF(pgain [ 3], 0, 2), // 73 00147 QCELP_OF(cindex[11], 0, 7), // 71 00148 QCELP_OF(cbsign[11], 0, 1), // 64 00149 QCELP_OF(cbgain[11], 0, 3), // 63 00150 QCELP_OF(cindex[10], 4, 3), // 60 00151 QCELP_OF(cindex[12], 0, 2), // 57 00152 QCELP_OF(cbsign[12], 0, 1), // 55 00153 QCELP_OF(cbgain[12], 0, 4), // 54 00154 QCELP_OF(pfrac [ 3], 0, 1), // 50 00155 QCELP_OF(plag [ 3], 0, 7), // 49 00156 QCELP_OF(pgain [ 3], 2, 1), // 42 00157 QCELP_OF(cindex[13], 0, 6), // 41 00158 QCELP_OF(cbsign[13], 0, 1), // 35 00159 QCELP_OF(cbgain[13], 0, 4), // 34 00160 QCELP_OF(cindex[12], 2, 5), // 30 00161 QCELP_OF(cbgain[15], 0, 3), // 25 00162 QCELP_OF(cindex[14], 0, 7), // 22 00163 QCELP_OF(cbsign[14], 0, 1), // 15 00164 QCELP_OF(cbgain[14], 0, 4), // 14 00165 QCELP_OF(cindex[13], 6, 1), // 10 00166 QCELP_OF(reserved, 0, 2), // 9 00167 QCELP_OF(cindex[15], 0, 7), // 7 00168 QCELP_OF(cbsign[15], 0, 1) // 0 00169 }; 00170 00176 static const QCELPBitmap qcelp_rate_half_bitmap[] = { 00177 // start on bit 00178 QCELP_OF(lspv [2], 0, 3), // 123 00179 QCELP_OF(lspv [1], 0, 7), // 120 00180 QCELP_OF(lspv [0], 0, 6), // 113 00181 QCELP_OF(lspv [4], 0, 6), // 107 00182 QCELP_OF(lspv [3], 0, 6), // 101 00183 QCELP_OF(lspv [2], 3, 4), // 95 00184 QCELP_OF(cbsign[0], 0, 1), // 91 00185 QCELP_OF(cbgain[0], 0, 4), // 90 00186 QCELP_OF(pfrac [0], 0, 1), // 86 00187 QCELP_OF(plag [0], 0, 7), // 85 00188 QCELP_OF(pgain [0], 0, 3), // 78 00189 QCELP_OF(plag [1], 0, 6), // 75 00190 QCELP_OF(pgain [1], 0, 3), // 69 00191 QCELP_OF(cindex[0], 0, 7), // 66 00192 QCELP_OF(pgain [2], 0, 2), // 59 00193 QCELP_OF(cindex[1], 0, 7), // 57 00194 QCELP_OF(cbsign[1], 0, 1), // 50 00195 QCELP_OF(cbgain[1], 0, 4), // 49 00196 QCELP_OF(pfrac [1], 0, 1), // 45 00197 QCELP_OF(plag [1], 6, 1), // 44 00198 QCELP_OF(cindex[2], 0, 2), // 43 00199 QCELP_OF(cbsign[2], 0, 1), // 41 00200 QCELP_OF(cbgain[2], 0, 4), // 40 00201 QCELP_OF(pfrac [2], 0, 1), // 36 00202 QCELP_OF(plag [2], 0, 7), // 35 00203 QCELP_OF(pgain [2], 2, 1), // 28 00204 QCELP_OF(pfrac [3], 0, 1), // 27 00205 QCELP_OF(plag [3], 0, 7), // 26 00206 QCELP_OF(pgain [3], 0, 3), // 19 00207 QCELP_OF(cindex[2], 2, 5), // 16 00208 QCELP_OF(cindex[3], 0, 7), // 11 00209 QCELP_OF(cbsign[3], 0, 1), // 4 00210 QCELP_OF(cbgain[3], 0, 4) // 3 00211 }; 00212 00218 static const QCELPBitmap qcelp_rate_quarter_bitmap[] = { 00219 // start on bit 00220 QCELP_OF(lspv [2], 0, 3), // 53 00221 QCELP_OF(lspv [1], 0, 7), // 50 00222 QCELP_OF(lspv [0], 0, 6), // 43 00223 QCELP_OF(lspv [4], 0, 6), // 37 00224 QCELP_OF(lspv [3], 0, 6), // 31 00225 QCELP_OF(lspv [2], 3, 4), // 25 00226 QCELP_OF(cbgain[3], 0, 4), // 21 00227 QCELP_OF(cbgain[2], 0, 4), // 17 00228 QCELP_OF(cbgain[1], 0, 4), // 13 00229 QCELP_OF(cbgain[0], 0, 4), // 9 00230 QCELP_OF(reserved, 0, 2), // 5 00231 QCELP_OF(cbgain[4], 0, 4) // 3 00232 }; 00233 00244 static const QCELPBitmap qcelp_rate_octave_bitmap[] = { 00245 // start on bit 00246 QCELP_OF(cbsign[15], 3, 1), // 19 00247 QCELP_OF(lspv [0], 0, 1), // 18 00248 QCELP_OF(lspv [1], 0, 1), // 17 00249 QCELP_OF(lspv [2], 0, 1), // 16 00250 QCELP_OF(cbsign[15], 2, 1), // 15 00251 QCELP_OF(lspv [3], 0, 1), // 14 00252 QCELP_OF(lspv [4], 0, 1), // 13 00253 QCELP_OF(lspv [5], 0, 1), // 12 00254 QCELP_OF(cbsign[15], 1, 1), // 11 00255 QCELP_OF(lspv [6], 0, 1), // 10 00256 QCELP_OF(lspv [7], 0, 1), // 9 00257 QCELP_OF(lspv [8], 0, 1), // 8 00258 QCELP_OF(cbsign[15], 0, 1), // 7 00259 QCELP_OF(lspv [9], 0, 1), // 6 00260 QCELP_OF(cbgain [0], 0, 2), // 7 00261 QCELP_OF(reserved, 0, 4) // 3 00262 }; 00263 00268 static const QCELPBitmap * const qcelp_unpacking_bitmaps_per_rate[5] = { 00269 NULL, 00270 qcelp_rate_octave_bitmap, 00271 qcelp_rate_quarter_bitmap, 00272 qcelp_rate_half_bitmap, 00273 qcelp_rate_full_bitmap, 00274 }; 00275 00276 static const uint16_t qcelp_unpacking_bitmaps_lengths[5] = { 00277 0, 00278 FF_ARRAY_ELEMS(qcelp_rate_octave_bitmap), 00279 FF_ARRAY_ELEMS(qcelp_rate_quarter_bitmap), 00280 FF_ARRAY_ELEMS(qcelp_rate_half_bitmap), 00281 FF_ARRAY_ELEMS(qcelp_rate_full_bitmap), 00282 }; 00283 00284 typedef uint16_t qcelp_vector[2]; 00285 00292 static const qcelp_vector qcelp_lspvq1[64]= { 00293 { 327, 118},{ 919, 111},{ 427, 440},{1327, 185}, 00294 { 469, 50},{1272, 91},{ 892, 59},{1771, 193}, 00295 { 222, 158},{1100, 127},{ 827, 55},{ 978, 791}, 00296 { 665, 47},{ 700,1401},{ 670, 859},{1913,1048}, 00297 { 471, 215},{1046, 125},{ 645, 298},{1599, 160}, 00298 { 593, 39},{1187, 462},{ 749, 341},{1520, 511}, 00299 { 290, 792},{ 909, 362},{ 753, 81},{1111,1058}, 00300 { 519, 253},{ 828, 839},{ 685, 541},{1421,1258}, 00301 { 386, 130},{ 962, 119},{ 542, 387},{1431, 185}, 00302 { 526, 51},{1175, 260},{ 831, 167},{1728, 510}, 00303 { 273, 437},{1172, 113},{ 771, 144},{1122, 751}, 00304 { 619, 119},{ 492,1276},{ 658, 695},{1882, 615}, 00305 { 415, 200},{1018, 88},{ 681, 339},{1436, 325}, 00306 { 555, 122},{1042, 485},{ 826, 345},{1374, 743}, 00307 { 383,1018},{1005, 358},{ 704, 86},{1301, 586}, 00308 { 597, 241},{ 832, 621},{ 555, 573},{1504, 839}}; 00309 00310 static const qcelp_vector qcelp_lspvq2[128]= { 00311 { 255, 293},{ 904, 219},{ 151,1211},{1447, 498}, 00312 { 470, 253},{1559, 177},{1547, 994},{2394, 242}, 00313 { 91, 813},{ 857, 590},{ 934,1326},{1889, 282}, 00314 { 813, 472},{1057,1494},{ 450,3315},{2163,1895}, 00315 { 538, 532},{1399, 218},{ 146,1552},{1755, 626}, 00316 { 822, 202},{1299, 663},{ 706,1732},{2656, 401}, 00317 { 418, 745},{ 762,1038},{ 583,1748},{1746,1285}, 00318 { 527,1169},{1314, 830},{ 556,2116},{1073,2321}, 00319 { 297, 570},{ 981, 403},{ 468,1103},{1740, 243}, 00320 { 725, 179},{1255, 474},{1374,1362},{1922, 912}, 00321 { 285, 947},{ 930, 700},{ 593,1372},{1909, 576}, 00322 { 588, 916},{1110,1116},{ 224,2719},{1633,2220}, 00323 { 402, 520},{1061, 448},{ 402,1352},{1499, 775}, 00324 { 664, 589},{1081, 727},{ 801,2206},{2165,1157}, 00325 { 566, 802},{ 911,1116},{ 306,1703},{1792, 836}, 00326 { 655, 999},{1061,1038},{ 298,2089},{1110,1753}, 00327 { 361, 311},{ 970, 239},{ 265,1231},{1495, 573}, 00328 { 566, 262},{1569, 293},{1341,1144},{2271, 544}, 00329 { 214, 877},{ 847, 719},{ 794,1384},{2067, 274}, 00330 { 703, 688},{1099,1306},{ 391,2947},{2024,1670}, 00331 { 471, 525},{1245, 290},{ 264,1557},{1568, 807}, 00332 { 718, 399},{1193, 685},{ 883,1594},{2729, 764}, 00333 { 500, 754},{ 809,1108},{ 541,1648},{1523,1385}, 00334 { 614,1196},{1209, 847},{ 345,2242},{1442,1747}, 00335 { 199, 560},{1092, 194},{ 349,1253},{1653, 507}, 00336 { 625, 354},{1376, 431},{1187,1465},{2164, 872}, 00337 { 360, 974},{1008, 698},{ 704,1346},{2114, 452}, 00338 { 720, 816},{1240,1089},{ 439,2475},{1498,2040}, 00339 { 336, 718},{1213, 187},{ 451,1450},{1368, 885}, 00340 { 592, 578},{1131, 531},{ 861,1855},{1764,1500}, 00341 { 444, 970},{ 935, 903},{ 424,1687},{1633,1102}, 00342 { 793, 897},{1060, 897},{ 185,2011},{1205,1855}}; 00343 00344 static const qcelp_vector qcelp_lspvq3[128]= { 00345 { 225, 283},{1296, 355},{ 543, 343},{2073, 274}, 00346 { 204,1099},{1562, 523},{1388, 161},{2784, 274}, 00347 { 112, 849},{1870, 175},{1189, 160},{1490,1088}, 00348 { 969,1115},{ 659,3322},{1158,1073},{3183,1363}, 00349 { 517, 223},{1740, 223},{ 704, 387},{2637, 234}, 00350 { 692,1005},{1287,1610},{ 952, 532},{2393, 646}, 00351 { 490, 552},{1619, 657},{ 845, 670},{1784,2280}, 00352 { 191,1775},{ 272,2868},{ 942, 952},{2628,1479}, 00353 { 278, 579},{1565, 218},{ 814, 180},{2379, 187}, 00354 { 276,1444},{1199,1223},{1200, 349},{3009, 307}, 00355 { 312, 844},{1898, 306},{ 863, 470},{1685,1241}, 00356 { 513,1727},{ 711,2233},{1085, 864},{3398, 527}, 00357 { 414, 440},{1356, 612},{ 964, 147},{2173, 738}, 00358 { 465,1292},{ 877,1749},{1104, 689},{2105,1311}, 00359 { 580, 864},{1895, 752},{ 652, 609},{1485,1699}, 00360 { 514,1400},{ 386,2131},{ 933, 798},{2473, 986}, 00361 { 334, 360},{1375, 398},{ 621, 276},{2183, 280}, 00362 { 311,1114},{1382, 807},{1284, 175},{2605, 636}, 00363 { 230, 816},{1739, 408},{1074, 176},{1619,1120}, 00364 { 784,1371},{ 448,3050},{1189, 880},{3039,1165}, 00365 { 424, 241},{1672, 186},{ 815, 333},{2432, 324}, 00366 { 584,1029},{1137,1546},{1015, 585},{2198, 995}, 00367 { 574, 581},{1746, 647},{ 733, 740},{1938,1737}, 00368 { 347,1710},{ 373,2429},{ 787,1061},{2439,1438}, 00369 { 185, 536},{1489, 178},{ 703, 216},{2178, 487}, 00370 { 154,1421},{1414, 994},{1103, 352},{3072, 473}, 00371 { 408, 819},{2055, 168},{ 998, 354},{1917,1140}, 00372 { 665,1799},{ 993,2213},{1234, 631},{3003, 762}, 00373 { 373, 620},{1518, 425},{ 913, 300},{1966, 836}, 00374 { 402,1185},{ 948,1385},{1121, 555},{1802,1509}, 00375 { 474, 886},{1888, 610},{ 739, 585},{1231,2379}, 00376 { 661,1335},{ 205,2211},{ 823, 822},{2480,1179}}; 00377 00378 static const qcelp_vector qcelp_lspvq4[64]= { 00379 { 348, 311},{ 812,1145},{ 552, 461},{1826, 263}, 00380 { 601, 675},{1730, 172},{1523, 193},{2449, 277}, 00381 { 334, 668},{ 805,1441},{1319, 207},{1684, 910}, 00382 { 582,1318},{1403,1098},{ 979, 832},{2700,1359}, 00383 { 624, 228},{1292, 979},{ 800, 195},{2226, 285}, 00384 { 730, 862},{1537, 601},{1115, 509},{2720, 354}, 00385 { 218,1167},{1212,1538},{1074, 247},{1674,1710}, 00386 { 322,2142},{1263, 777},{ 981, 556},{2119,1710}, 00387 { 193, 596},{1035, 957},{ 694, 397},{1997, 253}, 00388 { 743, 603},{1584, 321},{1346, 346},{2221, 708}, 00389 { 451, 732},{1040,1415},{1184, 230},{1853, 919}, 00390 { 310,1661},{1625, 706},{ 856, 843},{2902, 702}, 00391 { 467, 348},{1108,1048},{ 859, 306},{1964, 463}, 00392 { 560,1013},{1425, 533},{1142, 634},{2391, 879}, 00393 { 397,1084},{1345,1700},{ 976, 248},{1887,1189}, 00394 { 644,2087},{1262, 603},{ 877, 550},{2203,1307}}; 00395 00396 static const qcelp_vector qcelp_lspvq5[64]= { 00397 { 360, 222},{ 820,1097},{ 601, 319},{1656, 198}, 00398 { 604, 513},{1552, 141},{1391, 155},{2474, 261}, 00399 { 269, 785},{1463, 646},{1123, 191},{2015, 223}, 00400 { 785, 844},{1202,1011},{ 980, 807},{3014, 793}, 00401 { 570, 180},{1135,1382},{ 778, 256},{1901, 179}, 00402 { 807, 622},{1461, 458},{1231, 178},{2028, 821}, 00403 { 387, 927},{1496,1004},{ 888, 392},{2246, 341}, 00404 { 295,1462},{1156, 694},{1022, 473},{2226,1364}, 00405 { 210, 478},{1029,1020},{ 722, 181},{1730, 251}, 00406 { 730, 488},{1465, 293},{1303, 326},{2595, 387}, 00407 { 458, 584},{1569, 742},{1029, 173},{1910, 495}, 00408 { 605,1159},{1268, 719},{ 973, 646},{2872, 428}, 00409 { 443, 334},{ 835,1465},{ 912, 138},{1716, 442}, 00410 { 620, 778},{1316, 450},{1186, 335},{1446,1665}, 00411 { 486,1050},{1675,1019},{ 880, 278},{2214, 202}, 00412 { 539,1564},{1142, 533},{ 984, 391},{2130,1089}}; 00413 00414 static const qcelp_vector * const qcelp_lspvq[5] = { 00415 qcelp_lspvq1, 00416 qcelp_lspvq2, 00417 qcelp_lspvq3, 00418 qcelp_lspvq4, 00419 qcelp_lspvq5 00420 }; 00421 00425 #define QCELP_SCALE 8192. 00426 00436 static const float qcelp_g12ga[61] = { 00437 1.000/QCELP_SCALE, 1.125/QCELP_SCALE, 1.250/QCELP_SCALE, 1.375/QCELP_SCALE, 00438 1.625/QCELP_SCALE, 1.750/QCELP_SCALE, 2.000/QCELP_SCALE, 2.250/QCELP_SCALE, 00439 2.500/QCELP_SCALE, 2.875/QCELP_SCALE, 3.125/QCELP_SCALE, 3.500/QCELP_SCALE, 00440 4.000/QCELP_SCALE, 4.500/QCELP_SCALE, 5.000/QCELP_SCALE, 5.625/QCELP_SCALE, 00441 6.250/QCELP_SCALE, 7.125/QCELP_SCALE, 8.000/QCELP_SCALE, 8.875/QCELP_SCALE, 00442 10.000/QCELP_SCALE, 11.250/QCELP_SCALE, 12.625/QCELP_SCALE, 14.125/QCELP_SCALE, 00443 15.875/QCELP_SCALE, 17.750/QCELP_SCALE, 20.000/QCELP_SCALE, 22.375/QCELP_SCALE, 00444 25.125/QCELP_SCALE, 28.125/QCELP_SCALE, 31.625/QCELP_SCALE, 35.500/QCELP_SCALE, 00445 39.750/QCELP_SCALE, 44.625/QCELP_SCALE, 50.125/QCELP_SCALE, 56.250/QCELP_SCALE, 00446 63.125/QCELP_SCALE, 70.750/QCELP_SCALE, 79.375/QCELP_SCALE, 89.125/QCELP_SCALE, 00447 100.000/QCELP_SCALE, 112.250/QCELP_SCALE, 125.875/QCELP_SCALE, 141.250/QCELP_SCALE, 00448 158.500/QCELP_SCALE, 177.875/QCELP_SCALE, 199.500/QCELP_SCALE, 223.875/QCELP_SCALE, 00449 251.250/QCELP_SCALE, 281.875/QCELP_SCALE, 316.250/QCELP_SCALE, 354.875/QCELP_SCALE, 00450 398.125/QCELP_SCALE, 446.625/QCELP_SCALE, 501.125/QCELP_SCALE, 562.375/QCELP_SCALE, 00451 631.000/QCELP_SCALE, 708.000/QCELP_SCALE, 794.375/QCELP_SCALE, 891.250/QCELP_SCALE, 00452 1000.000/QCELP_SCALE}; 00453 00459 static const int16_t qcelp_rate_full_codebook[128] = { 00460 10, -65, -59, 12, 110, 34, -134, 157, 00461 104, -84, -34, -115, 23, -101, 3, 45, 00462 -101, -16, -59, 28, -45, 134, -67, 22, 00463 61, -29, 226, -26, -55, -179, 157, -51, 00464 -220, -93, -37, 60, 118, 74, -48, -95, 00465 -181, 111, 36, -52, -215, 78, -112, 39, 00466 -17, -47, -223, 19, 12, -98, -142, 130, 00467 54, -127, 21, -12, 39, -48, 12, 128, 00468 6, -167, 82, -102, -79, 55, -44, 48, 00469 -20, -53, 8, -61, 11, -70, -157, -168, 00470 20, -56, -74, 78, 33, -63, -173, -2, 00471 -75, -53, -146, 77, 66, -29, 9, -75, 00472 65, 119, -43, 76, 233, 98, 125, -156, 00473 -27, 78, -9, 170, 176, 143, -148, -7, 00474 27, -136, 5, 27, 18, 139, 204, 7, 00475 -184, -197, 52, -3, 78, -189, 8, -65 00476 }; 00477 #define QCELP_RATE_FULL_CODEBOOK_RATIO .01 00478 00484 static const int8_t qcelp_rate_half_codebook[128] = { 00485 0, -4, 0, -3, 0, 0, 0, 0, 00486 0, 0, 0, 0, 0, 0, 0, 0, 00487 0, -3, -2, 0, 0, 0, 0, 0, 00488 0, 0, 0, 0, 0, 0, 0, 5, 00489 0, 0, 0, 0, 0, 0, 4, 0, 00490 0, 3, 2, 0, 3, 4, 0, 0, 00491 0, 0, 0, 0, 0, 0, 0, 0, 00492 0, 0, 0, 0, 0, 3, 0, 0, 00493 -3, 3, 0, 0, -2, 0, 3, 0, 00494 0, 0, 0, 0, 0, 0, -5, 0, 00495 0, 0, 0, 3, 0, 0, 0, 3, 00496 0, 0, 0, 0, 0, 0, 0, 4, 00497 0, 0, 0, 0, 0, 0, 0, 0, 00498 0, 3, 6, -3, -4, 0, -3, -3, 00499 3, -3, 0, 0, 0, 0, 0, 0, 00500 0, 0, 0, 0, 0, 0, 0, 0 00501 }; 00502 #define QCELP_RATE_HALF_CODEBOOK_RATIO 0.5 00503 00511 #define QCELP_SQRT1887 1.373681186 00512 00521 static const double qcelp_rnd_fir_coefs[11] = { 00522 -1.344519e-1, 1.735384e-2, -6.905826e-2, 2.434368e-2, 00523 -8.210701e-2, 3.041388e-2, -9.251384e-2, 3.501983e-2, 00524 -9.918777e-2, 3.749518e-2, 8.985137e-1 00525 }; 00526 00533 #define QCELP_LSP_SPREAD_FACTOR 0.02 00534 00541 #define QCELP_LSP_OCTAVE_PREDICTOR 29.0/32 00542 00550 #define QCELP_BANDWIDTH_EXPANSION_COEFF 0.9883 00551 00552 #endif /* AVCODEC_QCELPDATA_H */