27 -9948, 9948, 29860, 49808, 69822, 89926, 110144, 130502,
28 151026, 171738, 192666, 213832, 235264, 256982, 279014, 301384,
29 324118, 347244, 370790, 394782, 419250, 444226, 469742, 495832,
30 522536, 549890, 577936, 606720, 636290, 666700, 698006, 730270,
31 763562, 797958, 833538, 870398, 908640, 948376, 989740, 1032874,
32 1077948, 1125150, 1174700, 1226850, 1281900, 1340196, 1402156, 1468282,
33 1539182, 1615610, 1698514, 1789098, 1888944, 2000168, 2125700, 2269750,
34 2438670, 2642660, 2899462, 3243240, 3746078, 4535138, 5664098, 7102424,
38 9948, 9948, 9962, 9988, 10026, 10078, 10142, 10218,
39 10306, 10408, 10520, 10646, 10784, 10934, 11098, 11274,
40 11462, 11664, 11880, 12112, 12358, 12618, 12898, 13194,
41 13510, 13844, 14202, 14582, 14988, 15422, 15884, 16380,
42 16912, 17484, 18098, 18762, 19480, 20258, 21106, 22030,
43 23044, 24158, 25390, 26760, 28290, 30008, 31954, 34172,
44 36728, 39700, 43202, 47382, 52462, 58762, 66770, 77280,
45 91642, 112348, 144452, 199326, 303512, 485546, 643414, 794914,
49 0, 4, 7, 10, 13, 16, 19, 22,
50 26, 28, 32, 35, 38, 41, 44, 47,
51 51, 54, 58, 62, 65, 70, 74, 79,
52 84, 90, 95, 102, 109, 116, 124, 133,
53 143, 154, 166, 180, 195, 212, 231, 254,
54 279, 308, 343, 383, 430, 487, 555, 639,
55 743, 876, 1045, 1270, 1575, 2002, 2628, 3591,
56 5177, 8026, 13719, 26047, 45509, 39467, 37875, 51303,
60 0, -21, -19, -17, -15, -12, -10, -8,
61 -6, -4, -1, 1, 3, 6, 8, 10,
62 13, 15, 18, 20, 23, 26, 29, 31,
63 34, 37, 40, 43, 47, 50, 53, 57,
64 60, 64, 68, 72, 76, 80, 85, 89,
65 94, 99, 105, 110, 116, 123, 129, 136,
66 144, 152, 161, 171, 182, 194, 207, 223,
67 241, 263, 291, 328, 382, 467, 522, 522,
73 -89806, 89806, 278502, 494338, 759442, 1113112, 1652322, 2720256, 5190186,
76 89806, 89806, 98890, 116946, 148158, 205512, 333698, 734236, 1735696,
79 0, 2271, 4514, 7803, 14339, 32047, 100135, 250365, 0,
82 0, -14, 6, 29, 58, 96, 154, 270, 521,
87 -194080, 194080, 890562,
90 194080, 194080, 502402,
101 -163006, 163006, 542708, 1120554, 2669238,
104 163006, 163006, 216698, 361148, 1187538,
107 0, 13423, 36113, 206598, 0,
115 -2436, 2436, 7308, 12180, 17054, 21930, 26806, 31686,
116 36566, 41450, 46338, 51230, 56124, 61024, 65928, 70836,
117 75750, 80670, 85598, 90530, 95470, 100418, 105372, 110336,
118 115308, 120288, 125278, 130276, 135286, 140304, 145334, 150374,
119 155426, 160490, 165566, 170654, 175756, 180870, 185998, 191138,
120 196294, 201466, 206650, 211850, 217068, 222300, 227548, 232814,
121 238096, 243396, 248714, 254050, 259406, 264778, 270172, 275584,
122 281018, 286470, 291944, 297440, 302956, 308496, 314056, 319640,
123 325248, 330878, 336532, 342212, 347916, 353644, 359398, 365178,
124 370986, 376820, 382680, 388568, 394486, 400430, 406404, 412408,
125 418442, 424506, 430600, 436726, 442884, 449074, 455298, 461554,
126 467844, 474168, 480528, 486922, 493354, 499820, 506324, 512866,
127 519446, 526064, 532722, 539420, 546160, 552940, 559760, 566624,
128 573532, 580482, 587478, 594520, 601606, 608740, 615920, 623148,
129 630426, 637754, 645132, 652560, 660042, 667576, 675164, 682808,
130 690506, 698262, 706074, 713946, 721876, 729868, 737920, 746036,
131 754216, 762460, 770770, 779148, 787594, 796108, 804694, 813354,
132 822086, 830892, 839774, 848736, 857776, 866896, 876100, 885386,
133 894758, 904218, 913766, 923406, 933138, 942964, 952886, 962908,
134 973030, 983254, 993582, 1004020, 1014566, 1025224, 1035996, 1046886,
135 1057894, 1069026, 1080284, 1091670, 1103186, 1114838, 1126628, 1138558,
136 1150634, 1162858, 1175236, 1187768, 1200462, 1213320, 1226346, 1239548,
137 1252928, 1266490, 1280242, 1294188, 1308334, 1322688, 1337252, 1352034,
138 1367044, 1382284, 1397766, 1413494, 1429478, 1445728, 1462252, 1479058,
139 1496158, 1513562, 1531280, 1549326, 1567710, 1586446, 1605550, 1625034,
140 1644914, 1665208, 1685932, 1707108, 1728754, 1750890, 1773542, 1796732,
141 1820488, 1844840, 1869816, 1895452, 1921780, 1948842, 1976680, 2005338,
142 2034868, 2065322, 2096766, 2129260, 2162880, 2197708, 2233832, 2271352,
143 2310384, 2351050, 2393498, 2437886, 2484404, 2533262, 2584710, 2639036,
144 2696578, 2757738, 2822998, 2892940, 2968278, 3049896, 3138912, 3236760,
145 3345312, 3467068, 3605434, 3765154, 3952904, 4177962, 4452178, 4787134,
146 5187290, 5647128, 6159120, 6720518, 7332904, 8000032, 8726664, 9518152,
150 2436, 2436, 2436, 2436, 2438, 2438, 2438, 2440,
151 2442, 2442, 2444, 2446, 2448, 2450, 2454, 2456,
152 2458, 2462, 2464, 2468, 2472, 2476, 2480, 2484,
153 2488, 2492, 2498, 2502, 2506, 2512, 2518, 2524,
154 2528, 2534, 2540, 2548, 2554, 2560, 2568, 2574,
155 2582, 2588, 2596, 2604, 2612, 2620, 2628, 2636,
156 2646, 2654, 2664, 2672, 2682, 2692, 2702, 2712,
157 2722, 2732, 2742, 2752, 2764, 2774, 2786, 2798,
158 2810, 2822, 2834, 2846, 2858, 2870, 2884, 2896,
159 2910, 2924, 2938, 2952, 2966, 2980, 2994, 3010,
160 3024, 3040, 3056, 3070, 3086, 3104, 3120, 3136,
161 3154, 3170, 3188, 3206, 3224, 3242, 3262, 3280,
162 3300, 3320, 3338, 3360, 3380, 3400, 3422, 3442,
163 3464, 3486, 3508, 3532, 3554, 3578, 3602, 3626,
164 3652, 3676, 3702, 3728, 3754, 3780, 3808, 3836,
165 3864, 3892, 3920, 3950, 3980, 4010, 4042, 4074,
166 4106, 4138, 4172, 4206, 4240, 4276, 4312, 4348,
167 4384, 4422, 4460, 4500, 4540, 4580, 4622, 4664,
168 4708, 4752, 4796, 4842, 4890, 4938, 4986, 5036,
169 5086, 5138, 5192, 5246, 5300, 5358, 5416, 5474,
170 5534, 5596, 5660, 5726, 5792, 5860, 5930, 6002,
171 6074, 6150, 6226, 6306, 6388, 6470, 6556, 6644,
172 6736, 6828, 6924, 7022, 7124, 7228, 7336, 7448,
173 7562, 7680, 7802, 7928, 8058, 8192, 8332, 8476,
174 8624, 8780, 8940, 9106, 9278, 9458, 9644, 9840,
175 10042, 10252, 10472, 10702, 10942, 11194, 11458, 11734,
176 12024, 12328, 12648, 12986, 13342, 13720, 14118, 14540,
177 14990, 15466, 15976, 16520, 17102, 17726, 18398, 19124,
178 19908, 20760, 21688, 22702, 23816, 25044, 26404, 27922,
179 29622, 31540, 33720, 36222, 39116, 42502, 46514, 51334,
180 57218, 64536, 73830, 85890, 101860, 123198, 151020, 183936,
181 216220, 243618, 268374, 293022, 319362, 347768, 378864, 412626, 449596,
184 0, 0, 0, 1, 0, 0, 1, 1,
185 0, 1, 1, 1, 1, 1, 1, 1,
186 1, 1, 1, 1, 1, 1, 1, 1,
187 1, 2, 1, 1, 2, 2, 2, 1,
188 2, 2, 2, 2, 2, 2, 2, 2,
189 2, 2, 2, 2, 2, 2, 2, 3,
190 2, 3, 2, 3, 3, 3, 3, 3,
191 3, 3, 3, 3, 3, 3, 3, 3,
192 3, 3, 3, 3, 3, 4, 3, 4,
193 4, 4, 4, 4, 4, 4, 4, 4,
194 4, 4, 4, 4, 5, 4, 4, 5,
195 4, 5, 5, 5, 5, 5, 5, 5,
196 5, 5, 6, 5, 5, 6, 5, 6,
197 6, 6, 6, 6, 6, 6, 6, 7,
198 6, 7, 7, 7, 7, 7, 7, 7,
199 7, 7, 8, 8, 8, 8, 8, 8,
200 8, 9, 9, 9, 9, 9, 9, 9,
201 10, 10, 10, 10, 10, 11, 11, 11,
202 11, 11, 12, 12, 12, 12, 13, 13,
203 13, 14, 14, 14, 15, 15, 15, 15,
204 16, 16, 17, 17, 17, 18, 18, 18,
205 19, 19, 20, 21, 21, 22, 22, 23,
206 23, 24, 25, 26, 26, 27, 28, 29,
207 30, 31, 32, 33, 34, 35, 36, 37,
208 39, 40, 42, 43, 45, 47, 49, 51,
209 53, 55, 58, 60, 63, 66, 69, 73,
210 76, 80, 85, 89, 95, 100, 106, 113,
211 119, 128, 136, 146, 156, 168, 182, 196,
212 213, 232, 254, 279, 307, 340, 380, 425,
213 480, 545, 626, 724, 847, 1003, 1205, 1471,
214 1830, 2324, 3015, 3993, 5335, 6956, 8229, 8071,
215 6850, 6189, 6162, 6585, 7102, 7774, 8441, 9243,
218 0, -22, -21, -21, -20, -20, -19, -19,
219 -18, -18, -17, -17, -16, -16, -15, -14,
220 -14, -13, -13, -12, -12, -11, -11, -10,
221 -10, -9, -9, -8, -7, -7, -6, -6,
222 -5, -5, -4, -4, -3, -3, -2, -1,
223 -1, 0, 0, 1, 1, 2, 2, 3,
224 4, 4, 5, 5, 6, 6, 7, 8,
225 8, 9, 9, 10, 11, 11, 12, 12,
226 13, 14, 14, 15, 15, 16, 17, 17,
227 18, 19, 19, 20, 20, 21, 22, 22,
228 23, 24, 24, 25, 26, 26, 27, 28,
229 28, 29, 30, 30, 31, 32, 33, 33,
230 34, 35, 35, 36, 37, 38, 38, 39,
231 40, 41, 41, 42, 43, 44, 44, 45,
232 46, 47, 48, 48, 49, 50, 51, 52,
233 52, 53, 54, 55, 56, 57, 58, 58,
234 59, 60, 61, 62, 63, 64, 65, 66,
235 67, 68, 69, 69, 70, 71, 72, 73,
236 74, 75, 77, 78, 79, 80, 81, 82,
237 83, 84, 85, 86, 87, 89, 90, 91,
238 92, 93, 94, 96, 97, 98, 99, 101,
239 102, 103, 105, 106, 107, 109, 110, 112,
240 113, 115, 116, 118, 119, 121, 122, 124,
241 125, 127, 129, 130, 132, 134, 136, 137,
242 139, 141, 143, 145, 147, 149, 151, 153,
243 155, 158, 160, 162, 164, 167, 169, 172,
244 174, 177, 180, 182, 185, 188, 191, 194,
245 197, 201, 204, 208, 211, 215, 219, 223,
246 227, 232, 236, 241, 246, 251, 257, 263,
247 269, 275, 283, 290, 298, 307, 317, 327,
248 339, 352, 367, 384, 404, 429, 458, 494,
249 522, 522, 522, 522, 522, 522, 522, 522, 522,
254 -21236, 21236, 63830, 106798, 150386, 194832, 240376, 287258,
255 335726, 386034, 438460, 493308, 550924, 611696, 676082, 744626,
256 817986, 896968, 982580, 1076118, 1179278, 1294344, 1424504, 1574386,
257 1751090, 1966260, 2240868, 2617662, 3196432, 4176450, 5658260, 7671068,
261 21236, 21236, 21360, 21608, 21978, 22468, 23076, 23806,
262 24660, 25648, 26778, 28070, 29544, 31228, 33158, 35386,
263 37974, 41008, 44606, 48934, 54226, 60840, 69320, 80564,
264 96140, 119032, 155576, 221218, 357552, 622468, 859344, 1153464, 1555840,
267 0, 31, 62, 93, 123, 152, 183, 214,
268 247, 283, 323, 369, 421, 483, 557, 647,
269 759, 900, 1082, 1323, 1654, 2120, 2811, 3894,
270 5723, 9136, 16411, 34084, 66229, 59219, 73530, 100594,
273 0, -21, -16, -12, -7, -2, 3, 8,
274 13, 19, 24, 30, 36, 43, 50, 57,
275 65, 74, 83, 93, 104, 117, 131, 147,
276 166, 189, 219, 259, 322, 427, 521, 521, 521,
281 -95044, 95044, 295844, 528780, 821332, 1226438, 1890540, 3344850, 6450664,
284 95044, 95044, 105754, 127180, 165372, 39736, 424366, 1029946, 2075866,
287 0, 2678, 5357, 9548, -31409, 96158, 151395, 261480,
290 0, -17, 5, 30, 62, 105, 177, 334, 518,
295 -45754, 45754, 138496, 234896, 337336, 448310, 570738, 708380,
296 866534, 1053262, 1281958, 1577438, 1993050, 2665984, 3900982, 5902844,
300 45754, 45754, 46988, 49412, 53026, 57950, 64478, 73164,
301 84988, 101740, 126958, 168522, 247092, 425842, 809154, 1192708, 1801910,
304 0, 309, 606, 904, 1231, 1632, 2172, 2956,
305 4188, 6305, 10391, 19643, 44688, 95828, 95889, 152301,
308 0, -18, -8, 2, 13, 25, 38, 53,
309 70, 90, 115, 147, 192, 264, 398, 521, 521,
368 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383,
369 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834,
370 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371,
371 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008,
393 d = (m * 4) + (m >> 22);
394 for (subband = 0; subband <
NB_SUBBANDS; subband++)
395 channel->
dither[subband] = (
unsigned)d << (23 - 5*subband);
405 idx = (quantized_sample ^ -(quantized_sample < 0)) + 1;
407 if (quantized_sample < 0)
425 int32_t reconstructed_difference,
429 int p = prediction->
pos;
432 prediction->
pos = p = (p + 1) % order;
433 rd2[p] = reconstructed_difference;
438 int32_t reconstructed_difference,
442 int32_t *reconstructed_differences;
443 int64_t predicted_difference = 0;
448 +
MUL64(prediction->
s_weight[1], reconstructed_sample)) >> 22, 23);
452 srd0 =
FFDIFFSIGN(reconstructed_difference, 0) * (1 << 23);
453 for (i = 0; i < order; i++) {
456 predicted_difference +=
MUL64(reconstructed_differences[-i], prediction->
d_weight[i]);
474 same_sign[0] = sign * prediction->
prev_sign[0];
475 same_sign[1] = sign * prediction->
prev_sign[1];
480 sw1 = rshift32(-same_sign[1] * prediction->
s_weight[1], 1);
481 sw1 = (
av_clip(sw1, -range, range) & ~0xF) * 16;
484 weight[0] = 254 * prediction->
s_weight[0] + 0x800000*same_sign[0] + sw1;
485 prediction->
s_weight[0] =
av_clip(rshift32(weight[0], 8), -range, range);
487 range = 0x3C0000 - prediction->
s_weight[0];
488 weight[1] = 255 * prediction->
s_weight[1] + 0xC00000*same_sign[1];
489 prediction->
s_weight[1] =
av_clip(rshift32(weight[1], 8), -range, range);
499 for (subband = 0; subband <
NB_SUBBANDS; subband++)
504 &ff_aptx_quant_tables[hd][subband]);
523 "Frame size must be a multiple of %d samples\n", s->
block_size);
529 for (subband = 0; subband <
NB_SUBBANDS; subband++) {
Prediction prediction[NB_SUBBANDS]
static const int16_t hd_quantize_factor_select_offset_MLF[33]
static const int32_t quantize_dither_factors_MHF[3]
const struct AVCodec * codec
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int shift(int a, int b)
int32_t reconstructed_difference
static const int16_t quantize_factor_select_offset_LF[65]
#define FF_ARRAY_ELEMS(a)
static const int16_t quantize_factor_select_offset_HF[5]
void ff_aptx_invert_quantize_and_prediction(Channel *channel, int hd)
static const int32_t quantize_dither_factors_HF[5]
static const int32_t hd_quantize_dither_factors_MHF[8]
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]
const int16_t * quantize_factor_select_offset
av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
Initialize AudioFrameQueue.
static const int32_t invert_quantize_dither_factors_LF[65]
Quantize quantize[NB_SUBBANDS]
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 hd_quantize_intervals_MHF[9]
static const int16_t quantize_factor_select_offset_MLF[9]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static const int32_t hd_quantize_intervals_HF[17]
void ff_aptx_generate_dither(Channel *channel)
static void aptx_process_subband(InvertQuantize *invert_quantize, Prediction *prediction, int32_t quantized_sample, int32_t dither, ConstTables *tables)
static const int32_t hd_quantize_dither_factors_MLF[32]
static const int32_t hd_invert_quantize_dither_factors_LF[257]
static const uint8_t dither[8][8]
InvertQuantize invert_quantize[NB_SUBBANDS]
int32_t reconstructed_differences[48]
#define FFDIFFSIGN(x, y)
Comparator.
static const int32_t quantize_dither_factors_LF[65]
av_cold int ff_aptx_init(AVCodecContext *avctx)
static void predictor(uint8_t *src, ptrdiff_t size)
int32_t quantization_factor
int32_t previous_reconstructed_sample
Channel channels[NB_CHANNELS]
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_reconstructed_differences_update(Prediction *prediction, int32_t reconstructed_difference, int order)
const int32_t * invert_quantize_dither_factors
ConstTables ff_aptx_quant_tables[2][NB_SUBBANDS]
main external API structure.
static const int32_t quantize_intervals_MLF[9]
static const int32_t hd_quantize_intervals_LF[257]
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 int weight(int i, int blen, int offset)
Writing a table generator This documentation is preliminary Parts of the API are not good and should be changed Basic concepts A table generator consists of two *_tablegen c and *_tablegen h The h file will provide the variable declarations and initialization code for the tables
static const int32_t invert_quantize_dither_factors_HF[5]
static const int32_t quantize_intervals_MHF[3]
static const int16_t quantization_factors[32]
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
int channels
number of audio channels
static const int32_t hd_quantize_intervals_MLF[33]
static const int32_t invert_quantize_dither_factors_MLF[9]
static void aptx_prediction_filtering(Prediction *prediction, int32_t reconstructed_difference, int order)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
static av_always_inline void aptx_update_codeword_history(Channel *channel)
int32_t predicted_difference
static const int32_t hd_quantize_dither_factors_HF[16]
static const int32_t quantize_intervals_LF[65]