39 #include "config_components.h"
71 #define CASE_0(codec_id, ...)
72 #define CASE_1(codec_id, ...) \
76 #define CASE_2(enabled, codec_id, ...) \
77 CASE_ ## enabled(codec_id, __VA_ARGS__)
78 #define CASE_3(config, codec_id, ...) \
79 CASE_2(config, codec_id, __VA_ARGS__)
80 #define CASE(codec, ...) \
81 CASE_3(CONFIG_ ## codec ## _DECODER, AV_CODEC_ID_ ## codec, __VA_ARGS__)
93 { 0, 2048, 0, 1024, 4096, 3584, 3072, 4608, 4200, 4800, 5120, 2048, 1024, -1024, -1024, -2048 },
94 { 0, 0, 2048, 1024, -2048, -1536, -1024, -2560, -2248, -2300, -3072, -2048, -1024, 1024, 0, 0 }
112 -1, -1, -1, -1, 1, 2, 3, 4, -1
122 1, 1, 1, 1, 2, 2, 3, 3, 4, 5,
123 6, 7, 8, 10, 12, 14, 16, 20, 24, 28,
124 32, 40, 48, 56, 64, 80, 96, 112, 128, 160,
125 192, 224, 256, 320, 384, 448, 512, 640, 768, 896,
126 1024, 1280, 1536, 1792, 2048, 2560, 3072, 3584, 4096, 5120,
127 6144, 7168, 8192, 10240, 12288, 14336, 16384, 20480, 24576, 28672, 0
141 -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16,
142 -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16,
153 { 1, 5, 9, 13, 16, 20, 24, 28,
154 -1, -5, -9, -13, -16, -20, -24, -28, },
155 { 2, 6, 11, 15, 20, 24, 29, 33,
156 -2, -6, -11, -15, -20, -24, -29, -33, },
157 { 2, 7, 13, 18, 23, 28, 34, 39,
158 -2, -7, -13, -18, -23, -28, -34, -39, },
159 { 3, 9, 15, 21, 28, 34, 40, 46,
160 -3, -9, -15, -21, -28, -34, -40, -46, },
161 { 3, 11, 18, 26, 33, 41, 48, 56,
162 -3, -11, -18, -26, -33, -41, -48, -56, },
163 { 4, 13, 22, 31, 40, 49, 58, 67,
164 -4, -13, -22, -31, -40, -49, -58, -67, },
165 { 5, 16, 26, 37, 48, 59, 69, 80,
166 -5, -16, -26, -37, -48, -59, -69, -80, },
167 { 6, 19, 31, 44, 57, 70, 82, 95,
168 -6, -19, -31, -44, -57, -70, -82, -95, },
169 { 7, 22, 38, 53, 68, 83, 99, 114,
170 -7, -22, -38, -53, -68, -83, -99, -114, },
171 { 9, 27, 45, 63, 81, 99, 117, 135,
172 -9, -27, -45, -63, -81, -99, -117, -135, },
173 { 10, 32, 53, 75, 96, 118, 139, 161,
174 -10, -32, -53, -75, -96, -118, -139, -161, },
175 { 12, 38, 64, 90, 115, 141, 167, 193,
176 -12, -38, -64, -90, -115, -141, -167, -193, },
177 { 15, 45, 76, 106, 137, 167, 198, 228,
178 -15, -45, -76, -106, -137, -167, -198, -228, },
179 { 18, 54, 91, 127, 164, 200, 237, 273,
180 -18, -54, -91, -127, -164, -200, -237, -273, },
181 { 21, 65, 108, 152, 195, 239, 282, 326,
182 -21, -65, -108, -152, -195, -239, -282, -326, },
183 { 25, 77, 129, 181, 232, 284, 336, 388,
184 -25, -77, -129, -181, -232, -284, -336, -388, },
185 { 30, 92, 153, 215, 276, 338, 399, 461,
186 -30, -92, -153, -215, -276, -338, -399, -461, },
187 { 36, 109, 183, 256, 329, 402, 476, 549,
188 -36, -109, -183, -256, -329, -402, -476, -549, },
189 { 43, 130, 218, 305, 392, 479, 567, 654,
190 -43, -130, -218, -305, -392, -479, -567, -654, },
191 { 52, 156, 260, 364, 468, 572, 676, 780,
192 -52, -156, -260, -364, -468, -572, -676, -780, },
193 { 62, 186, 310, 434, 558, 682, 806, 930,
194 -62, -186, -310, -434, -558, -682, -806, -930, },
195 { 73, 221, 368, 516, 663, 811, 958, 1106,
196 -73, -221, -368, -516, -663, -811, -958, -1106, },
197 { 87, 263, 439, 615, 790, 966, 1142, 1318,
198 -87, -263, -439, -615, -790, -966, -1142, -1318, },
199 { 104, 314, 523, 733, 942, 1152, 1361, 1571,
200 -104, -314, -523, -733, -942, -1152, -1361, -1571, },
201 { 124, 374, 623, 873, 1122, 1372, 1621, 1871,
202 -124, -374, -623, -873, -1122, -1372, -1621, -1871, },
203 { 148, 445, 743, 1040, 1337, 1634, 1932, 2229,
204 -148, -445, -743, -1040, -1337, -1634, -1932, -2229, },
205 { 177, 531, 885, 1239, 1593, 1947, 2301, 2655,
206 -177, -531, -885, -1239, -1593, -1947, -2301, -2655, },
207 { 210, 632, 1053, 1475, 1896, 2318, 2739, 3161,
208 -210, -632, -1053, -1475, -1896, -2318, -2739, -3161, },
209 { 251, 753, 1255, 1757, 2260, 2762, 3264, 3766,
210 -251, -753, -1255, -1757, -2260, -2762, -3264, -3766, },
211 { 299, 897, 1495, 2093, 2692, 3290, 3888, 4486,
212 -299, -897, -1495, -2093, -2692, -3290, -3888, -4486, },
213 { 356, 1068, 1781, 2493, 3206, 3918, 4631, 5343,
214 -356, -1068, -1781, -2493, -3206, -3918, -4631, -5343, },
215 { 424, 1273, 2121, 2970, 3819, 4668, 5516, 6365,
216 -424, -1273, -2121, -2970, -3819, -4668, -5516, -6365, },
220 16, 17, 19, 21, 23, 25, 28, 31, 34, 37,
221 41, 45, 50, 55, 60, 66, 73, 80, 88, 97,
222 107, 118, 130, 143, 157, 173, 190, 209, 230, 253,
223 279, 307, 337, 371, 408, 449, 494, 544, 598, 658,
224 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552
231 { -1, -1, -1, -1, 2, 4, 6, 8 },
232 { -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16 }
236 -1, -1, -1, 1, 4, 7, 10, 12,
240 8, 6, 4, 2, -1, -1, -1, -1,
241 -1, -1, -1, -1, 2, 4, 6, 8,
257 unsigned int min_channels = 1;
258 unsigned int max_channels = 2;
391 if ((nibble & 8) == 0)
401 c->step =
av_clip(
c->step * 2, 127, 24576);
432 step_index =
av_clip(step_index, 0, 88);
442 c->step_index = step_index;
444 return (int16_t)
c->predictor;
455 step_index =
av_clip(step_index, 0, 88);
468 c->step_index = step_index;
470 return (int16_t)
c->predictor;
481 step_index =
av_clip(step_index, 0, 88);
491 c->step_index = step_index;
493 return (int16_t)
c->predictor;
507 c->step_index =
av_clip(step_index, 0, 88);
509 return (int16_t)
c->predictor;
522 step_index =
av_clip(step_index, 0, 60);
527 c->step_index = step_index;
540 step_index =
av_clip(step_index, 0, 88);
542 sign = nibble & (1 <<
shift);
552 c->step_index = step_index;
554 return (int16_t)
c->predictor;
565 step_index =
av_clip(step_index, 0, 88);
578 c->step_index = step_index;
593 switch (frame_format) {
595 tmp = bytestream2_get_be16(gb);
597 c->status[ch].step_index =
tmp & 0x7f;
598 *outbuf++ =
c->status[ch].predictor;
605 c->status[ch].step_index =
av_clip(
c->status[ch].step_index, 0, 88);
608 for (
int i = 0;
i < samples_to_do;
i++) {
610 nibble = bytestream2_get_byte(gb);
628 switch (frame_format) {
630 tmp = bytestream2_get_be16(gb);
632 c->status[ch].step_index =
tmp & 0x7f;
638 tmp = bytestream2_get_be16(gb);
640 c->status[ch].step_index = bytestream2_get_byte(gb);
644 c->status[ch].step_index =
av_clip(
c->status[ch].step_index, 0, 88);
647 if (frame_format == 1 || frame_format == 3) {
649 *outbuf++ = (int16_t)
c->status[st - ch].predictor;
653 for (
int i = 0;
i < samples_to_do;
i += 1+(!st)) {
654 uint8_t nibble = bytestream2_get_byte(gb);
667 predictor = (((
c->sample1) * (
c->coeff1)) + ((
c->sample2) * (
c->coeff2))) / 64;
668 predictor += ((nibble & 0x08)?(nibble - 0x10):(nibble)) *
c->idelta;
670 c->sample2 =
c->sample1;
673 if (
c->idelta < 16)
c->idelta = 16;
674 if (
c->idelta > INT_MAX/768) {
676 c->idelta = INT_MAX/768;
688 step_index =
av_clip(step_index, 0, 48);
698 c->step_index = step_index;
700 return c->predictor * 16;
715 c->predictor = ((
c->predictor * 254) >> 8) + (sign ? -
diff :
diff);
719 c->step =
av_clip(new_step, 511, 32767);
721 return (int16_t)
c->predictor;
728 sign = nibble & (1<<(
size-1));
738 else if (
delta == 0 &&
c->step > 0)
741 return (int16_t)
c->predictor;
776 }
else if (
code == 127 ||
code == -128) {
790 int16_t
index =
c->step_index;
797 sample += lookup_sample >> 1;
799 sample += lookup_sample >> 2;
801 sample += lookup_sample >> 3;
803 sample += lookup_sample >> 4;
805 sample += lookup_sample >> 5;
807 sample += lookup_sample >> 6;
832 out0 += sample_offset;
836 out1 += sample_offset;
839 shift = 12 - (in[4+
i*2] & 15);
859 s = t*(1<<
shift) + ((s_1*f0 + s_2*f1+32)>>6);
872 shift = 12 - (in[5+
i*2] & 15);
890 s = t*(1<<
shift) + ((s_1*f0 + s_2*f1+32)>>6);
917 int k0, signmask, nb_bits, count;
918 int size = buf_size*8;
926 k0 = 1 << (nb_bits-2);
927 signmask = 1 << (nb_bits-1);
953 if (
delta & signmask)
954 c->status[
i].predictor -= vpdiff;
956 c->status[
i].predictor += vpdiff;
960 c->status[
i].step_index =
av_clip(
c->status[
i].step_index, 0, 88);
988 int sign,
delta, add;
999 c->step = (3 *
c->step) >> 2;
1003 c->step = (4 *
c->step - (
c->step >> 1)) >> 2;
1007 c->step = ((
c->step >> 1) + add) >> 1;
1010 add = 4 *
c->step - (
c->step >> 1);
1011 c->step = 2 *
c->step;
1014 add = (11 *
c->step) >> 1;
1015 c->step = 3 *
c->step;
1018 av_unreachable(
"There are cases for all control paths when bits is 3-bit");
1026 return c->predictor;
1031 int sign,
delta, add;
1042 c->step = (3 *
c->step) >> 2;
1046 c->step = (3 *
c->step) >> 2;
1058 add = (11 *
c->step) >> 1;
1059 c->step +=
c->step >> 2;
1062 add = (15 *
c->step) >> 1;
1063 c->step = 2 *
c->step;
1067 add = (19 *
c->step) >> 1;
1069 add = (21 *
c->step) >> 1;
1070 c->step = (
c->step >> 1) + 2 *
c->step;
1073 add = (25 *
c->step) >> 1;
1074 c->step = 5 *
c->step;
1077 av_unreachable(
"There are cases for all control paths when bits is 4-bit");
1085 return c->predictor;
1090 int sign,
delta, add;
1101 c->step += (
c->step >> 2) - (
c->step >> 1);
1106 c->step += (
c->step >> 3) - (
c->step >> 2);
1110 c->step += (
c->step >> 4) - (
c->step >> 3);
1115 c->step +=
c->step >> 3;
1118 c->step +=
c->step >> 2;
1121 c->step +=
c->step >> 1;
1124 c->step = 2 *
c->step - (
c->step >> 3);
1127 c->step = 2 *
c->step + (
c->step >> 3);
1130 c->step = 2 *
c->step + (
c->step >> 1) - (
c->step >> 3);
1133 c->step = 3 *
c->step - (
c->step >> 2);
1140 c->step = (7 *
c->step) >> 1;
1149 return c->predictor;
1164 int buf_size,
int *coded_samples,
int *approx_nb_samples)
1169 int has_coded_samples = 0;
1173 *approx_nb_samples = 0;
1177 if (buf_size > INT_MAX / 14)
1183 if (buf_size < 76 * ch)
1188 if (buf_size < 34 * ch)
1193 nb_samples = (buf_size / 9) * 16;
1209 nb_samples = buf_size * 2 / ch;
1226 if (header_size > 0)
1227 return (buf_size - header_size) * 2 / ch;
1233 has_coded_samples = 1;
1234 *coded_samples = bytestream2_get_le32u(gb);
1235 nb_samples =
FFMIN((buf_size - 8) * 2, *coded_samples);
1241 has_coded_samples = 1;
1242 *coded_samples = bytestream2_get_le32(gb);
1243 *coded_samples -= *coded_samples % 28;
1244 nb_samples = (buf_size - 12) / (ch == 2 ? 30 : 15) * 28;
1247 nb_samples = ((bytestream2_peek_be64(gb) >> 16) & 0xFFFF);
1251 int frame_format = bytestream2_get_be16(gb);
1254 if (frame_format == 1)
1256 if (frame_format == 3)
1259 nb_samples = (buf_size -
skip) * 2 / ch;
1264 has_coded_samples = 1;
1265 *coded_samples = bytestream2_get_le32(gb);
1266 nb_samples = (buf_size - (4 + 8 * ch)) * 2 / ch;
1269 nb_samples = (buf_size - ch) / ch * 2;
1276 has_coded_samples = 1;
1279 header_size = 4 + 9 * ch;
1280 *coded_samples = bytestream2_get_le32(gb);
1283 header_size = 4 + 5 * ch;
1284 *coded_samples = bytestream2_get_le32(gb);
1287 header_size = 4 + 5 * ch;
1288 *coded_samples = bytestream2_get_be32(gb);
1291 *coded_samples -= *coded_samples % 28;
1292 nb_samples = (buf_size - header_size) * 2 / ch;
1293 nb_samples -= nb_samples % 28;
1294 *approx_nb_samples = 1;
1299 nb_samples = ((buf_size - 16) * 2 / 3 * 4) / ch;
1304 if (buf_size < 4 * ch)
1306 nb_samples = 1 + (buf_size - 4 * ch) * 2 / ch;
1311 nb_samples = (buf_size - 4 * ch) * 2 / ch;
1316 nb_samples = (buf_size - 4 * ch) * 2 / ch;
1321 nb_samples = (buf_size - 4 * ch) * 2 / ch;
1332 if (buf_size < 4 * ch)
1334 nb_samples = 1 + (buf_size - 4 * ch) / (bsize * ch) * bsamples;
1336 CASE(ADPCM_IMA_XBOX,
1341 if (buf_size < 4 * ch)
1343 nb_samples = (buf_size - 4 * ch) / (bsize * ch) * bsamples + 1;
1348 nb_samples = (buf_size - 6 * ch) * 2 / ch;
1353 nb_samples = (buf_size - 16 * (ch / 2)) * 2 / ch;
1359 int samples_per_byte;
1365 if (!
s->status[0].step_index) {
1371 nb_samples += buf_size * samples_per_byte / ch;
1376 int buf_bits = buf_size * 8 - 2;
1377 int nbits = (bytestream2_get_byte(gb) >> 6) + 2;
1378 int block_hdr_size = 22 * ch;
1379 int block_size = block_hdr_size + nbits * ch * 4095;
1380 int nblocks = buf_bits / block_size;
1381 int bits_left = buf_bits - nblocks * block_size;
1382 nb_samples = nblocks * 4096;
1384 nb_samples += 1 + (
bits_left - block_hdr_size) / (nbits * ch);
1390 nb_samples = buf_size * 14 / (8 * ch);
1393 has_coded_samples = 1;
1396 bytestream2_get_le32(gb) :
1397 bytestream2_get_be32(gb);
1398 buf_size -= 8 + 36 * ch;
1400 nb_samples = buf_size / 8 * 14;
1401 if (buf_size % 8 > 1)
1402 nb_samples += (buf_size % 8 - 1) * 2;
1403 *approx_nb_samples = 1;
1406 nb_samples = buf_size / (9 * ch) * 16;
1409 nb_samples = (buf_size / 128) * 224 / ch;
1412 nb_samples = buf_size / (21 * ch) * 32;
1416 nb_samples = buf_size / (16 * ch) * 28;
1419 nb_samples = ((buf_size - 1) / ch) * 2;
1426 nb_samples = buf_size / ch;
1436 if (has_coded_samples && (*coded_samples <= 0 || *coded_samples > nb_samples))
1443 int *got_frame_ptr,
AVPacket *avpkt)
1445 const uint8_t *buf = avpkt->
data;
1446 int buf_size = avpkt->
size;
1450 int16_t **samples_p;
1452 int nb_samples, coded_samples, approx_nb_samples,
ret;
1456 nb_samples =
get_nb_samples(avctx, &gb, buf_size, &coded_samples, &approx_nb_samples);
1457 if (nb_samples <= 0) {
1463 frame->nb_samples = nb_samples;
1467 samples_p = (int16_t **)
frame->extended_data;
1471 if (coded_samples) {
1472 if (!approx_nb_samples && coded_samples != nb_samples)
1474 frame->nb_samples = nb_samples = coded_samples;
1514 for (
int m = 0; m < 64; m += 2) {
1515 int byte = bytestream2_get_byteu(&gb);
1541 for (
int n = 0; n < (nb_samples - 1) / samples_per_block; n++) {
1544 samples = &samples_p[
i][1 + n * samples_per_block];
1545 for (
int j = 0; j < block_size; j++) {
1547 (j % 4) + (j / 4) * (
channels * 4) +
i * 4];
1552 for (
int m = 0; m < samples_per_block; m++) {
1560 for (
int n = 0; n < (nb_samples - 1) / 8; n++) {
1563 samples = &samples_p[
i][1 + n * 8];
1564 for (
int m = 0; m < 8; m += 2) {
1565 int v = bytestream2_get_byteu(&gb);
1573 CASE(ADPCM_IMA_XBOX,
1586 for (
int n = 0; n < (nb_samples-1) / 8; n++) {
1589 samples = &samples_p[
i][1 + n * 8];
1590 for (
int m = 0; m < 8; m += 2) {
1591 int v = bytestream2_get_byteu(&gb);
1597 frame->nb_samples--;
1601 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1604 c->status[
i].step_index =
sign_extend(bytestream2_get_le16u(&gb), 16);
1605 if (
c->status[
i].step_index > 88
u) {
1607 i,
c->status[
i].step_index);
1615 for (
int n = nb_samples >> 1; n > 0; n--) {
1616 int v = bytestream2_get_byteu(&gb);
1624 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1626 c->status[
i].step =
sign_extend(bytestream2_get_le16u(&gb), 16);
1628 for (
int n = 0; n < nb_samples >> (1 - st); n++) {
1629 int v = bytestream2_get_byteu(&gb);
1635 int block_predictor;
1640 block_predictor = bytestream2_get_byteu(&gb);
1641 if (block_predictor > 6) {
1653 for (
int n = (nb_samples - 2) >> 1; n > 0; n--) {
1654 int byte = bytestream2_get_byteu(&gb);
1660 block_predictor = bytestream2_get_byteu(&gb);
1661 if (block_predictor > 6) {
1669 block_predictor = bytestream2_get_byteu(&gb);
1670 if (block_predictor > 6) {
1678 c->status[0].idelta =
sign_extend(bytestream2_get_le16u(&gb), 16);
1680 c->status[1].idelta =
sign_extend(bytestream2_get_le16u(&gb), 16);
1683 c->status[0].sample1 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1684 if (st)
c->status[1].sample1 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1685 c->status[0].sample2 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1686 if (st)
c->status[1].sample2 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1689 if (st) *
samples++ =
c->status[1].sample2;
1691 if (st) *
samples++ =
c->status[1].sample1;
1692 for (
int n = (nb_samples - 2) >> (1 - st); n > 0; n--) {
1693 int byte = bytestream2_get_byteu(&gb);
1702 c->status[
channel ].step = bytestream2_get_le16u(&gb) & 0x1f;
1703 c->status[
channel + 1].step = bytestream2_get_le16u(&gb) & 0x1f;
1708 for (
int n = 0; n < nb_samples; n += 2) {
1709 int v = bytestream2_get_byteu(&gb);
1713 for (
int n = 0; n < nb_samples; n += 2) {
1714 int v = bytestream2_get_byteu(&gb);
1731 for (
int n = (nb_samples - 1) >> (1 - st); n > 0; n--) {
1732 int v = bytestream2_get_byteu(&gb);
1740 if (decode_top_nibble_next) { \
1741 nibble = last_byte >> 4; \
1742 decode_top_nibble_next = 0; \
1744 last_byte = bytestream2_get_byteu(&gb); \
1745 nibble = last_byte & 0x0F; \
1746 decode_top_nibble_next = 1; \
1751 int decode_top_nibble_next = 0;
1756 c->status[0].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1757 c->status[1].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1758 c->status[0].step_index = bytestream2_get_byteu(&gb);
1759 c->status[1].step_index = bytestream2_get_byteu(&gb);
1760 if (
c->status[0].step_index > 88
u ||
c->status[1].step_index > 88
u){
1762 c->status[0].step_index,
c->status[1].step_index);
1766 diff_channel =
c->status[1].predictor;
1768 while (
samples < samples_end) {
1782 diff_channel = (diff_channel +
c->status[1].predictor) / 2;
1783 *
samples++ =
c->status[0].predictor +
c->status[1].predictor;
1784 *
samples++ =
c->status[0].predictor -
c->status[1].predictor;
1791 diff_channel = (diff_channel +
c->status[1].predictor) / 2;
1792 *
samples++ =
c->status[0].predictor +
c->status[1].predictor;
1793 *
samples++ =
c->status[0].predictor -
c->status[1].predictor;
1799 CASE(ADPCM_IMA_MAGIX,
1811 for (
int m = 0; m <
channels*nb_samples/16; m ++) {
1812 uint32_t v0 = bytestream2_get_le32u(&gb);
1813 uint32_t v1 = bytestream2_get_le32u(&gb);
1815 for (
int n = 8; n > 0; n--, v0 >>= 4, v1 >>= 4,
samples += 2) {
1833 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1835 int v = bytestream2_get_byteu(&gb);
1848 CASE(ADPCM_IMA_MOFLEX,
1860 for (
int subframe = 0; subframe < nb_samples / 256; subframe++) {
1863 for (
int n = 0; n < 256; n += 2) {
1864 int v = bytestream2_get_byteu(&gb);
1871 CASE(ADPCM_IMA_DAT4,
1876 for (
int n = 0; n < nb_samples; n += 2) {
1877 int v = bytestream2_get_byteu(&gb);
1884 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1885 int v = bytestream2_get_byteu(&gb);
1890 CASE(ADPCM_IMA_HVQM2,
1891 int format = bytestream2_get_be16(&gb);
1896 CASE(ADPCM_IMA_HVQM4,
1897 int format = bytestream2_get_be16(&gb);
1903 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1904 int v = bytestream2_get_byteu(&gb);
1910 for (
int n = nb_samples / 2; n > 0; n--) {
1912 int v = bytestream2_get_byteu(&gb);
1920 for (
int n = nb_samples / 2; n > 0; n--) {
1922 int v = bytestream2_get_byteu(&gb);
1929 CASE(ADPCM_IMA_CUNNING,
1931 int16_t *smp = samples_p[
channel];
1932 for (
int n = 0; n < nb_samples / 2; n++) {
1933 int v = bytestream2_get_byteu(&gb);
1940 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1941 int v = bytestream2_get_byteu(&gb);
1957 for (
int n = 0; n < nb_samples / 2; n++) {
1960 byte[0] = bytestream2_get_byteu(&gb);
1962 byte[1] = bytestream2_get_byteu(&gb);
1972 if (
c->vqa_version == 3) {
1974 int16_t *smp = samples_p[
channel];
1976 for (
int n = nb_samples / 2; n > 0; n--) {
1977 int v = bytestream2_get_byteu(&gb);
1983 for (
int n = nb_samples / 2; n > 0; n--) {
1985 int v = bytestream2_get_byteu(&gb);
1995 int bytes_remaining,
block = 0;
2002 history[1] =
sign_extend(bytestream2_get_le16(&gb), 16);
2003 history[0] =
sign_extend(bytestream2_get_le16(&gb), 16);
2004 scale = bytestream2_get_le16(&gb);
2006 out[0] = history[1];
2007 out[1] = history[0];
2009 for (
int n = 0; n < 15; n++) {
2010 unsigned byte = bytestream2_get_byte(&gb);
2016 out[2+n*2] = nibble[0]*
scale + ((history[0]*3667 - history[1]*1642) >> 11);
2017 history[1] = history[0];
2018 history[0] =
out[2+n*2];
2020 out[2+n*2+1] = nibble[1]*
scale + ((history[0]*3667 - history[1]*1642) >> 11);
2021 history[1] = history[0];
2022 history[0] =
out[2+n*2+1];
2029 if (bytes_remaining > 0) {
2034 int16_t *out0 = samples_p[0];
2035 int16_t *out1 = samples_p[1];
2036 int samples_per_block = 28 * (3 -
channels) * 4;
2037 int sample_offset = 0;
2038 int bytes_remaining;
2041 &
c->status[0], &
c->status[1],
2045 sample_offset += samples_per_block;
2050 if (bytes_remaining > 0) {
2054 CASE(ADPCM_IMA_ESCAPE,
2055 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2056 int byte = bytestream2_get_byteu(&gb);
2061 CASE(ADPCM_IMA_EA_EACS,
2062 for (
int i = 0;
i <= st;
i++) {
2063 c->status[
i].step_index = bytestream2_get_le32u(&gb);
2064 if (
c->status[
i].step_index > 88
u) {
2066 i,
c->status[
i].step_index);
2070 for (
int i = 0;
i <= st;
i++) {
2071 c->status[
i].predictor = bytestream2_get_le32u(&gb);
2076 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2077 int byte = bytestream2_get_byteu(&gb);
2082 CASE(ADPCM_IMA_EA_SEAD,
2083 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2084 int byte = bytestream2_get_byteu(&gb);
2090 int previous_left_sample, previous_right_sample;
2091 int current_left_sample, current_right_sample;
2092 int next_left_sample, next_right_sample;
2093 int coeff1l, coeff2l, coeff1r, coeff2r;
2094 int shift_left, shift_right;
2102 current_left_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2103 previous_left_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2104 current_right_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2105 previous_right_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2107 for (
int count1 = 0; count1 < nb_samples / 28; count1++) {
2108 int byte = bytestream2_get_byteu(&gb);
2115 byte = bytestream2_get_byteu(&gb);
2116 shift_left = 20 - (
byte >> 4);
2117 shift_right = 20 - (
byte & 0x0F);
2120 shift_left = 20 - (
byte & 0x0F);
2123 for (
int count2 = 0; count2 < (
channels == 2 ? 28 : 14); count2++) {
2124 byte = bytestream2_get_byteu(&gb);
2125 next_left_sample =
sign_extend(
byte >> 4, 4) * (1 << shift_left);
2127 next_left_sample = (next_left_sample +
2128 (current_left_sample * coeff1l) +
2129 (previous_left_sample * coeff2l) + 0x80) >> 8;
2131 previous_left_sample = current_left_sample;
2133 *
samples++ = current_left_sample;
2136 next_right_sample =
sign_extend(
byte, 4) * (1 << shift_right);
2138 next_right_sample = (next_right_sample +
2139 (current_right_sample * coeff1r) +
2140 (previous_right_sample * coeff2r) + 0x80) >> 8;
2142 previous_right_sample = current_right_sample;
2144 *
samples++ = current_right_sample;
2146 next_left_sample =
sign_extend(
byte, 4) * (1 << shift_left);
2148 next_left_sample = (next_left_sample +
2149 (current_left_sample * coeff1l) +
2150 (previous_left_sample * coeff2l) + 0x80) >> 8;
2152 previous_left_sample = current_left_sample;
2155 *
samples++ = current_left_sample;
2161 CASE(ADPCM_EA_MAXIS_XA,
2165 int byte = bytestream2_get_byteu(&gb);
2166 for (
int i = 0;
i < 2;
i++)
2170 for (
int count1 = 0; count1 < nb_samples / 2; count1++) {
2173 byte[0] = bytestream2_get_byteu(&gb);
2174 if (st)
byte[1] = bytestream2_get_byteu(&gb);
2175 for (
int i = 4;
i >= 0;
i-=4) {
2189 #
if CONFIG_ADPCM_EA_R1_DECODER || CONFIG_ADPCM_EA_R2_DECODER || CONFIG_ADPCM_EA_R3_DECODER
2198 int previous_sample, current_sample, next_sample;
2207 bytestream2_get_le32(&gb)) +
2214 samplesC = samples_p[
channel];
2217 current_sample =
sign_extend(bytestream2_get_le16(&gb), 16);
2218 previous_sample =
sign_extend(bytestream2_get_le16(&gb), 16);
2220 current_sample =
c->status[
channel].predictor;
2221 previous_sample =
c->status[
channel].prev_sample;
2224 for (count1 = 0; count1 < nb_samples / 28; count1++) {
2225 int byte = bytestream2_get_byte(&gb);
2227 current_sample =
sign_extend(bytestream2_get_be16(&gb), 16);
2228 previous_sample =
sign_extend(bytestream2_get_be16(&gb), 16);
2230 for (
int count2 = 0; count2 < 28; count2++)
2231 *samplesC++ =
sign_extend(bytestream2_get_be16(&gb), 16);
2235 shift = 20 - (
byte & 0x0F);
2237 for (
int count2 = 0; count2 < 28; count2++) {
2241 byte = bytestream2_get_byte(&gb);
2245 next_sample += (current_sample * coeff1) +
2246 (previous_sample * coeff2);
2249 previous_sample = current_sample;
2250 current_sample = next_sample;
2251 *samplesC++ = current_sample;
2257 }
else if (count != count1) {
2259 count =
FFMAX(count, count1);
2263 c->status[
channel].predictor = current_sample;
2264 c->status[
channel].prev_sample = previous_sample;
2268 frame->nb_samples = count * 28;
2277 for (
int n = 0; n < 4; n++,
s += 32) {
2279 for (
int i = 0;
i < 2;
i++)
2288 for (
int m = 2; m < 32; m += 2) {
2290 for (
int n = 0; n < 4; n++,
s += 32) {
2292 int byte = bytestream2_get_byteu(&gb);
2305 CASE(ADPCM_IMA_ACORN,
2309 cs->
step_index = bytestream2_get_le16u(&gb) & 0xFF;
2316 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2317 int byte = bytestream2_get_byteu(&gb);
2335 c->status[0].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
2336 c->status[0].step_index = bytestream2_get_byteu(&gb);
2338 if (
c->status[0].step_index > 88
u) {
2340 c->status[0].step_index);
2344 for (
int n = nb_samples >> 1; n > 0; n--) {
2345 int v = bytestream2_get_byteu(&gb);
2351 if (nb_samples & 1) {
2352 int v = bytestream2_get_byteu(&gb);
2364 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
2365 c->status[
i].step_index = bytestream2_get_byteu(&gb);
2367 if (
c->status[
i].step_index > 88
u) {
2369 c->status[
i].step_index);
2374 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2375 int v = bytestream2_get_byteu(&gb);
2381 CASE(ADPCM_IMA_SMJPEG,
2383 c->status[
i].predictor =
sign_extend(bytestream2_get_be16u(&gb), 16);
2384 c->status[
i].step_index = bytestream2_get_byteu(&gb);
2386 if (
c->status[
i].step_index > 88
u) {
2388 c->status[
i].step_index);
2393 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2394 int v = bytestream2_get_byteu(&gb);
2401 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2402 int v = bytestream2_get_byteu(&gb);
2407 #
if CONFIG_ADPCM_SBPRO_2_DECODER || CONFIG_ADPCM_SBPRO_3_DECODER || \
2408 CONFIG_ADPCM_SBPRO_4_DECODER
2412 if (!
c->status[0].step_index) {
2414 *
samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2416 *
samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2417 c->status[0].step_index = 1;
2421 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2422 int byte = bytestream2_get_byteu(&gb);
2429 for (
int n = (nb_samples<<st) / 3; n > 0; n--) {
2430 int byte = bytestream2_get_byteu(&gb);
2434 (
byte >> 2) & 0x07, 3, 0);
2439 for (
int n = nb_samples >> (2 - st); n > 0; n--) {
2440 int byte = bytestream2_get_byteu(&gb);
2444 (
byte >> 4) & 0x03, 2, 2);
2446 (
byte >> 2) & 0x03, 2, 2);
2458 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2459 int v = bytestream2_get_byteu(&gb);
2467 for (
int n = nb_samples >> 1; n > 0; n--) {
2468 int v = bytestream2_get_byteu(&gb);
2475 int samples_per_block;
2479 samples_per_block = avctx->
extradata[0] / 16;
2480 blocks = nb_samples / avctx->
extradata[0];
2482 samples_per_block = nb_samples / 16;
2486 for (
int m = 0; m < blocks; m++) {
2488 int prev1 =
c->status[
channel].sample1;
2489 int prev2 =
c->status[
channel].sample2;
2493 for (
int i = 0;
i < samples_per_block;
i++) {
2494 int byte = bytestream2_get_byteu(&gb);
2495 int scale = 1 << (
byte >> 4);
2496 int index =
byte & 0xf;
2501 for (
int n = 0; n < 16; n++) {
2507 byte = bytestream2_get_byteu(&gb);
2511 sampledat = ((prev1 * factor1 + prev2 * factor2) >> 11) +
2519 c->status[
channel].sample1 = prev1;
2520 c->status[
channel].sample2 = prev2;
2525 #
if CONFIG_ADPCM_THP_DECODER || CONFIG_ADPCM_THP_LE_DECODER
2531 #define THP_GET16(g) \
2533 avctx->codec->id == AV_CODEC_ID_ADPCM_THP_LE ? \
2534 bytestream2_get_le16u(&(g)) : \
2535 bytestream2_get_be16u(&(g)), 16)
2546 for (
int n = 0; n < 16; n++)
2547 table[
i][n] = THP_GET16(tb);
2550 for (
int n = 0; n < 16; n++)
2551 table[
i][n] = THP_GET16(gb);
2553 if (!
c->has_status) {
2556 c->status[
i].sample1 = THP_GET16(gb);
2557 c->status[
i].sample2 = THP_GET16(gb);
2565 for (
int ch = 0; ch <
channels; ch++) {
2569 for (
int i = 0;
i < (nb_samples + 13) / 14;
i++) {
2570 int byte = bytestream2_get_byteu(&gb);
2571 int index = (
byte >> 4) & 7;
2572 unsigned int exp =
byte & 0x0F;
2577 for (
int n = 0; n < 14 && (
i * 14 + n < nb_samples); n++) {
2583 byte = bytestream2_get_byteu(&gb);
2587 sampledat = ((
c->status[ch].sample1 * factor1
2588 +
c->status[ch].sample2 * factor2) >> 11) + sampledat * (1 <<
exp);
2590 c->status[ch].sample2 =
c->status[ch].sample1;
2591 c->status[ch].sample1 = *
samples++;
2603 for (
int i = 0;
i < nb_samples / 28;
i++) {
2607 header = bytestream2_get_byteu(&gb);
2611 for (
int n = 0; n < 28; n++) {
2616 prev = (
c->status[
channel].sample1 * 0x3c);
2619 prev = (
c->status[
channel].sample1 * 0x73) - (
c->status[
channel].sample2 * 0x34);
2622 prev = (
c->status[
channel].sample1 * 0x62) - (
c->status[
channel].sample2 * 0x37);
2630 byte = bytestream2_get_byteu(&gb);
2636 sampledat = ((sampledat * (1 << 12)) >> (
header & 0xf)) * (1 << 6) + prev;
2639 c->status[
channel].sample1 = sampledat;
2648 int coefs[8*2*8] = { 0 };
2657 order = bytestream2_get_be16(&
cb);
2658 entries = bytestream2_get_be16(&
cb);
2659 if (
version != 1 || order != 2 || entries > 8)
2662 for (
int n = 0; n < order * entries * 8; n++)
2668 int16_t hist[8] = { 0 };
2669 const int order = 2;
2672 hist[6] = cs->sample2;
2673 hist[7] = cs->sample1;
2677 scale = (buf[0] >> 4) & 0xF;
2678 index = (buf[0] >> 0) & 0xF;
2682 for (
int i = 0, j = 0;
i < 16;
i += 2, j++) {
2683 int n0 = (buf[j+1] >> 4) & 0xF;
2684 int n1 = (buf[j+1] >> 0) & 0xF;
2695 for (
int j = 0; j < 2; j++) {
2696 int *sf_codes = &codes[j*8];
2697 int16_t *sf_out = &
out[j*8];
2699 for (
int i = 0;
i < 8;
i++) {
2703 for (
int o = 0; o < order; o++)
2704 delta += coefs[o*8 +
i] * hist[(8 - order) + o];
2706 for (
int k =
i-1; k > -1; k--) {
2707 for (
int o = 1; o < order; o++)
2708 delta += sf_codes[(
i-1) - k] * (unsigned)coefs[(o*8) + k];
2717 for (
int i = 8 - order;
i < 8;
i++)
2718 hist[
i] = sf_out[
i];
2723 cs->sample2 = hist[6];
2724 cs->sample1 = hist[7];
2738 for (
int i = 0;
i < nb_samples_per_block / 28;
i++) {
2741 filter = bytestream2_get_byteu(&gb);
2746 flag = bytestream2_get_byteu(&gb) & 0x7;
2749 for (
int n = 0; n < 28; n++) {
2755 byte = bytestream2_get_byteu(&gb);
2780 filter = bytestream2_get_byteu(&gb);
2786 for (
int n = 0; n < nb_samples_per_block; n++) {
2792 byte = bytestream2_get_byteu(&gb);
2815 for (
int ch = 0; ch <
channels; ch++) {
2816 c->status[ch].predictor =
sign_extend(bytestream2_get_le16(&gb), 16);
2817 c->status[ch].step =
sign_extend(bytestream2_get_le16(&gb), 16);
2821 for (
int i = 0;
i < nb_samples;
i++)
2822 for (
int ch = 0; ch <
channels; ch++)
2854 control = bytestream2_get_byteu(&gb);
2855 shift = (control >> 4) + 2;
2857 for (
int n = 0; n < 16; n++) {
2858 int sample = bytestream2_get_byteu(&gb);
2866 for (
int n = 0; n < nb_samples; n++) {
2867 for (
int ch = 0; ch <
channels; ch++) {
2868 int v = bytestream2_get_byteu(&gb);
2874 for (
int n = 0; n < nb_samples *
channels; n++) {
2875 int v = bytestream2_get_byteu(&gb);
2880 for (
int n = nb_samples / 2; n > 0; n--) {
2882 int v = bytestream2_get_byteu(&gb);
2890 av_unreachable(
"There are cases for all codec ids using adpcm_decode_frame");
2917 c->status[0].step =
c->status[1].step = 511;
2950 #define ADPCM_DECODER_0(id_, name_, long_name_)
2951 #define ADPCM_DECODER_1(id_, name_, long_name_) \
2952 const FFCodec ff_ ## name_ ## _decoder = { \
2954 CODEC_LONG_NAME(long_name_), \
2955 .p.type = AVMEDIA_TYPE_AUDIO, \
2957 .p.capabilities = AV_CODEC_CAP_DR1, \
2958 .priv_data_size = sizeof(ADPCMDecodeContext), \
2959 .init = adpcm_decode_init, \
2960 FF_CODEC_DECODE_CB(adpcm_decode_frame), \
2961 .flush = adpcm_flush, \
2963 #define ADPCM_DECODER_2(enabled, codec_id, name, long_name) \
2964 ADPCM_DECODER_ ## enabled(codec_id, name, long_name)
2965 #define ADPCM_DECODER_3(config, codec_id, name, long_name) \
2966 ADPCM_DECODER_2(config, codec_id, name, long_name)
2967 #define ADPCM_DECODER(codec, name, long_name) \
2968 ADPCM_DECODER_3(CONFIG_ ## codec ## _DECODER, AV_CODEC_ID_ ## codec, \
2973 ADPCM_DECODER(ADPCM_AFC, adpcm_afc, "ADPCM Nintendo Gamecube AFC")
2974 ADPCM_DECODER(ADPCM_AGM, adpcm_agm, "ADPCM AmuseGraphics Movie")
2976 ADPCM_DECODER(ADPCM_ARGO, adpcm_argo, "ADPCM Argonaut Games")
2978 ADPCM_DECODER(ADPCM_CT, adpcm_ct, "ADPCM Creative Technology")
2979 ADPCM_DECODER(ADPCM_DTK, adpcm_dtk, "ADPCM Nintendo Gamecube DTK")
2981 ADPCM_DECODER(ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa, "ADPCM Electronic Arts Maxis CDROM XA")
2985 ADPCM_DECODER(ADPCM_EA_XAS, adpcm_ea_xas, "ADPCM Electronic Arts XAS")
2986 ADPCM_DECODER(ADPCM_IMA_ACORN, adpcm_ima_acorn, "ADPCM IMA Acorn Replay")
2987 ADPCM_DECODER(ADPCM_IMA_AMV, adpcm_ima_amv, "ADPCM IMA AMV")
2988 ADPCM_DECODER(ADPCM_IMA_APC, adpcm_ima_apc, "ADPCM IMA CRYO APC")
2989 ADPCM_DECODER(ADPCM_IMA_APM, adpcm_ima_apm, "ADPCM IMA Ubisoft APM")
2990 ADPCM_DECODER(ADPCM_IMA_CUNNING, adpcm_ima_cunning, "ADPCM IMA Cunning Developments")
2991 ADPCM_DECODER(ADPCM_IMA_DAT4, adpcm_ima_dat4, "ADPCM IMA Eurocom DAT4")
2992 ADPCM_DECODER(ADPCM_IMA_DK3, adpcm_ima_dk3, "ADPCM IMA Duck DK3")
2993 ADPCM_DECODER(ADPCM_IMA_DK4, adpcm_ima_dk4, "ADPCM IMA Duck DK4")
2994 ADPCM_DECODER(ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS")
2995 ADPCM_DECODER(ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead, "ADPCM IMA Electronic Arts SEAD")
2996 ADPCM_DECODER(ADPCM_IMA_ESCAPE, adpcm_ima_escape, "ADPCM IMA Acorn Escape")
2997 ADPCM_DECODER(ADPCM_IMA_HVQM2, adpcm_ima_hvqm2, "ADPCM IMA HVQM2")
2998 ADPCM_DECODER(ADPCM_IMA_HVQM4, adpcm_ima_hvqm4, "ADPCM IMA HVQM4")
2999 ADPCM_DECODER(ADPCM_IMA_ISS, adpcm_ima_iss, "ADPCM IMA Funcom ISS")
3000 ADPCM_DECODER(ADPCM_IMA_MAGIX, adpcm_ima_magix, "ADPCM IMA Magix")
3001 ADPCM_DECODER(ADPCM_IMA_MOFLEX, adpcm_ima_moflex, "ADPCM IMA MobiClip MOFLEX")
3002 ADPCM_DECODER(ADPCM_IMA_MTF, adpcm_ima_mtf, "ADPCM IMA Capcom'
s MT Framework")
3003 ADPCM_DECODER(ADPCM_IMA_OKI, adpcm_ima_oki, "ADPCM IMA Dialogic OKI")
3004 ADPCM_DECODER(ADPCM_IMA_PDA, adpcm_ima_pda, "ADPCM IMA PlayDate")
3005 ADPCM_DECODER(ADPCM_IMA_QT, adpcm_ima_qt, "ADPCM IMA QuickTime")
3006 ADPCM_DECODER(ADPCM_IMA_RAD, adpcm_ima_rad, "ADPCM IMA Radical")
3007 ADPCM_DECODER(ADPCM_IMA_SSI, adpcm_ima_ssi, "ADPCM IMA Simon & Schuster Interactive")
3008 ADPCM_DECODER(ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg, "ADPCM IMA Loki SDL MJPEG")
3009 ADPCM_DECODER(ADPCM_IMA_ALP, adpcm_ima_alp, "ADPCM IMA High Voltage Software ALP")
3010 ADPCM_DECODER(ADPCM_IMA_WAV, adpcm_ima_wav, "ADPCM IMA WAV")
3011 ADPCM_DECODER(ADPCM_IMA_WS, adpcm_ima_ws, "ADPCM IMA Westwood")
3012 ADPCM_DECODER(ADPCM_IMA_XBOX, adpcm_ima_xbox, "ADPCM IMA Xbox")
3015 ADPCM_DECODER(ADPCM_N64, adpcm_n64, "ADPCM Silicon Graphics N64")
3019 ADPCM_DECODER(ADPCM_SBPRO_2, adpcm_sbpro_2, "ADPCM Sound Blaster Pro 2-
bit")
3020 ADPCM_DECODER(ADPCM_SBPRO_3, adpcm_sbpro_3, "ADPCM Sound Blaster Pro 2.6-
bit")
3021 ADPCM_DECODER(ADPCM_SBPRO_4, adpcm_sbpro_4, "ADPCM Sound Blaster Pro 4-
bit")
3022 ADPCM_DECODER(ADPCM_SWF, adpcm_swf, "ADPCM Shockwave Flash")
3023 ADPCM_DECODER(ADPCM_THP_LE, adpcm_thp_le, "ADPCM Nintendo THP (little-endian)")