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); \ 480 int32_t cw = ((channel->quantize[0].quantized_sample & 3) << 0) +
481 ((channel->quantize[1].quantized_sample & 2) << 1) +
482 ((channel->quantize[2].quantized_sample & 1) << 3);
483 channel->codeword_history = (cw << 8) + (channel->codeword_history << 4);
495 d = (m << 2) + (m >> 22);
496 for (subband = 0; subband <
NB_SUBBANDS; subband++)
497 channel->
dither[subband] = d << (23 - 5*subband);
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);
583 *low_subband_output = av_clip_intp2(subbands[0] + subbands[1], 23);
584 *high_subband_output = av_clip_intp2(subbands[0] - subbands[1], 23);
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)
680 if (
MUL64(factor, intervals[idx + i]) <= ((int64_t)value << 24))
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);
704 d = rshift32_clip24(
MULH(dither, dither), 7) - (1 << 23);
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);
732 for (subband = 0; subband <
NB_SUBBANDS; subband++) {
737 &tables[hd][subband]);
745 for (subband = 0; subband <
NB_SUBBANDS; subband++)
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,
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) << 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) << 4;
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++)
856 &tables[hd][subband]);
864 for (subband = 0; subband <
NB_SUBBANDS; subband++)
877 int eighth = *idx == 7;
878 *idx = (*idx + 1) & 7;
880 return parity ^ eighth;
888 static const int map[] = { 1, 2, 0, 3 };
944 for (channel = 0; channel <
NB_CHANNELS; channel++)
949 for (channel = 0; channel <
NB_CHANNELS; channel++) {
966 for (channel = 0; channel <
NB_CHANNELS; channel++) {
980 for (channel = 0; channel <
NB_CHANNELS; channel++)
1000 "Frame size must be a multiple of %d samples\n", s->
block_size);
1006 for (subband = 0; subband <
NB_SUBBANDS; subband++) {
1018 int *got_frame_ptr,
AVPacket *avpkt)
1044 for (channel = 0; channel <
NB_CHANNELS; channel++)
1045 for (sample = 0; sample < 4; sample++)
1047 samples[channel][sample] << 8);
1067 for (pos = 0, ipos = 0; pos < output_size; pos += s->
block_size, ipos += 4) {
1070 for (channel = 0; channel <
NB_CHANNELS; channel++)
1071 for (sample = 0; sample < 4; sample++)
1072 samples[channel][sample] = (
int32_t)
AV_RN32A(&frame->
data[channel][4*(ipos+sample)]) >> 8;
1078 *got_packet_ptr = 1;
1090 #if CONFIG_APTX_DECODER 1108 #if CONFIG_APTX_HD_DECODER 1126 #if CONFIG_APTX_ENCODER 1141 .supported_samplerates = (
const int[]) {8000, 16000, 24000, 32000, 44100, 48000, 0},
1145 #if CONFIG_APTX_HD_ENCODER 1160 .supported_samplerates = (
const int[]) {8000, 16000, 24000, 32000, 44100, 48000, 0},
Prediction prediction[NB_SUBBANDS]
static const int16_t hd_quantize_factor_select_offset_MLF[33]
void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts, int64_t *duration)
Remove frame(s) from the queue.
static const int32_t quantize_dither_factors_MHF[3]
const struct AVCodec * codec
static void aptx_insert_sync(Channel channels[NB_CHANNELS], int32_t *idx)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int shift(int a, int b)
This structure describes decoded (raw) audio or video data.
int32_t reconstructed_difference
static av_cold int init(AVCodecContext *avctx)
static av_always_inline int32_t aptx_bin_search(int32_t value, int32_t factor, const int32_t *intervals, int32_t nb_intervals)
static int aptx_check_parity(Channel channels[NB_CHANNELS], int32_t *idx)
static const int16_t quantize_factor_select_offset_LF[65]
static const int32_t aptx_qmf_inner_coeffs[NB_FILTERS][FILTER_TAPS]
static const int16_t quantize_factor_select_offset_HF[5]
#define AV_CH_LAYOUT_STEREO
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static const int32_t quantize_dither_factors_HF[5]
const int32_t * quantize_dither_factors
static const int32_t hd_quantize_dither_factors_MHF[8]
static av_always_inline void aptx_qmf_polyphase_synthesis(FilterSignal signal[NB_FILTERS], const int32_t coeffs[NB_FILTERS][FILTER_TAPS], int shift, int32_t low_subband_input, int32_t high_subband_input, int32_t samples[NB_FILTERS])
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
static void aptx_invert_quantization(InvertQuantize *invert_quantize, int32_t quantized_sample, int32_t dither, ConstTables *tables)
static const int16_t hd_quantize_factor_select_offset_MHF[9]
static const int32_t hd_invert_quantize_dither_factors_MLF[33]
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
const int16_t * quantize_factor_select_offset
av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
Initialize AudioFrameQueue.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
static const int32_t invert_quantize_dither_factors_LF[65]
Quantize quantize[NB_SUBBANDS]
static uint16_t aptx_pack_codeword(Channel *channel)
static const int32_t hd_invert_quantize_dither_factors_MHF[9]
static const int16_t hd_quantize_factor_select_offset_LF[257]
static const int32_t quantize_dither_factors_MLF[9]
static const int32_t quantize_intervals_HF[5]
static const int32_t aptx_qmf_outer_coeffs[NB_FILTERS][FILTER_TAPS]
static const int32_t hd_quantize_intervals_MHF[9]
static const int16_t quantize_factor_select_offset_MLF[9]
static void aptx_unpack_codeword(Channel *channel, uint16_t codeword)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static const int32_t hd_quantize_intervals_HF[17]
AVCodec ff_aptx_hd_decoder
static void aptx_process_subband(InvertQuantize *invert_quantize, Prediction *prediction, int32_t quantized_sample, int32_t dither, ConstTables *tables)
FilterSignal inner_filter_signal[NB_FILTERS][NB_FILTERS]
static const int32_t hd_quantize_dither_factors_MLF[32]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static const int32_t hd_invert_quantize_dither_factors_LF[257]
static const uint8_t dither[8][8]
InvertQuantize invert_quantize[NB_SUBBANDS]
const char * name
Name of the codec implementation.
static av_always_inline void aptx_qmf_filter_signal_push(FilterSignal *signal, int32_t sample)
int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
Add a frame to the queue.
int32_t reconstructed_differences[48]
#define FFDIFFSIGN(x, y)
Comparator.
#define RSHIFT_SIZE(size)
static const int32_t quantize_dither_factors_LF[65]
int channels
number of audio channels, only used for audio.
uint8_t * data
current frame data
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
static void aptx_encode_channel(Channel *channel, int32_t samples[4], int hd)
static void aptx_encode_samples(AptXContext *ctx, int32_t samples[NB_CHANNELS][4], uint8_t *output)
static int aptx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
int32_t quantized_sample_parity_change
int32_t quantization_factor
static av_cold int aptx_init(AVCodecContext *avctx)
static void aptx_generate_dither(Channel *channel)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
int32_t previous_reconstructed_sample
static int aptx_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static void aptx_quantize_difference(Quantize *quantize, int32_t sample_difference, int32_t dither, int32_t quantization_factor, ConstTables *tables)
#define FF_ARRAY_ELEMS(a)
AVCodec ff_aptx_hd_encoder
Channel channels[NB_CHANNELS]
int samples
samples left to decode in current frame
static av_always_inline void aptx_qmf_polyphase_analysis(FilterSignal signal[NB_FILTERS], const int32_t coeffs[NB_FILTERS][FILTER_TAPS], int shift, int32_t samples[NB_FILTERS], int32_t *low_subband_output, int32_t *high_subband_output)
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
static const int32_t hd_quantize_dither_factors_LF[256]
int frame_size
Number of samples per channel in an audio frame.
static int32_t aptx_quantized_parity(Channel *channel)
static int32_t * aptx_reconstructed_differences_update(Prediction *prediction, int32_t reconstructed_difference, int order)
Libavcodec external API header.
AVSampleFormat
Audio sample formats.
static void aptxhd_unpack_codeword(Channel *channel, uint32_t codeword)
const int32_t * invert_quantize_dither_factors
main external API structure.
static const int32_t quantize_intervals_MLF[9]
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static const int32_t hd_quantize_intervals_LF[257]
static int aptx_decode_samples(AptXContext *ctx, const uint8_t *input, int32_t samples[NB_CHANNELS][4])
static const uint16_t channel_layouts[7]
static void aptx_invert_quantize_and_prediction(Channel *channel, int hd)
static const int32_t hd_invert_quantize_dither_factors_HF[17]
static const int32_t invert_quantize_dither_factors_MHF[3]
static const int16_t hd_quantize_factor_select_offset_HF[17]
static const int factor[16]
const VDPAUPixFmtMap * map
static av_cold int aptx_close(AVCodecContext *avctx)
static int weight(int i, int blen, int offset)
static const int32_t invert_quantize_dither_factors_HF[5]
static av_const int sign_extend(int val, unsigned bits)
static const int32_t quantize_intervals_MHF[3]
static const int16_t quantization_factors[32]
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
FilterSignal outer_filter_signal[NB_FILTERS]
common internal api header.
int32_t dither[NB_SUBBANDS]
channel
Use these values when setting the channel map with ebur128_set_channel().
static const int16_t quantize_factor_select_offset_MHF[3]
const int32_t * quantize_intervals
static int quantize(CinepakEncContext *s, int h, uint8_t *data[4], int linesize[4], int v1mode, strip_info *info, mb_encoding encoding)
APEPredictor predictor
predictor used for final reconstruction
static av_always_inline int diff(const uint32_t a, const uint32_t b)
static const int16_t coeffs[]
static const int32_t hd_quantize_intervals_MLF[33]
void ff_af_queue_close(AudioFrameQueue *afq)
Close AudioFrameQueue.
static ConstTables tables[2][NB_SUBBANDS]
static av_always_inline int32_t aptx_qmf_convolution(FilterSignal *signal, const int32_t coeffs[FILTER_TAPS], int shift)
static const int32_t invert_quantize_dither_factors_MLF[9]
static void aptx_prediction_filtering(Prediction *prediction, int32_t reconstructed_difference, int order)
static av_always_inline void aptx_update_codeword_history(Channel *channel)
static void aptx_qmf_tree_synthesis(QMFAnalysis *qmf, int32_t subband_samples[4], int32_t samples[4])
int32_t predicted_difference
This structure stores compressed data.
static uint32_t aptxhd_pack_codeword(Channel *channel)
int nb_samples
number of audio samples (per channel) described by this frame
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int32_t buffer[2 *FILTER_TAPS]
static void aptx_qmf_tree_analysis(QMFAnalysis *qmf, int32_t samples[4], int32_t subband_samples[4])
static const int32_t hd_quantize_dither_factors_HF[16]
static const int32_t quantize_intervals_LF[65]
static void aptx_decode_channel(Channel *channel, int32_t samples[4])