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;
390 if ((nibble & 8) == 0)
400 c->step =
av_clip(
c->step * 2, 127, 24576);
431 step_index =
av_clip(step_index, 0, 88);
441 c->step_index = step_index;
443 return (int16_t)
c->predictor;
454 step_index =
av_clip(step_index, 0, 88);
467 c->step_index = step_index;
469 return (int16_t)
c->predictor;
480 step_index =
av_clip(step_index, 0, 88);
490 c->step_index = step_index;
492 return (int16_t)
c->predictor;
506 c->step_index =
av_clip(step_index, 0, 88);
508 return (int16_t)
c->predictor;
521 step_index =
av_clip(step_index, 0, 60);
526 c->step_index = step_index;
539 step_index =
av_clip(step_index, 0, 88);
541 sign = nibble & (1 <<
shift);
551 c->step_index = step_index;
553 return (int16_t)
c->predictor;
564 step_index =
av_clip(step_index, 0, 88);
577 c->step_index = step_index;
592 switch (frame_format) {
594 tmp = bytestream2_get_be16(gb);
596 c->status[ch].step_index =
tmp & 0x7f;
597 *outbuf++ =
c->status[ch].predictor;
604 c->status[ch].step_index =
av_clip(
c->status[ch].step_index, 0, 88);
607 for (
int i = 0;
i < samples_to_do;
i++) {
609 nibble = bytestream2_get_byte(gb);
627 switch (frame_format) {
629 tmp = bytestream2_get_be16(gb);
631 c->status[ch].step_index =
tmp & 0x7f;
637 tmp = bytestream2_get_be16(gb);
639 c->status[ch].step_index = bytestream2_get_byte(gb);
643 c->status[ch].step_index =
av_clip(
c->status[ch].step_index, 0, 88);
646 if (frame_format == 1 || frame_format == 3) {
648 *outbuf++ = (int16_t)
c->status[st - ch].predictor;
652 for (
int i = 0;
i < samples_to_do;
i += 1+(!st)) {
653 uint8_t nibble = bytestream2_get_byte(gb);
666 predictor = (((
c->sample1) * (
c->coeff1)) + ((
c->sample2) * (
c->coeff2))) / 64;
667 predictor += ((nibble & 0x08)?(nibble - 0x10):(nibble)) *
c->idelta;
669 c->sample2 =
c->sample1;
672 if (
c->idelta < 16)
c->idelta = 16;
673 if (
c->idelta > INT_MAX/768) {
675 c->idelta = INT_MAX/768;
687 step_index =
av_clip(step_index, 0, 48);
697 c->step_index = step_index;
699 return c->predictor * 16;
714 c->predictor = ((
c->predictor * 254) >> 8) + (sign ? -
diff :
diff);
718 c->step =
av_clip(new_step, 511, 32767);
720 return (int16_t)
c->predictor;
727 sign = nibble & (1<<(
size-1));
737 else if (
delta == 0 &&
c->step > 0)
740 return (int16_t)
c->predictor;
775 }
else if (
code == 127 ||
code == -128) {
789 int16_t
index =
c->step_index;
796 sample += lookup_sample >> 1;
798 sample += lookup_sample >> 2;
800 sample += lookup_sample >> 3;
802 sample += lookup_sample >> 4;
804 sample += lookup_sample >> 5;
806 sample += lookup_sample >> 6;
831 out0 += sample_offset;
835 out1 += sample_offset;
838 shift = 12 - (in[4+
i*2] & 15);
858 s = t*(1<<
shift) + ((s_1*f0 + s_2*f1+32)>>6);
871 shift = 12 - (in[5+
i*2] & 15);
889 s = t*(1<<
shift) + ((s_1*f0 + s_2*f1+32)>>6);
916 int k0, signmask, nb_bits, count;
917 int size = buf_size*8;
925 k0 = 1 << (nb_bits-2);
926 signmask = 1 << (nb_bits-1);
952 if (
delta & signmask)
953 c->status[
i].predictor -= vpdiff;
955 c->status[
i].predictor += vpdiff;
959 c->status[
i].step_index =
av_clip(
c->status[
i].step_index, 0, 88);
987 int sign,
delta, add;
998 c->step = (3 *
c->step) >> 2;
1002 c->step = (4 *
c->step - (
c->step >> 1)) >> 2;
1006 c->step = ((
c->step >> 1) + add) >> 1;
1009 add = 4 *
c->step - (
c->step >> 1);
1010 c->step = 2 *
c->step;
1013 add = (11 *
c->step) >> 1;
1014 c->step = 3 *
c->step;
1017 av_unreachable(
"There are cases for all control paths when bits is 3-bit");
1025 return c->predictor;
1030 int sign,
delta, add;
1041 c->step = (3 *
c->step) >> 2;
1045 c->step = (3 *
c->step) >> 2;
1057 add = (11 *
c->step) >> 1;
1058 c->step +=
c->step >> 2;
1061 add = (15 *
c->step) >> 1;
1062 c->step = 2 *
c->step;
1066 add = (19 *
c->step) >> 1;
1068 add = (21 *
c->step) >> 1;
1069 c->step = (
c->step >> 1) + 2 *
c->step;
1072 add = (25 *
c->step) >> 1;
1073 c->step = 5 *
c->step;
1076 av_unreachable(
"There are cases for all control paths when bits is 4-bit");
1084 return c->predictor;
1089 int sign,
delta, add;
1100 c->step += (
c->step >> 2) - (
c->step >> 1);
1105 c->step += (
c->step >> 3) - (
c->step >> 2);
1109 c->step += (
c->step >> 4) - (
c->step >> 3);
1114 c->step +=
c->step >> 3;
1117 c->step +=
c->step >> 2;
1120 c->step +=
c->step >> 1;
1123 c->step = 2 *
c->step - (
c->step >> 3);
1126 c->step = 2 *
c->step + (
c->step >> 3);
1129 c->step = 2 *
c->step + (
c->step >> 1) - (
c->step >> 3);
1132 c->step = 3 *
c->step - (
c->step >> 2);
1139 c->step = (7 *
c->step) >> 1;
1148 return c->predictor;
1163 int buf_size,
int *coded_samples,
int *approx_nb_samples)
1168 int has_coded_samples = 0;
1172 *approx_nb_samples = 0;
1176 if (buf_size > INT_MAX / 2)
1182 if (buf_size < 76 * ch)
1187 if (buf_size < 34 * ch)
1192 nb_samples = (buf_size / 9) * 16;
1208 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;
1323 if (buf_size < 4 * ch)
1325 nb_samples = 1 + (buf_size - 4 * ch) / (bsize * ch) * bsamples;
1327 CASE(ADPCM_IMA_XBOX,
1332 if (buf_size < 4 * ch)
1334 nb_samples = (buf_size - 4 * ch) / (bsize * ch) * bsamples + 1;
1339 nb_samples = (buf_size - 6 * ch) * 2 / ch;
1344 nb_samples = (buf_size - 16 * (ch / 2)) * 2 / ch;
1350 int samples_per_byte;
1356 if (!
s->status[0].step_index) {
1362 nb_samples += buf_size * samples_per_byte / ch;
1367 int buf_bits = buf_size * 8 - 2;
1368 int nbits = (bytestream2_get_byte(gb) >> 6) + 2;
1369 int block_hdr_size = 22 * ch;
1370 int block_size = block_hdr_size + nbits * ch * 4095;
1371 int nblocks = buf_bits / block_size;
1372 int bits_left = buf_bits - nblocks * block_size;
1373 nb_samples = nblocks * 4096;
1375 nb_samples += 1 + (
bits_left - block_hdr_size) / (nbits * ch);
1381 nb_samples = buf_size * 14 / (8 * ch);
1384 has_coded_samples = 1;
1387 bytestream2_get_le32(gb) :
1388 bytestream2_get_be32(gb);
1389 buf_size -= 8 + 36 * ch;
1391 nb_samples = buf_size / 8 * 14;
1392 if (buf_size % 8 > 1)
1393 nb_samples += (buf_size % 8 - 1) * 2;
1394 *approx_nb_samples = 1;
1397 nb_samples = buf_size / (9 * ch) * 16;
1400 nb_samples = (buf_size / 128) * 224 / ch;
1403 nb_samples = buf_size / (21 * ch) * 32;
1407 nb_samples = buf_size / (16 * ch) * 28;
1410 nb_samples = ((buf_size - 1) / ch) * 2;
1417 nb_samples = buf_size / ch;
1427 if (has_coded_samples && (*coded_samples <= 0 || *coded_samples > nb_samples))
1434 int *got_frame_ptr,
AVPacket *avpkt)
1436 const uint8_t *buf = avpkt->
data;
1437 int buf_size = avpkt->
size;
1441 int16_t **samples_p;
1443 int nb_samples, coded_samples, approx_nb_samples,
ret;
1447 nb_samples =
get_nb_samples(avctx, &gb, buf_size, &coded_samples, &approx_nb_samples);
1448 if (nb_samples <= 0) {
1454 frame->nb_samples = nb_samples;
1458 samples_p = (int16_t **)
frame->extended_data;
1462 if (coded_samples) {
1463 if (!approx_nb_samples && coded_samples != nb_samples)
1465 frame->nb_samples = nb_samples = coded_samples;
1505 for (
int m = 0; m < 64; m += 2) {
1506 int byte = bytestream2_get_byteu(&gb);
1532 for (
int n = 0; n < (nb_samples - 1) / samples_per_block; n++) {
1535 samples = &samples_p[
i][1 + n * samples_per_block];
1536 for (
int j = 0; j < block_size; j++) {
1538 (j % 4) + (j / 4) * (
channels * 4) +
i * 4];
1543 for (
int m = 0; m < samples_per_block; m++) {
1551 for (
int n = 0; n < (nb_samples - 1) / 8; n++) {
1554 samples = &samples_p[
i][1 + n * 8];
1555 for (
int m = 0; m < 8; m += 2) {
1556 int v = bytestream2_get_byteu(&gb);
1564 CASE(ADPCM_IMA_XBOX,
1577 for (
int n = 0; n < (nb_samples-1) / 8; n++) {
1580 samples = &samples_p[
i][1 + n * 8];
1581 for (
int m = 0; m < 8; m += 2) {
1582 int v = bytestream2_get_byteu(&gb);
1588 frame->nb_samples--;
1592 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1595 c->status[
i].step_index =
sign_extend(bytestream2_get_le16u(&gb), 16);
1596 if (
c->status[
i].step_index > 88
u) {
1598 i,
c->status[
i].step_index);
1606 for (
int n = nb_samples >> 1; n > 0; n--) {
1607 int v = bytestream2_get_byteu(&gb);
1615 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1617 c->status[
i].step =
sign_extend(bytestream2_get_le16u(&gb), 16);
1619 for (
int n = 0; n < nb_samples >> (1 - st); n++) {
1620 int v = bytestream2_get_byteu(&gb);
1626 int block_predictor;
1631 block_predictor = bytestream2_get_byteu(&gb);
1632 if (block_predictor > 6) {
1644 for (
int n = (nb_samples - 2) >> 1; n > 0; n--) {
1645 int byte = bytestream2_get_byteu(&gb);
1651 block_predictor = bytestream2_get_byteu(&gb);
1652 if (block_predictor > 6) {
1660 block_predictor = bytestream2_get_byteu(&gb);
1661 if (block_predictor > 6) {
1669 c->status[0].idelta =
sign_extend(bytestream2_get_le16u(&gb), 16);
1671 c->status[1].idelta =
sign_extend(bytestream2_get_le16u(&gb), 16);
1674 c->status[0].sample1 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1675 if (st)
c->status[1].sample1 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1676 c->status[0].sample2 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1677 if (st)
c->status[1].sample2 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1680 if (st) *
samples++ =
c->status[1].sample2;
1682 if (st) *
samples++ =
c->status[1].sample1;
1683 for (
int n = (nb_samples - 2) >> (1 - st); n > 0; n--) {
1684 int byte = bytestream2_get_byteu(&gb);
1693 c->status[
channel ].step = bytestream2_get_le16u(&gb) & 0x1f;
1694 c->status[
channel + 1].step = bytestream2_get_le16u(&gb) & 0x1f;
1699 for (
int n = 0; n < nb_samples; n += 2) {
1700 int v = bytestream2_get_byteu(&gb);
1704 for (
int n = 0; n < nb_samples; n += 2) {
1705 int v = bytestream2_get_byteu(&gb);
1722 for (
int n = (nb_samples - 1) >> (1 - st); n > 0; n--) {
1723 int v = bytestream2_get_byteu(&gb);
1731 if (decode_top_nibble_next) { \
1732 nibble = last_byte >> 4; \
1733 decode_top_nibble_next = 0; \
1735 last_byte = bytestream2_get_byteu(&gb); \
1736 nibble = last_byte & 0x0F; \
1737 decode_top_nibble_next = 1; \
1742 int decode_top_nibble_next = 0;
1747 c->status[0].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1748 c->status[1].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1749 c->status[0].step_index = bytestream2_get_byteu(&gb);
1750 c->status[1].step_index = bytestream2_get_byteu(&gb);
1751 if (
c->status[0].step_index > 88
u ||
c->status[1].step_index > 88
u){
1753 c->status[0].step_index,
c->status[1].step_index);
1757 diff_channel =
c->status[1].predictor;
1759 while (
samples < samples_end) {
1773 diff_channel = (diff_channel +
c->status[1].predictor) / 2;
1774 *
samples++ =
c->status[0].predictor +
c->status[1].predictor;
1775 *
samples++ =
c->status[0].predictor -
c->status[1].predictor;
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;
1790 CASE(ADPCM_IMA_MAGIX,
1802 for (
int m = 0; m < avctx->
block_align-8; m += 8) {
1803 uint32_t v0 = bytestream2_get_le32u(&gb);
1804 uint32_t v1 = bytestream2_get_le32u(&gb);
1806 for (
int n = 8; n > 0; n--, v0 >>= 4, v1 >>= 4,
samples += 2) {
1824 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1826 int v = bytestream2_get_byteu(&gb);
1839 CASE(ADPCM_IMA_MOFLEX,
1851 for (
int subframe = 0; subframe < nb_samples / 256; subframe++) {
1854 for (
int n = 0; n < 256; n += 2) {
1855 int v = bytestream2_get_byteu(&gb);
1862 CASE(ADPCM_IMA_DAT4,
1867 for (
int n = 0; n < nb_samples; n += 2) {
1868 int v = bytestream2_get_byteu(&gb);
1875 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1876 int v = bytestream2_get_byteu(&gb);
1881 CASE(ADPCM_IMA_HVQM2,
1882 int format = bytestream2_get_be16(&gb);
1887 CASE(ADPCM_IMA_HVQM4,
1888 int format = bytestream2_get_be16(&gb);
1894 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1895 int v = bytestream2_get_byteu(&gb);
1901 for (
int n = nb_samples / 2; n > 0; n--) {
1903 int v = bytestream2_get_byteu(&gb);
1911 for (
int n = nb_samples / 2; n > 0; n--) {
1913 int v = bytestream2_get_byteu(&gb);
1920 CASE(ADPCM_IMA_CUNNING,
1922 int16_t *smp = samples_p[
channel];
1923 for (
int n = 0; n < nb_samples / 2; n++) {
1924 int v = bytestream2_get_byteu(&gb);
1931 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1932 int v = bytestream2_get_byteu(&gb);
1948 for (
int n = 0; n < nb_samples / 2; n++) {
1951 byte[0] = bytestream2_get_byteu(&gb);
1953 byte[1] = bytestream2_get_byteu(&gb);
1963 if (
c->vqa_version == 3) {
1965 int16_t *smp = samples_p[
channel];
1967 for (
int n = nb_samples / 2; n > 0; n--) {
1968 int v = bytestream2_get_byteu(&gb);
1974 for (
int n = nb_samples / 2; n > 0; n--) {
1976 int v = bytestream2_get_byteu(&gb);
1986 int bytes_remaining,
block = 0;
1993 history[1] =
sign_extend(bytestream2_get_le16(&gb), 16);
1994 history[0] =
sign_extend(bytestream2_get_le16(&gb), 16);
1995 scale = bytestream2_get_le16(&gb);
1997 out[0] = history[1];
1998 out[1] = history[0];
2000 for (
int n = 0; n < 15; n++) {
2001 unsigned byte = bytestream2_get_byte(&gb);
2007 out[2+n*2] = nibble[0]*
scale + ((history[0]*3667 - history[1]*1642) >> 11);
2008 history[1] = history[0];
2009 history[0] =
out[2+n*2];
2011 out[2+n*2+1] = nibble[1]*
scale + ((history[0]*3667 - history[1]*1642) >> 11);
2012 history[1] = history[0];
2013 history[0] =
out[2+n*2+1];
2020 if (bytes_remaining > 0) {
2025 int16_t *out0 = samples_p[0];
2026 int16_t *out1 = samples_p[1];
2027 int samples_per_block = 28 * (3 -
channels) * 4;
2028 int sample_offset = 0;
2029 int bytes_remaining;
2032 &
c->status[0], &
c->status[1],
2036 sample_offset += samples_per_block;
2041 if (bytes_remaining > 0) {
2045 CASE(ADPCM_IMA_ESCAPE,
2046 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2047 int byte = bytestream2_get_byteu(&gb);
2052 CASE(ADPCM_IMA_EA_EACS,
2053 for (
int i = 0;
i <= st;
i++) {
2054 c->status[
i].step_index = bytestream2_get_le32u(&gb);
2055 if (
c->status[
i].step_index > 88
u) {
2057 i,
c->status[
i].step_index);
2061 for (
int i = 0;
i <= st;
i++) {
2062 c->status[
i].predictor = bytestream2_get_le32u(&gb);
2067 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2068 int byte = bytestream2_get_byteu(&gb);
2073 CASE(ADPCM_IMA_EA_SEAD,
2074 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2075 int byte = bytestream2_get_byteu(&gb);
2081 int previous_left_sample, previous_right_sample;
2082 int current_left_sample, current_right_sample;
2083 int next_left_sample, next_right_sample;
2084 int coeff1l, coeff2l, coeff1r, coeff2r;
2085 int shift_left, shift_right;
2093 current_left_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2094 previous_left_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2095 current_right_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2096 previous_right_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2098 for (
int count1 = 0; count1 < nb_samples / 28; count1++) {
2099 int byte = bytestream2_get_byteu(&gb);
2106 byte = bytestream2_get_byteu(&gb);
2107 shift_left = 20 - (
byte >> 4);
2108 shift_right = 20 - (
byte & 0x0F);
2111 shift_left = 20 - (
byte & 0x0F);
2114 for (
int count2 = 0; count2 < (
channels == 2 ? 28 : 14); count2++) {
2115 byte = bytestream2_get_byteu(&gb);
2116 next_left_sample =
sign_extend(
byte >> 4, 4) * (1 << shift_left);
2118 next_left_sample = (next_left_sample +
2119 (current_left_sample * coeff1l) +
2120 (previous_left_sample * coeff2l) + 0x80) >> 8;
2122 previous_left_sample = current_left_sample;
2124 *
samples++ = current_left_sample;
2127 next_right_sample =
sign_extend(
byte, 4) * (1 << shift_right);
2129 next_right_sample = (next_right_sample +
2130 (current_right_sample * coeff1r) +
2131 (previous_right_sample * coeff2r) + 0x80) >> 8;
2133 previous_right_sample = current_right_sample;
2135 *
samples++ = current_right_sample;
2137 next_left_sample =
sign_extend(
byte, 4) * (1 << shift_left);
2139 next_left_sample = (next_left_sample +
2140 (current_left_sample * coeff1l) +
2141 (previous_left_sample * coeff2l) + 0x80) >> 8;
2143 previous_left_sample = current_left_sample;
2146 *
samples++ = current_left_sample;
2152 CASE(ADPCM_EA_MAXIS_XA,
2156 int byte = bytestream2_get_byteu(&gb);
2157 for (
int i = 0;
i < 2;
i++)
2161 for (
int count1 = 0; count1 < nb_samples / 2; count1++) {
2164 byte[0] = bytestream2_get_byteu(&gb);
2165 if (st)
byte[1] = bytestream2_get_byteu(&gb);
2166 for (
int i = 4;
i >= 0;
i-=4) {
2180 #
if CONFIG_ADPCM_EA_R1_DECODER || CONFIG_ADPCM_EA_R2_DECODER || CONFIG_ADPCM_EA_R3_DECODER
2189 int previous_sample, current_sample, next_sample;
2198 bytestream2_get_le32(&gb)) +
2205 samplesC = samples_p[
channel];
2208 current_sample =
sign_extend(bytestream2_get_le16(&gb), 16);
2209 previous_sample =
sign_extend(bytestream2_get_le16(&gb), 16);
2211 current_sample =
c->status[
channel].predictor;
2212 previous_sample =
c->status[
channel].prev_sample;
2215 for (count1 = 0; count1 < nb_samples / 28; count1++) {
2216 int byte = bytestream2_get_byte(&gb);
2218 current_sample =
sign_extend(bytestream2_get_be16(&gb), 16);
2219 previous_sample =
sign_extend(bytestream2_get_be16(&gb), 16);
2221 for (
int count2 = 0; count2 < 28; count2++)
2222 *samplesC++ =
sign_extend(bytestream2_get_be16(&gb), 16);
2226 shift = 20 - (
byte & 0x0F);
2228 for (
int count2 = 0; count2 < 28; count2++) {
2232 byte = bytestream2_get_byte(&gb);
2236 next_sample += (current_sample * coeff1) +
2237 (previous_sample * coeff2);
2240 previous_sample = current_sample;
2241 current_sample = next_sample;
2242 *samplesC++ = current_sample;
2248 }
else if (count != count1) {
2250 count =
FFMAX(count, count1);
2254 c->status[
channel].predictor = current_sample;
2255 c->status[
channel].prev_sample = previous_sample;
2259 frame->nb_samples = count * 28;
2268 for (
int n = 0; n < 4; n++,
s += 32) {
2270 for (
int i = 0;
i < 2;
i++)
2279 for (
int m = 2; m < 32; m += 2) {
2281 for (
int n = 0; n < 4; n++,
s += 32) {
2283 int byte = bytestream2_get_byteu(&gb);
2296 CASE(ADPCM_IMA_ACORN,
2300 cs->
step_index = bytestream2_get_le16u(&gb) & 0xFF;
2307 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2308 int byte = bytestream2_get_byteu(&gb);
2326 c->status[0].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
2327 c->status[0].step_index = bytestream2_get_byteu(&gb);
2329 if (
c->status[0].step_index > 88
u) {
2331 c->status[0].step_index);
2335 for (
int n = nb_samples >> 1; n > 0; n--) {
2336 int v = bytestream2_get_byteu(&gb);
2342 if (nb_samples & 1) {
2343 int v = bytestream2_get_byteu(&gb);
2355 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
2356 c->status[
i].step_index = bytestream2_get_byteu(&gb);
2358 if (
c->status[
i].step_index > 88
u) {
2360 c->status[
i].step_index);
2365 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2366 int v = bytestream2_get_byteu(&gb);
2372 CASE(ADPCM_IMA_SMJPEG,
2374 c->status[
i].predictor =
sign_extend(bytestream2_get_be16u(&gb), 16);
2375 c->status[
i].step_index = bytestream2_get_byteu(&gb);
2377 if (
c->status[
i].step_index > 88
u) {
2379 c->status[
i].step_index);
2384 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2385 int v = bytestream2_get_byteu(&gb);
2392 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2393 int v = bytestream2_get_byteu(&gb);
2398 #
if CONFIG_ADPCM_SBPRO_2_DECODER || CONFIG_ADPCM_SBPRO_3_DECODER || \
2399 CONFIG_ADPCM_SBPRO_4_DECODER
2403 if (!
c->status[0].step_index) {
2405 *
samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2407 *
samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2408 c->status[0].step_index = 1;
2412 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2413 int byte = bytestream2_get_byteu(&gb);
2420 for (
int n = (nb_samples<<st) / 3; n > 0; n--) {
2421 int byte = bytestream2_get_byteu(&gb);
2425 (
byte >> 2) & 0x07, 3, 0);
2430 for (
int n = nb_samples >> (2 - st); n > 0; n--) {
2431 int byte = bytestream2_get_byteu(&gb);
2435 (
byte >> 4) & 0x03, 2, 2);
2437 (
byte >> 2) & 0x03, 2, 2);
2449 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2450 int v = bytestream2_get_byteu(&gb);
2458 for (
int n = nb_samples >> 1; n > 0; n--) {
2459 int v = bytestream2_get_byteu(&gb);
2466 int samples_per_block;
2470 samples_per_block = avctx->
extradata[0] / 16;
2471 blocks = nb_samples / avctx->
extradata[0];
2473 samples_per_block = nb_samples / 16;
2477 for (
int m = 0; m < blocks; m++) {
2479 int prev1 =
c->status[
channel].sample1;
2480 int prev2 =
c->status[
channel].sample2;
2484 for (
int i = 0;
i < samples_per_block;
i++) {
2485 int byte = bytestream2_get_byteu(&gb);
2486 int scale = 1 << (
byte >> 4);
2487 int index =
byte & 0xf;
2492 for (
int n = 0; n < 16; n++) {
2498 byte = bytestream2_get_byteu(&gb);
2502 sampledat = ((prev1 * factor1 + prev2 * factor2) >> 11) +
2510 c->status[
channel].sample1 = prev1;
2511 c->status[
channel].sample2 = prev2;
2516 #
if CONFIG_ADPCM_THP_DECODER || CONFIG_ADPCM_THP_LE_DECODER
2522 #define THP_GET16(g) \
2524 avctx->codec->id == AV_CODEC_ID_ADPCM_THP_LE ? \
2525 bytestream2_get_le16u(&(g)) : \
2526 bytestream2_get_be16u(&(g)), 16)
2537 for (
int n = 0; n < 16; n++)
2538 table[
i][n] = THP_GET16(tb);
2541 for (
int n = 0; n < 16; n++)
2542 table[
i][n] = THP_GET16(gb);
2544 if (!
c->has_status) {
2547 c->status[
i].sample1 = THP_GET16(gb);
2548 c->status[
i].sample2 = THP_GET16(gb);
2556 for (
int ch = 0; ch <
channels; ch++) {
2560 for (
int i = 0;
i < (nb_samples + 13) / 14;
i++) {
2561 int byte = bytestream2_get_byteu(&gb);
2562 int index = (
byte >> 4) & 7;
2563 unsigned int exp =
byte & 0x0F;
2568 for (
int n = 0; n < 14 && (
i * 14 + n < nb_samples); n++) {
2574 byte = bytestream2_get_byteu(&gb);
2578 sampledat = ((
c->status[ch].sample1 * factor1
2579 +
c->status[ch].sample2 * factor2) >> 11) + sampledat * (1 <<
exp);
2581 c->status[ch].sample2 =
c->status[ch].sample1;
2582 c->status[ch].sample1 = *
samples++;
2594 for (
int i = 0;
i < nb_samples / 28;
i++) {
2598 header = bytestream2_get_byteu(&gb);
2602 for (
int n = 0; n < 28; n++) {
2607 prev = (
c->status[
channel].sample1 * 0x3c);
2610 prev = (
c->status[
channel].sample1 * 0x73) - (
c->status[
channel].sample2 * 0x34);
2613 prev = (
c->status[
channel].sample1 * 0x62) - (
c->status[
channel].sample2 * 0x37);
2621 byte = bytestream2_get_byteu(&gb);
2627 sampledat = ((sampledat * (1 << 12)) >> (
header & 0xf)) * (1 << 6) + prev;
2630 c->status[
channel].sample1 = sampledat;
2639 int coefs[8*2*8] = { 0 };
2648 order = bytestream2_get_be16(&
cb);
2649 entries = bytestream2_get_be16(&
cb);
2650 if (
version != 1 || order != 2 || entries > 8)
2653 for (
int n = 0; n < order * entries * 8; n++)
2659 int16_t hist[8] = { 0 };
2660 const int order = 2;
2663 hist[6] = cs->sample2;
2664 hist[7] = cs->sample1;
2668 scale = (buf[0] >> 4) & 0xF;
2669 index = (buf[0] >> 0) & 0xF;
2673 for (
int i = 0, j = 0;
i < 16;
i += 2, j++) {
2674 int n0 = (buf[j+1] >> 4) & 0xF;
2675 int n1 = (buf[j+1] >> 0) & 0xF;
2686 for (
int j = 0; j < 2; j++) {
2687 int *sf_codes = &codes[j*8];
2688 int16_t *sf_out = &
out[j*8];
2690 for (
int i = 0;
i < 8;
i++) {
2693 for (
int o = 0; o < order; o++)
2694 delta += coefs[o*8 +
i] * hist[(8 - order) + o];
2696 for (
int k =
i-1; k > -1; k--) {
2697 for (
int o = 1; o < order; o++)
2698 delta += sf_codes[(
i-1) - k] * coefs[(o*8) + k];
2707 for (
int i = 8 - order;
i < 8;
i++)
2708 hist[
i] = sf_out[
i];
2713 cs->sample2 = hist[6];
2714 cs->sample1 = hist[7];
2728 for (
int i = 0;
i < nb_samples_per_block / 28;
i++) {
2731 filter = bytestream2_get_byteu(&gb);
2736 flag = bytestream2_get_byteu(&gb) & 0x7;
2739 for (
int n = 0; n < 28; n++) {
2745 byte = bytestream2_get_byteu(&gb);
2770 filter = bytestream2_get_byteu(&gb);
2776 for (
int n = 0; n < nb_samples_per_block; n++) {
2782 byte = bytestream2_get_byteu(&gb);
2805 for (
int ch = 0; ch <
channels; ch++) {
2806 c->status[ch].predictor =
sign_extend(bytestream2_get_le16(&gb), 16);
2807 c->status[ch].step =
sign_extend(bytestream2_get_le16(&gb), 16);
2811 for (
int i = 0;
i < nb_samples;
i++)
2812 for (
int ch = 0; ch <
channels; ch++)
2844 control = bytestream2_get_byteu(&gb);
2845 shift = (control >> 4) + 2;
2847 for (
int n = 0; n < 16; n++) {
2848 int sample = bytestream2_get_byteu(&gb);
2856 for (
int n = 0; n < nb_samples; n++) {
2857 for (
int ch = 0; ch <
channels; ch++) {
2858 int v = bytestream2_get_byteu(&gb);
2864 for (
int n = 0; n < nb_samples *
channels; n++) {
2865 int v = bytestream2_get_byteu(&gb);
2870 for (
int n = nb_samples / 2; n > 0; n--) {
2872 int v = bytestream2_get_byteu(&gb);
2880 av_unreachable(
"There are cases for all codec ids using adpcm_decode_frame");
2907 c->status[0].step =
c->status[1].step = 511;
2940 #define ADPCM_DECODER_0(id_, name_, long_name_)
2941 #define ADPCM_DECODER_1(id_, name_, long_name_) \
2942 const FFCodec ff_ ## name_ ## _decoder = { \
2944 CODEC_LONG_NAME(long_name_), \
2945 .p.type = AVMEDIA_TYPE_AUDIO, \
2947 .p.capabilities = AV_CODEC_CAP_DR1, \
2948 .priv_data_size = sizeof(ADPCMDecodeContext), \
2949 .init = adpcm_decode_init, \
2950 FF_CODEC_DECODE_CB(adpcm_decode_frame), \
2951 .flush = adpcm_flush, \
2953 #define ADPCM_DECODER_2(enabled, codec_id, name, long_name) \
2954 ADPCM_DECODER_ ## enabled(codec_id, name, long_name)
2955 #define ADPCM_DECODER_3(config, codec_id, name, long_name) \
2956 ADPCM_DECODER_2(config, codec_id, name, long_name)
2957 #define ADPCM_DECODER(codec, name, long_name) \
2958 ADPCM_DECODER_3(CONFIG_ ## codec ## _DECODER, AV_CODEC_ID_ ## codec, \
2963 ADPCM_DECODER(ADPCM_AFC, adpcm_afc, "ADPCM Nintendo Gamecube AFC")
2964 ADPCM_DECODER(ADPCM_AGM, adpcm_agm, "ADPCM AmuseGraphics Movie")
2966 ADPCM_DECODER(ADPCM_ARGO, adpcm_argo, "ADPCM Argonaut Games")
2968 ADPCM_DECODER(ADPCM_CT, adpcm_ct, "ADPCM Creative Technology")
2969 ADPCM_DECODER(ADPCM_DTK, adpcm_dtk, "ADPCM Nintendo Gamecube DTK")
2971 ADPCM_DECODER(ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa, "ADPCM Electronic Arts Maxis CDROM XA")
2975 ADPCM_DECODER(ADPCM_EA_XAS, adpcm_ea_xas, "ADPCM Electronic Arts XAS")
2976 ADPCM_DECODER(ADPCM_IMA_ACORN, adpcm_ima_acorn, "ADPCM IMA Acorn Replay")
2977 ADPCM_DECODER(ADPCM_IMA_AMV, adpcm_ima_amv, "ADPCM IMA AMV")
2978 ADPCM_DECODER(ADPCM_IMA_APC, adpcm_ima_apc, "ADPCM IMA CRYO APC")
2979 ADPCM_DECODER(ADPCM_IMA_APM, adpcm_ima_apm, "ADPCM IMA Ubisoft APM")
2980 ADPCM_DECODER(ADPCM_IMA_CUNNING, adpcm_ima_cunning, "ADPCM IMA Cunning Developments")
2981 ADPCM_DECODER(ADPCM_IMA_DAT4, adpcm_ima_dat4, "ADPCM IMA Eurocom DAT4")
2982 ADPCM_DECODER(ADPCM_IMA_DK3, adpcm_ima_dk3, "ADPCM IMA Duck DK3")
2983 ADPCM_DECODER(ADPCM_IMA_DK4, adpcm_ima_dk4, "ADPCM IMA Duck DK4")
2984 ADPCM_DECODER(ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS")
2985 ADPCM_DECODER(ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead, "ADPCM IMA Electronic Arts SEAD")
2986 ADPCM_DECODER(ADPCM_IMA_ESCAPE, adpcm_ima_escape, "ADPCM IMA Acorn Escape")
2987 ADPCM_DECODER(ADPCM_IMA_HVQM2, adpcm_ima_hvqm2, "ADPCM IMA HVQM2")
2988 ADPCM_DECODER(ADPCM_IMA_HVQM4, adpcm_ima_hvqm4, "ADPCM IMA HVQM4")
2989 ADPCM_DECODER(ADPCM_IMA_ISS, adpcm_ima_iss, "ADPCM IMA Funcom ISS")
2990 ADPCM_DECODER(ADPCM_IMA_MAGIX, adpcm_ima_magix, "ADPCM IMA Magix")
2991 ADPCM_DECODER(ADPCM_IMA_MOFLEX, adpcm_ima_moflex, "ADPCM IMA MobiClip MOFLEX")
2992 ADPCM_DECODER(ADPCM_IMA_MTF, adpcm_ima_mtf, "ADPCM IMA Capcom'
s MT Framework")
2993 ADPCM_DECODER(ADPCM_IMA_OKI, adpcm_ima_oki, "ADPCM IMA Dialogic OKI")
2994 ADPCM_DECODER(ADPCM_IMA_PDA, adpcm_ima_pda, "ADPCM IMA PlayDate")
2995 ADPCM_DECODER(ADPCM_IMA_QT, adpcm_ima_qt, "ADPCM IMA QuickTime")
2996 ADPCM_DECODER(ADPCM_IMA_RAD, adpcm_ima_rad, "ADPCM IMA Radical")
2997 ADPCM_DECODER(ADPCM_IMA_SSI, adpcm_ima_ssi, "ADPCM IMA Simon & Schuster Interactive")
2998 ADPCM_DECODER(ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg, "ADPCM IMA Loki SDL MJPEG")
2999 ADPCM_DECODER(ADPCM_IMA_ALP, adpcm_ima_alp, "ADPCM IMA High Voltage Software ALP")
3000 ADPCM_DECODER(ADPCM_IMA_WAV, adpcm_ima_wav, "ADPCM IMA WAV")
3001 ADPCM_DECODER(ADPCM_IMA_WS, adpcm_ima_ws, "ADPCM IMA Westwood")
3002 ADPCM_DECODER(ADPCM_IMA_XBOX, adpcm_ima_xbox, "ADPCM IMA Xbox")
3005 ADPCM_DECODER(ADPCM_N64, adpcm_n64, "ADPCM Silicon Graphics N64")
3009 ADPCM_DECODER(ADPCM_SBPRO_2, adpcm_sbpro_2, "ADPCM Sound Blaster Pro 2-
bit")
3010 ADPCM_DECODER(ADPCM_SBPRO_3, adpcm_sbpro_3, "ADPCM Sound Blaster Pro 2.6-
bit")
3011 ADPCM_DECODER(ADPCM_SBPRO_4, adpcm_sbpro_4, "ADPCM Sound Blaster Pro 4-
bit")
3012 ADPCM_DECODER(ADPCM_SWF, adpcm_swf, "ADPCM Shockwave Flash")
3013 ADPCM_DECODER(ADPCM_THP_LE, adpcm_thp_le, "ADPCM Nintendo THP (little-endian)")