45 #define FILTER_TAPS 16
101 -9948, 9948, 29860, 49808, 69822, 89926, 110144, 130502,
102 151026, 171738, 192666, 213832, 235264, 256982, 279014, 301384,
103 324118, 347244, 370790, 394782, 419250, 444226, 469742, 495832,
104 522536, 549890, 577936, 606720, 636290, 666700, 698006, 730270,
105 763562, 797958, 833538, 870398, 908640, 948376, 989740, 1032874,
106 1077948, 1125150, 1174700, 1226850, 1281900, 1340196, 1402156, 1468282,
107 1539182, 1615610, 1698514, 1789098, 1888944, 2000168, 2125700, 2269750,
108 2438670, 2642660, 2899462, 3243240, 3746078, 4535138, 5664098, 7102424,
112 9948, 9948, 9962, 9988, 10026, 10078, 10142, 10218,
113 10306, 10408, 10520, 10646, 10784, 10934, 11098, 11274,
114 11462, 11664, 11880, 12112, 12358, 12618, 12898, 13194,
115 13510, 13844, 14202, 14582, 14988, 15422, 15884, 16380,
116 16912, 17484, 18098, 18762, 19480, 20258, 21106, 22030,
117 23044, 24158, 25390, 26760, 28290, 30008, 31954, 34172,
118 36728, 39700, 43202, 47382, 52462, 58762, 66770, 77280,
119 91642, 112348, 144452, 199326, 303512, 485546, 643414, 794914,
123 0, 4, 7, 10, 13, 16, 19, 22,
124 26, 28, 32, 35, 38, 41, 44, 47,
125 51, 54, 58, 62, 65, 70, 74, 79,
126 84, 90, 95, 102, 109, 116, 124, 133,
127 143, 154, 166, 180, 195, 212, 231, 254,
128 279, 308, 343, 383, 430, 487, 555, 639,
129 743, 876, 1045, 1270, 1575, 2002, 2628, 3591,
130 5177, 8026, 13719, 26047, 45509, 39467, 37875, 51303,
134 0, -21, -19, -17, -15, -12, -10, -8,
135 -6, -4, -1, 1, 3, 6, 8, 10,
136 13, 15, 18, 20, 23, 26, 29, 31,
137 34, 37, 40, 43, 47, 50, 53, 57,
138 60, 64, 68, 72, 76, 80, 85, 89,
139 94, 99, 105, 110, 116, 123, 129, 136,
140 144, 152, 161, 171, 182, 194, 207, 223,
141 241, 263, 291, 328, 382, 467, 522, 522,
147 -89806, 89806, 278502, 494338, 759442, 1113112, 1652322, 2720256, 5190186,
150 89806, 89806, 98890, 116946, 148158, 205512, 333698, 734236, 1735696,
153 0, 2271, 4514, 7803, 14339, 32047, 100135, 250365, 0,
156 0, -14, 6, 29, 58, 96, 154, 270, 521,
161 -194080, 194080, 890562,
164 194080, 194080, 502402,
175 -163006, 163006, 542708, 1120554, 2669238,
178 163006, 163006, 216698, 361148, 1187538,
181 0, 13423, 36113, 206598, 0,
189 -2436, 2436, 7308, 12180, 17054, 21930, 26806, 31686,
190 36566, 41450, 46338, 51230, 56124, 61024, 65928, 70836,
191 75750, 80670, 85598, 90530, 95470, 100418, 105372, 110336,
192 115308, 120288, 125278, 130276, 135286, 140304, 145334, 150374,
193 155426, 160490, 165566, 170654, 175756, 180870, 185998, 191138,
194 196294, 201466, 206650, 211850, 217068, 222300, 227548, 232814,
195 238096, 243396, 248714, 254050, 259406, 264778, 270172, 275584,
196 281018, 286470, 291944, 297440, 302956, 308496, 314056, 319640,
197 325248, 330878, 336532, 342212, 347916, 353644, 359398, 365178,
198 370986, 376820, 382680, 388568, 394486, 400430, 406404, 412408,
199 418442, 424506, 430600, 436726, 442884, 449074, 455298, 461554,
200 467844, 474168, 480528, 486922, 493354, 499820, 506324, 512866,
201 519446, 526064, 532722, 539420, 546160, 552940, 559760, 566624,
202 573532, 580482, 587478, 594520, 601606, 608740, 615920, 623148,
203 630426, 637754, 645132, 652560, 660042, 667576, 675164, 682808,
204 690506, 698262, 706074, 713946, 721876, 729868, 737920, 746036,
205 754216, 762460, 770770, 779148, 787594, 796108, 804694, 813354,
206 822086, 830892, 839774, 848736, 857776, 866896, 876100, 885386,
207 894758, 904218, 913766, 923406, 933138, 942964, 952886, 962908,
208 973030, 983254, 993582, 1004020, 1014566, 1025224, 1035996, 1046886,
209 1057894, 1069026, 1080284, 1091670, 1103186, 1114838, 1126628, 1138558,
210 1150634, 1162858, 1175236, 1187768, 1200462, 1213320, 1226346, 1239548,
211 1252928, 1266490, 1280242, 1294188, 1308334, 1322688, 1337252, 1352034,
212 1367044, 1382284, 1397766, 1413494, 1429478, 1445728, 1462252, 1479058,
213 1496158, 1513562, 1531280, 1549326, 1567710, 1586446, 1605550, 1625034,
214 1644914, 1665208, 1685932, 1707108, 1728754, 1750890, 1773542, 1796732,
215 1820488, 1844840, 1869816, 1895452, 1921780, 1948842, 1976680, 2005338,
216 2034868, 2065322, 2096766, 2129260, 2162880, 2197708, 2233832, 2271352,
217 2310384, 2351050, 2393498, 2437886, 2484404, 2533262, 2584710, 2639036,
218 2696578, 2757738, 2822998, 2892940, 2968278, 3049896, 3138912, 3236760,
219 3345312, 3467068, 3605434, 3765154, 3952904, 4177962, 4452178, 4787134,
220 5187290, 5647128, 6159120, 6720518, 7332904, 8000032, 8726664, 9518152,
224 2436, 2436, 2436, 2436, 2438, 2438, 2438, 2440,
225 2442, 2442, 2444, 2446, 2448, 2450, 2454, 2456,
226 2458, 2462, 2464, 2468, 2472, 2476, 2480, 2484,
227 2488, 2492, 2498, 2502, 2506, 2512, 2518, 2524,
228 2528, 2534, 2540, 2548, 2554, 2560, 2568, 2574,
229 2582, 2588, 2596, 2604, 2612, 2620, 2628, 2636,
230 2646, 2654, 2664, 2672, 2682, 2692, 2702, 2712,
231 2722, 2732, 2742, 2752, 2764, 2774, 2786, 2798,
232 2810, 2822, 2834, 2846, 2858, 2870, 2884, 2896,
233 2910, 2924, 2938, 2952, 2966, 2980, 2994, 3010,
234 3024, 3040, 3056, 3070, 3086, 3104, 3120, 3136,
235 3154, 3170, 3188, 3206, 3224, 3242, 3262, 3280,
236 3300, 3320, 3338, 3360, 3380, 3400, 3422, 3442,
237 3464, 3486, 3508, 3532, 3554, 3578, 3602, 3626,
238 3652, 3676, 3702, 3728, 3754, 3780, 3808, 3836,
239 3864, 3892, 3920, 3950, 3980, 4010, 4042, 4074,
240 4106, 4138, 4172, 4206, 4240, 4276, 4312, 4348,
241 4384, 4422, 4460, 4500, 4540, 4580, 4622, 4664,
242 4708, 4752, 4796, 4842, 4890, 4938, 4986, 5036,
243 5086, 5138, 5192, 5246, 5300, 5358, 5416, 5474,
244 5534, 5596, 5660, 5726, 5792, 5860, 5930, 6002,
245 6074, 6150, 6226, 6306, 6388, 6470, 6556, 6644,
246 6736, 6828, 6924, 7022, 7124, 7228, 7336, 7448,
247 7562, 7680, 7802, 7928, 8058, 8192, 8332, 8476,
248 8624, 8780, 8940, 9106, 9278, 9458, 9644, 9840,
249 10042, 10252, 10472, 10702, 10942, 11194, 11458, 11734,
250 12024, 12328, 12648, 12986, 13342, 13720, 14118, 14540,
251 14990, 15466, 15976, 16520, 17102, 17726, 18398, 19124,
252 19908, 20760, 21688, 22702, 23816, 25044, 26404, 27922,
253 29622, 31540, 33720, 36222, 39116, 42502, 46514, 51334,
254 57218, 64536, 73830, 85890, 101860, 123198, 151020, 183936,
255 216220, 243618, 268374, 293022, 319362, 347768, 378864, 412626, 449596,
258 0, 0, 0, 1, 0, 0, 1, 1,
259 0, 1, 1, 1, 1, 1, 1, 1,
260 1, 1, 1, 1, 1, 1, 1, 1,
261 1, 2, 1, 1, 2, 2, 2, 1,
262 2, 2, 2, 2, 2, 2, 2, 2,
263 2, 2, 2, 2, 2, 2, 2, 3,
264 2, 3, 2, 3, 3, 3, 3, 3,
265 3, 3, 3, 3, 3, 3, 3, 3,
266 3, 3, 3, 3, 3, 4, 3, 4,
267 4, 4, 4, 4, 4, 4, 4, 4,
268 4, 4, 4, 4, 5, 4, 4, 5,
269 4, 5, 5, 5, 5, 5, 5, 5,
270 5, 5, 6, 5, 5, 6, 5, 6,
271 6, 6, 6, 6, 6, 6, 6, 7,
272 6, 7, 7, 7, 7, 7, 7, 7,
273 7, 7, 8, 8, 8, 8, 8, 8,
274 8, 9, 9, 9, 9, 9, 9, 9,
275 10, 10, 10, 10, 10, 11, 11, 11,
276 11, 11, 12, 12, 12, 12, 13, 13,
277 13, 14, 14, 14, 15, 15, 15, 15,
278 16, 16, 17, 17, 17, 18, 18, 18,
279 19, 19, 20, 21, 21, 22, 22, 23,
280 23, 24, 25, 26, 26, 27, 28, 29,
281 30, 31, 32, 33, 34, 35, 36, 37,
282 39, 40, 42, 43, 45, 47, 49, 51,
283 53, 55, 58, 60, 63, 66, 69, 73,
284 76, 80, 85, 89, 95, 100, 106, 113,
285 119, 128, 136, 146, 156, 168, 182, 196,
286 213, 232, 254, 279, 307, 340, 380, 425,
287 480, 545, 626, 724, 847, 1003, 1205, 1471,
288 1830, 2324, 3015, 3993, 5335, 6956, 8229, 8071,
289 6850, 6189, 6162, 6585, 7102, 7774, 8441, 9243,
292 0, -22, -21, -21, -20, -20, -19, -19,
293 -18, -18, -17, -17, -16, -16, -15, -14,
294 -14, -13, -13, -12, -12, -11, -11, -10,
295 -10, -9, -9, -8, -7, -7, -6, -6,
296 -5, -5, -4, -4, -3, -3, -2, -1,
297 -1, 0, 0, 1, 1, 2, 2, 3,
298 4, 4, 5, 5, 6, 6, 7, 8,
299 8, 9, 9, 10, 11, 11, 12, 12,
300 13, 14, 14, 15, 15, 16, 17, 17,
301 18, 19, 19, 20, 20, 21, 22, 22,
302 23, 24, 24, 25, 26, 26, 27, 28,
303 28, 29, 30, 30, 31, 32, 33, 33,
304 34, 35, 35, 36, 37, 38, 38, 39,
305 40, 41, 41, 42, 43, 44, 44, 45,
306 46, 47, 48, 48, 49, 50, 51, 52,
307 52, 53, 54, 55, 56, 57, 58, 58,
308 59, 60, 61, 62, 63, 64, 65, 66,
309 67, 68, 69, 69, 70, 71, 72, 73,
310 74, 75, 77, 78, 79, 80, 81, 82,
311 83, 84, 85, 86, 87, 89, 90, 91,
312 92, 93, 94, 96, 97, 98, 99, 101,
313 102, 103, 105, 106, 107, 109, 110, 112,
314 113, 115, 116, 118, 119, 121, 122, 124,
315 125, 127, 129, 130, 132, 134, 136, 137,
316 139, 141, 143, 145, 147, 149, 151, 153,
317 155, 158, 160, 162, 164, 167, 169, 172,
318 174, 177, 180, 182, 185, 188, 191, 194,
319 197, 201, 204, 208, 211, 215, 219, 223,
320 227, 232, 236, 241, 246, 251, 257, 263,
321 269, 275, 283, 290, 298, 307, 317, 327,
322 339, 352, 367, 384, 404, 429, 458, 494,
323 522, 522, 522, 522, 522, 522, 522, 522, 522,
328 -21236, 21236, 63830, 106798, 150386, 194832, 240376, 287258,
329 335726, 386034, 438460, 493308, 550924, 611696, 676082, 744626,
330 817986, 896968, 982580, 1076118, 1179278, 1294344, 1424504, 1574386,
331 1751090, 1966260, 2240868, 2617662, 3196432, 4176450, 5658260, 7671068,
335 21236, 21236, 21360, 21608, 21978, 22468, 23076, 23806,
336 24660, 25648, 26778, 28070, 29544, 31228, 33158, 35386,
337 37974, 41008, 44606, 48934, 54226, 60840, 69320, 80564,
338 96140, 119032, 155576, 221218, 357552, 622468, 859344, 1153464, 1555840,
341 0, 31, 62, 93, 123, 152, 183, 214,
342 247, 283, 323, 369, 421, 483, 557, 647,
343 759, 900, 1082, 1323, 1654, 2120, 2811, 3894,
344 5723, 9136, 16411, 34084, 66229, 59219, 73530, 100594,
347 0, -21, -16, -12, -7, -2, 3, 8,
348 13, 19, 24, 30, 36, 43, 50, 57,
349 65, 74, 83, 93, 104, 117, 131, 147,
350 166, 189, 219, 259, 322, 427, 521, 521, 521,
355 -95044, 95044, 295844, 528780, 821332, 1226438, 1890540, 3344850, 6450664,
358 95044, 95044, 105754, 127180, 165372, 39736, 424366, 1029946, 2075866,
361 0, 2678, 5357, 9548, -31409, 96158, 151395, 261480,
364 0, -17, 5, 30, 62, 105, 177, 334, 518,
369 -45754, 45754, 138496, 234896, 337336, 448310, 570738, 708380,
370 866534, 1053262, 1281958, 1577438, 1993050, 2665984, 3900982, 5902844,
374 45754, 45754, 46988, 49412, 53026, 57950, 64478, 73164,
375 84988, 101740, 126958, 168522, 247092, 425842, 809154, 1192708, 1801910,
378 0, 309, 606, 904, 1231, 1632, 2172, 2956,
379 4188, 6305, 10391, 19643, 44688, 95828, 95889, 152301,
382 0, -18, -8, 2, 13, 25, 38, 53,
383 70, 90, 115, 147, 192, 264, 398, 521, 521,
386 typedef const struct {
452 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383,
453 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834,
454 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371,
455 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008,
460 #define RSHIFT_SIZE(size) \
462 static int##size##_t rshift##size(int##size##_t value, int shift) \
464 int##size##_t rounding = (int##size##_t)1 << (shift - 1); \
465 int##size##_t mask = ((int##size##_t)1 << (shift + 1)) - 1; \
466 return ((value + rounding) >> shift) - ((value & mask) == rounding); \
469 static int##size##_t rshift##size##_clip24(int##size##_t value, int shift) \
471 return av_clip_intp2(rshift##size(value, shift), 23); \
481 ((
channel->quantize[1].quantized_sample & 2) << 1) +
482 ((
channel->quantize[2].quantized_sample & 1) << 3);
483 channel->codeword_history = (cw << 8) + ((
unsigned)
channel->codeword_history << 4);
494 m = (int64_t)5184443 * (
channel->codeword_history >> 7);
495 d = (m * 4) + (m >> 22);
496 for (subband = 0; subband <
NB_SUBBANDS; subband++)
497 channel->dither[subband] = (
unsigned)d << (23 - 5*subband);
498 channel->dither_parity = (d >> 25) & 1;
507 730, -413, -9611, 43626, -121026, 269973, -585547, 2801966,
508 697128, -160481, 27611, 8478, -10043, 3511, 688, -897,
511 -897, 688, 3511, -10043, 8478, 27611, -160481, 697128,
512 2801966, -585547, 269973, -121026, 43626, -9611, -413, 730,
522 1033, -584, -13592, 61697, -171156, 381799, -828088, 3962579,
523 985888, -226954, 39048, 11990, -14203, 4966, 973, -1268,
526 -1268, 973, 4966, -14203, 11990, 39048, -226954, 985888,
527 3962579, -828088, 381799, -171156, 61697, -13592, -584, 1033,
558 return rshift64_clip24(e,
shift);
597 int32_t intermediate_samples[4];
601 for (
i = 0;
i < 2;
i++)
605 &intermediate_samples[0+
i],
606 &intermediate_samples[2+
i]);
609 for (
i = 0;
i < 2;
i++)
612 &intermediate_samples[2*
i],
613 &subband_samples[2*
i+0],
614 &subband_samples[2*
i+1]);
633 subbands[0] = low_subband_input + high_subband_input;
634 subbands[1] = low_subband_input - high_subband_input;
651 int32_t intermediate_samples[4];
655 for (
i = 0;
i < 2;
i++)
658 subband_samples[2*
i+0],
659 subband_samples[2*
i+1],
660 &intermediate_samples[2*
i]);
663 for (
i = 0;
i < 2;
i++)
666 intermediate_samples[0+
i],
667 intermediate_samples[2+
i],
679 for (
i = nb_intervals >> 1;
i > 0;
i >>= 1)
693 int32_t quantized_sample, dithered_sample, parity_change;
694 int32_t d, mean, interval, inv, sample_difference_abs;
697 sample_difference_abs =
FFABS(sample_difference);
698 sample_difference_abs =
FFMIN(sample_difference_abs, (1 << 23) - 1);
707 intervals += quantized_sample;
708 mean = (intervals[1] + intervals[0]) / 2;
709 interval = (intervals[1] - intervals[0]) * (-(sample_difference < 0) | 1);
711 dithered_sample = rshift64_clip24(
MUL64(
dither, interval) + ((int64_t)av_clip_intp2(mean + d, 23) << 32), 32);
712 error = ((int64_t)sample_difference_abs << 20) -
MUL64(dithered_sample, quantization_factor);
715 parity_change = quantized_sample;
721 inv = -(sample_difference < 0);
722 quantize->quantized_sample = quantized_sample ^ inv;
723 quantize->quantized_sample_parity_change = parity_change ^ inv;
732 for (subband = 0; subband <
NB_SUBBANDS; subband++) {
733 int32_t diff = av_clip_intp2(subband_samples[subband] -
channel->prediction[subband].predicted_sample, 23);
736 channel->invert_quantize[subband].quantization_factor,
745 for (subband = 0; subband <
NB_SUBBANDS; subband++)
746 subband_samples[subband] =
channel->prediction[subband].previous_reconstructed_sample;
757 idx = (quantized_sample ^ -(quantized_sample < 0)) + 1;
759 if (quantized_sample < 0)
777 int32_t reconstructed_difference,
781 int p = prediction->
pos;
784 prediction->
pos = p = (p + 1) % order;
785 rd2[p] = reconstructed_difference;
790 int32_t reconstructed_difference,
793 int32_t reconstructed_sample, predictor, srd0;
794 int32_t *reconstructed_differences;
795 int64_t predicted_difference = 0;
798 reconstructed_sample = av_clip_intp2(reconstructed_difference + prediction->
predicted_sample, 23);
800 +
MUL64(prediction->
s_weight[1], reconstructed_sample)) >> 22, 23);
804 srd0 =
FFDIFFSIGN(reconstructed_difference, 0) * (1 << 23);
805 for (
i = 0;
i < order;
i++) {
808 predicted_difference +=
MUL64(reconstructed_differences[-
i], prediction->
d_weight[
i]);
826 same_sign[0] = sign * prediction->
prev_sign[0];
827 same_sign[1] = sign * prediction->
prev_sign[1];
832 sw1 = rshift32(-same_sign[1] * prediction->
s_weight[1], 1);
833 sw1 = (av_clip(sw1, -range, range) & ~0xF) * 16;
836 weight[0] = 254 * prediction->
s_weight[0] + 0x800000*same_sign[0] + sw1;
837 prediction->
s_weight[0] = av_clip(rshift32(
weight[0], 8), -range, range);
839 range = 0x3C0000 - prediction->
s_weight[0];
840 weight[1] = 255 * prediction->
s_weight[1] + 0xC00000*same_sign[1];
841 prediction->
s_weight[1] = av_clip(rshift32(
weight[1], 8), -range, range);
851 for (subband = 0; subband <
NB_SUBBANDS; subband++)
854 channel->quantize[subband].quantized_sample,
864 for (subband = 0; subband <
NB_SUBBANDS; subband++)
877 int eighth = *idx == 7;
878 *idx = (*idx + 1) & 7;
888 static const int map[] = { 1, 2, 0, 3 };
892 if (
c->quantize[
map[
i]].error <
min->error)
897 min->quantized_sample =
min->quantized_sample_parity_change;
904 return (((
channel->quantize[3].quantized_sample & 0x06) |
parity) << 13)
905 | (((
channel->quantize[2].quantized_sample & 0x03) ) << 11)
906 | (((
channel->quantize[1].quantized_sample & 0x0F) ) << 7)
907 | (((
channel->quantize[0].quantized_sample & 0x7F) ) << 0);
913 return (((
channel->quantize[3].quantized_sample & 0x01E) |
parity) << 19)
914 | (((
channel->quantize[2].quantized_sample & 0x00F) ) << 15)
915 | (((
channel->quantize[1].quantized_sample & 0x03F) ) << 9)
916 | (((
channel->quantize[0].quantized_sample & 0x1FF) ) << 0);
925 channel->quantize[3].quantized_sample = (
channel->quantize[3].quantized_sample & ~1)
935 channel->quantize[3].quantized_sample = (
channel->quantize[3].quantized_sample & ~1)
996 s->block_size =
s->hd ? 6 : 4;
1003 "Frame size must be a multiple of %d samples\n",
s->block_size);
1009 for (subband = 0; subband <
NB_SUBBANDS; subband++) {
1021 int *got_frame_ptr,
AVPacket *avpkt)
1027 if (avpkt->
size <
s->block_size) {
1035 frame->nb_samples = 4 * avpkt->
size /
s->block_size;
1039 for (pos = 0, opos = 0; opos <
frame->nb_samples; pos +=
s->block_size, opos += 4) {
1054 return s->block_size *
frame->nb_samples / 4;
1066 output_size =
s->block_size *
frame->nb_samples/4;
1070 for (pos = 0, ipos = 0; pos < output_size; pos +=
s->block_size, ipos += 4) {
1081 *got_packet_ptr = 1;
1093 #if CONFIG_APTX_DECODER
1111 #if CONFIG_APTX_HD_DECODER
1129 #if CONFIG_APTX_ENCODER
1144 .supported_samplerates = (
const int[]) {8000, 16000, 24000, 32000, 44100, 48000, 0},
1148 #if CONFIG_APTX_HD_ENCODER
1163 .supported_samplerates = (
const int[]) {8000, 16000, 24000, 32000, 44100, 48000, 0},