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;
1180 if (buf_size < 76 * ch)
1185 if (buf_size < 34 * ch)
1190 nb_samples = (buf_size / 9) * 16;
1206 nb_samples = buf_size * 2 / ch;
1224 if (header_size > 0)
1225 return (buf_size - header_size) * 2 / ch;
1231 has_coded_samples = 1;
1232 *coded_samples = bytestream2_get_le32u(gb);
1233 nb_samples =
FFMIN((buf_size - 8) * 2, *coded_samples);
1239 has_coded_samples = 1;
1240 *coded_samples = bytestream2_get_le32(gb);
1241 *coded_samples -= *coded_samples % 28;
1242 nb_samples = (buf_size - 12) / (ch == 2 ? 30 : 15) * 28;
1245 nb_samples = ((bytestream2_peek_be64(gb) >> 16) & 0xFFFF);
1249 int frame_format = bytestream2_get_be16(gb);
1252 if (frame_format == 1)
1254 if (frame_format == 3)
1257 nb_samples = (buf_size -
skip) * 2 / ch;
1262 has_coded_samples = 1;
1263 *coded_samples = bytestream2_get_le32(gb);
1264 nb_samples = (buf_size - (4 + 8 * ch)) * 2 / ch;
1267 nb_samples = (buf_size - ch) / ch * 2;
1274 has_coded_samples = 1;
1277 header_size = 4 + 9 * ch;
1278 *coded_samples = bytestream2_get_le32(gb);
1281 header_size = 4 + 5 * ch;
1282 *coded_samples = bytestream2_get_le32(gb);
1285 header_size = 4 + 5 * ch;
1286 *coded_samples = bytestream2_get_be32(gb);
1289 *coded_samples -= *coded_samples % 28;
1290 nb_samples = (buf_size - header_size) * 2 / ch;
1291 nb_samples -= nb_samples % 28;
1292 *approx_nb_samples = 1;
1297 nb_samples = ((buf_size - 16) * 2 / 3 * 4) / ch;
1302 if (buf_size < 4 * ch)
1304 nb_samples = 1 + (buf_size - 4 * ch) * 2 / ch;
1309 nb_samples = (buf_size - 4 * ch) * 2 / ch;
1314 nb_samples = (buf_size - 4 * ch) * 2 / ch;
1321 if (buf_size < 4 * ch)
1323 nb_samples = 1 + (buf_size - 4 * ch) / (bsize * ch) * bsamples;
1325 CASE(ADPCM_IMA_XBOX,
1330 if (buf_size < 4 * ch)
1332 nb_samples = (buf_size - 4 * ch) / (bsize * ch) * bsamples + 1;
1337 nb_samples = (buf_size - 6 * ch) * 2 / ch;
1342 nb_samples = (buf_size - 16 * (ch / 2)) * 2 / ch;
1348 int samples_per_byte;
1354 if (!
s->status[0].step_index) {
1360 nb_samples += buf_size * samples_per_byte / ch;
1365 int buf_bits = buf_size * 8 - 2;
1366 int nbits = (bytestream2_get_byte(gb) >> 6) + 2;
1367 int block_hdr_size = 22 * ch;
1368 int block_size = block_hdr_size + nbits * ch * 4095;
1369 int nblocks = buf_bits / block_size;
1370 int bits_left = buf_bits - nblocks * block_size;
1371 nb_samples = nblocks * 4096;
1373 nb_samples += 1 + (
bits_left - block_hdr_size) / (nbits * ch);
1379 nb_samples = buf_size * 14 / (8 * ch);
1382 has_coded_samples = 1;
1385 bytestream2_get_le32(gb) :
1386 bytestream2_get_be32(gb);
1387 buf_size -= 8 + 36 * ch;
1389 nb_samples = buf_size / 8 * 14;
1390 if (buf_size % 8 > 1)
1391 nb_samples += (buf_size % 8 - 1) * 2;
1392 *approx_nb_samples = 1;
1395 nb_samples = buf_size / (9 * ch) * 16;
1398 nb_samples = (buf_size / 128) * 224 / ch;
1401 nb_samples = buf_size / (21 * ch) * 32;
1405 nb_samples = buf_size / (16 * ch) * 28;
1408 nb_samples = ((buf_size - 1) / ch) * 2;
1415 nb_samples = buf_size / ch;
1425 if (has_coded_samples && (*coded_samples <= 0 || *coded_samples > nb_samples))
1432 int *got_frame_ptr,
AVPacket *avpkt)
1434 const uint8_t *buf = avpkt->
data;
1435 int buf_size = avpkt->
size;
1439 int16_t **samples_p;
1441 int nb_samples, coded_samples, approx_nb_samples,
ret;
1445 nb_samples =
get_nb_samples(avctx, &gb, buf_size, &coded_samples, &approx_nb_samples);
1446 if (nb_samples <= 0) {
1452 frame->nb_samples = nb_samples;
1456 samples_p = (int16_t **)
frame->extended_data;
1460 if (coded_samples) {
1461 if (!approx_nb_samples && coded_samples != nb_samples)
1463 frame->nb_samples = nb_samples = coded_samples;
1503 for (
int m = 0; m < 64; m += 2) {
1504 int byte = bytestream2_get_byteu(&gb);
1530 for (
int n = 0; n < (nb_samples - 1) / samples_per_block; n++) {
1533 samples = &samples_p[
i][1 + n * samples_per_block];
1534 for (
int j = 0; j < block_size; j++) {
1536 (j % 4) + (j / 4) * (
channels * 4) +
i * 4];
1541 for (
int m = 0; m < samples_per_block; m++) {
1549 for (
int n = 0; n < (nb_samples - 1) / 8; n++) {
1552 samples = &samples_p[
i][1 + n * 8];
1553 for (
int m = 0; m < 8; m += 2) {
1554 int v = bytestream2_get_byteu(&gb);
1562 CASE(ADPCM_IMA_XBOX,
1575 for (
int n = 0; n < (nb_samples-1) / 8; n++) {
1578 samples = &samples_p[
i][1 + n * 8];
1579 for (
int m = 0; m < 8; m += 2) {
1580 int v = bytestream2_get_byteu(&gb);
1586 frame->nb_samples--;
1590 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1593 c->status[
i].step_index =
sign_extend(bytestream2_get_le16u(&gb), 16);
1594 if (
c->status[
i].step_index > 88
u) {
1596 i,
c->status[
i].step_index);
1604 for (
int n = nb_samples >> 1; n > 0; n--) {
1605 int v = bytestream2_get_byteu(&gb);
1613 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1615 c->status[
i].step =
sign_extend(bytestream2_get_le16u(&gb), 16);
1617 for (
int n = 0; n < nb_samples >> (1 - st); n++) {
1618 int v = bytestream2_get_byteu(&gb);
1624 int block_predictor;
1629 block_predictor = bytestream2_get_byteu(&gb);
1630 if (block_predictor > 6) {
1642 for (
int n = (nb_samples - 2) >> 1; n > 0; n--) {
1643 int byte = bytestream2_get_byteu(&gb);
1649 block_predictor = bytestream2_get_byteu(&gb);
1650 if (block_predictor > 6) {
1658 block_predictor = bytestream2_get_byteu(&gb);
1659 if (block_predictor > 6) {
1667 c->status[0].idelta =
sign_extend(bytestream2_get_le16u(&gb), 16);
1669 c->status[1].idelta =
sign_extend(bytestream2_get_le16u(&gb), 16);
1672 c->status[0].sample1 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1673 if (st)
c->status[1].sample1 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1674 c->status[0].sample2 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1675 if (st)
c->status[1].sample2 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1678 if (st) *
samples++ =
c->status[1].sample2;
1680 if (st) *
samples++ =
c->status[1].sample1;
1681 for (
int n = (nb_samples - 2) >> (1 - st); n > 0; n--) {
1682 int byte = bytestream2_get_byteu(&gb);
1691 c->status[
channel ].step = bytestream2_get_le16u(&gb) & 0x1f;
1692 c->status[
channel + 1].step = bytestream2_get_le16u(&gb) & 0x1f;
1697 for (
int n = 0; n < nb_samples; n += 2) {
1698 int v = bytestream2_get_byteu(&gb);
1702 for (
int n = 0; n < nb_samples; n += 2) {
1703 int v = bytestream2_get_byteu(&gb);
1720 for (
int n = (nb_samples - 1) >> (1 - st); n > 0; n--) {
1721 int v = bytestream2_get_byteu(&gb);
1729 if (decode_top_nibble_next) { \
1730 nibble = last_byte >> 4; \
1731 decode_top_nibble_next = 0; \
1733 last_byte = bytestream2_get_byteu(&gb); \
1734 nibble = last_byte & 0x0F; \
1735 decode_top_nibble_next = 1; \
1740 int decode_top_nibble_next = 0;
1745 c->status[0].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1746 c->status[1].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1747 c->status[0].step_index = bytestream2_get_byteu(&gb);
1748 c->status[1].step_index = bytestream2_get_byteu(&gb);
1749 if (
c->status[0].step_index > 88
u ||
c->status[1].step_index > 88
u){
1751 c->status[0].step_index,
c->status[1].step_index);
1755 diff_channel =
c->status[1].predictor;
1757 while (
samples < samples_end) {
1771 diff_channel = (diff_channel +
c->status[1].predictor) / 2;
1772 *
samples++ =
c->status[0].predictor +
c->status[1].predictor;
1773 *
samples++ =
c->status[0].predictor -
c->status[1].predictor;
1780 diff_channel = (diff_channel +
c->status[1].predictor) / 2;
1781 *
samples++ =
c->status[0].predictor +
c->status[1].predictor;
1782 *
samples++ =
c->status[0].predictor -
c->status[1].predictor;
1788 CASE(ADPCM_IMA_MAGIX,
1800 for (
int m = 0; m < avctx->
block_align-8; m += 8) {
1801 uint32_t v0 = bytestream2_get_le32u(&gb);
1802 uint32_t v1 = bytestream2_get_le32u(&gb);
1804 for (
int n = 8; n > 0; n--, v0 >>= 4, v1 >>= 4,
samples += 2) {
1822 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1824 int v = bytestream2_get_byteu(&gb);
1837 CASE(ADPCM_IMA_MOFLEX,
1849 for (
int subframe = 0; subframe < nb_samples / 256; subframe++) {
1852 for (
int n = 0; n < 256; n += 2) {
1853 int v = bytestream2_get_byteu(&gb);
1860 CASE(ADPCM_IMA_DAT4,
1865 for (
int n = 0; n < nb_samples; n += 2) {
1866 int v = bytestream2_get_byteu(&gb);
1873 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1874 int v = bytestream2_get_byteu(&gb);
1879 CASE(ADPCM_IMA_HVQM2,
1880 int format = bytestream2_get_be16(&gb);
1885 CASE(ADPCM_IMA_HVQM4,
1886 int format = bytestream2_get_be16(&gb);
1892 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1893 int v = bytestream2_get_byteu(&gb);
1899 for (
int n = nb_samples / 2; n > 0; n--) {
1901 int v = bytestream2_get_byteu(&gb);
1909 for (
int n = nb_samples / 2; n > 0; n--) {
1911 int v = bytestream2_get_byteu(&gb);
1918 CASE(ADPCM_IMA_CUNNING,
1920 int16_t *smp = samples_p[
channel];
1921 for (
int n = 0; n < nb_samples / 2; n++) {
1922 int v = bytestream2_get_byteu(&gb);
1929 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1930 int v = bytestream2_get_byteu(&gb);
1946 for (
int n = 0; n < nb_samples / 2; n++) {
1949 byte[0] = bytestream2_get_byteu(&gb);
1951 byte[1] = bytestream2_get_byteu(&gb);
1961 if (
c->vqa_version == 3) {
1963 int16_t *smp = samples_p[
channel];
1965 for (
int n = nb_samples / 2; n > 0; n--) {
1966 int v = bytestream2_get_byteu(&gb);
1972 for (
int n = nb_samples / 2; n > 0; n--) {
1974 int v = bytestream2_get_byteu(&gb);
1984 int bytes_remaining,
block = 0;
1991 history[1] =
sign_extend(bytestream2_get_le16(&gb), 16);
1992 history[0] =
sign_extend(bytestream2_get_le16(&gb), 16);
1993 scale = bytestream2_get_le16(&gb);
1995 out[0] = history[1];
1996 out[1] = history[0];
1998 for (
int n = 0; n < 15; n++) {
1999 unsigned byte = bytestream2_get_byte(&gb);
2005 out[2+n*2] = nibble[0]*
scale + ((history[0]*3667 - history[1]*1642) >> 11);
2006 history[1] = history[0];
2007 history[0] =
out[2+n*2];
2009 out[2+n*2+1] = nibble[1]*
scale + ((history[0]*3667 - history[1]*1642) >> 11);
2010 history[1] = history[0];
2011 history[0] =
out[2+n*2+1];
2018 if (bytes_remaining > 0) {
2023 int16_t *out0 = samples_p[0];
2024 int16_t *out1 = samples_p[1];
2025 int samples_per_block = 28 * (3 -
channels) * 4;
2026 int sample_offset = 0;
2027 int bytes_remaining;
2030 &
c->status[0], &
c->status[1],
2034 sample_offset += samples_per_block;
2039 if (bytes_remaining > 0) {
2043 CASE(ADPCM_IMA_ESCAPE,
2044 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2045 int byte = bytestream2_get_byteu(&gb);
2050 CASE(ADPCM_IMA_EA_EACS,
2051 for (
int i = 0;
i <= st;
i++) {
2052 c->status[
i].step_index = bytestream2_get_le32u(&gb);
2053 if (
c->status[
i].step_index > 88
u) {
2055 i,
c->status[
i].step_index);
2059 for (
int i = 0;
i <= st;
i++) {
2060 c->status[
i].predictor = bytestream2_get_le32u(&gb);
2065 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2066 int byte = bytestream2_get_byteu(&gb);
2071 CASE(ADPCM_IMA_EA_SEAD,
2072 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2073 int byte = bytestream2_get_byteu(&gb);
2079 int previous_left_sample, previous_right_sample;
2080 int current_left_sample, current_right_sample;
2081 int next_left_sample, next_right_sample;
2082 int coeff1l, coeff2l, coeff1r, coeff2r;
2083 int shift_left, shift_right;
2091 current_left_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2092 previous_left_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2093 current_right_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2094 previous_right_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2096 for (
int count1 = 0; count1 < nb_samples / 28; count1++) {
2097 int byte = bytestream2_get_byteu(&gb);
2104 byte = bytestream2_get_byteu(&gb);
2105 shift_left = 20 - (
byte >> 4);
2106 shift_right = 20 - (
byte & 0x0F);
2109 shift_left = 20 - (
byte & 0x0F);
2112 for (
int count2 = 0; count2 < (
channels == 2 ? 28 : 14); count2++) {
2113 byte = bytestream2_get_byteu(&gb);
2114 next_left_sample =
sign_extend(
byte >> 4, 4) * (1 << shift_left);
2116 next_left_sample = (next_left_sample +
2117 (current_left_sample * coeff1l) +
2118 (previous_left_sample * coeff2l) + 0x80) >> 8;
2120 previous_left_sample = current_left_sample;
2122 *
samples++ = current_left_sample;
2125 next_right_sample =
sign_extend(
byte, 4) * (1 << shift_right);
2127 next_right_sample = (next_right_sample +
2128 (current_right_sample * coeff1r) +
2129 (previous_right_sample * coeff2r) + 0x80) >> 8;
2131 previous_right_sample = current_right_sample;
2133 *
samples++ = current_right_sample;
2135 next_left_sample =
sign_extend(
byte, 4) * (1 << shift_left);
2137 next_left_sample = (next_left_sample +
2138 (current_left_sample * coeff1l) +
2139 (previous_left_sample * coeff2l) + 0x80) >> 8;
2141 previous_left_sample = current_left_sample;
2144 *
samples++ = current_left_sample;
2150 CASE(ADPCM_EA_MAXIS_XA,
2154 int byte = bytestream2_get_byteu(&gb);
2155 for (
int i = 0;
i < 2;
i++)
2159 for (
int count1 = 0; count1 < nb_samples / 2; count1++) {
2162 byte[0] = bytestream2_get_byteu(&gb);
2163 if (st)
byte[1] = bytestream2_get_byteu(&gb);
2164 for (
int i = 4;
i >= 0;
i-=4) {
2178 #
if CONFIG_ADPCM_EA_R1_DECODER || CONFIG_ADPCM_EA_R2_DECODER || CONFIG_ADPCM_EA_R3_DECODER
2187 int previous_sample, current_sample, next_sample;
2196 bytestream2_get_le32(&gb)) +
2203 samplesC = samples_p[
channel];
2206 current_sample =
sign_extend(bytestream2_get_le16(&gb), 16);
2207 previous_sample =
sign_extend(bytestream2_get_le16(&gb), 16);
2209 current_sample =
c->status[
channel].predictor;
2210 previous_sample =
c->status[
channel].prev_sample;
2213 for (count1 = 0; count1 < nb_samples / 28; count1++) {
2214 int byte = bytestream2_get_byte(&gb);
2216 current_sample =
sign_extend(bytestream2_get_be16(&gb), 16);
2217 previous_sample =
sign_extend(bytestream2_get_be16(&gb), 16);
2219 for (
int count2 = 0; count2 < 28; count2++)
2220 *samplesC++ =
sign_extend(bytestream2_get_be16(&gb), 16);
2224 shift = 20 - (
byte & 0x0F);
2226 for (
int count2 = 0; count2 < 28; count2++) {
2230 byte = bytestream2_get_byte(&gb);
2234 next_sample += (current_sample * coeff1) +
2235 (previous_sample * coeff2);
2238 previous_sample = current_sample;
2239 current_sample = next_sample;
2240 *samplesC++ = current_sample;
2246 }
else if (count != count1) {
2248 count =
FFMAX(count, count1);
2252 c->status[
channel].predictor = current_sample;
2253 c->status[
channel].prev_sample = previous_sample;
2257 frame->nb_samples = count * 28;
2266 for (
int n = 0; n < 4; n++,
s += 32) {
2268 for (
int i = 0;
i < 2;
i++)
2277 for (
int m = 2; m < 32; m += 2) {
2279 for (
int n = 0; n < 4; n++,
s += 32) {
2281 int byte = bytestream2_get_byteu(&gb);
2294 CASE(ADPCM_IMA_ACORN,
2298 cs->
step_index = bytestream2_get_le16u(&gb) & 0xFF;
2305 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2306 int byte = bytestream2_get_byteu(&gb);
2324 c->status[0].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
2325 c->status[0].step_index = bytestream2_get_byteu(&gb);
2327 if (
c->status[0].step_index > 88
u) {
2329 c->status[0].step_index);
2333 for (
int n = nb_samples >> 1; n > 0; n--) {
2334 int v = bytestream2_get_byteu(&gb);
2340 if (nb_samples & 1) {
2341 int v = bytestream2_get_byteu(&gb);
2353 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
2354 c->status[
i].step_index = bytestream2_get_byteu(&gb);
2356 if (
c->status[
i].step_index > 88
u) {
2358 c->status[
i].step_index);
2363 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2364 int v = bytestream2_get_byteu(&gb);
2370 CASE(ADPCM_IMA_SMJPEG,
2372 c->status[
i].predictor =
sign_extend(bytestream2_get_be16u(&gb), 16);
2373 c->status[
i].step_index = bytestream2_get_byteu(&gb);
2375 if (
c->status[
i].step_index > 88
u) {
2377 c->status[
i].step_index);
2382 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2383 int v = bytestream2_get_byteu(&gb);
2390 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2391 int v = bytestream2_get_byteu(&gb);
2396 #
if CONFIG_ADPCM_SBPRO_2_DECODER || CONFIG_ADPCM_SBPRO_3_DECODER || \
2397 CONFIG_ADPCM_SBPRO_4_DECODER
2401 if (!
c->status[0].step_index) {
2403 *
samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2405 *
samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2406 c->status[0].step_index = 1;
2410 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2411 int byte = bytestream2_get_byteu(&gb);
2418 for (
int n = (nb_samples<<st) / 3; n > 0; n--) {
2419 int byte = bytestream2_get_byteu(&gb);
2423 (
byte >> 2) & 0x07, 3, 0);
2428 for (
int n = nb_samples >> (2 - st); n > 0; n--) {
2429 int byte = bytestream2_get_byteu(&gb);
2433 (
byte >> 4) & 0x03, 2, 2);
2435 (
byte >> 2) & 0x03, 2, 2);
2447 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2448 int v = bytestream2_get_byteu(&gb);
2456 for (
int n = nb_samples >> 1; n > 0; n--) {
2457 int v = bytestream2_get_byteu(&gb);
2464 int samples_per_block;
2468 samples_per_block = avctx->
extradata[0] / 16;
2469 blocks = nb_samples / avctx->
extradata[0];
2471 samples_per_block = nb_samples / 16;
2475 for (
int m = 0; m < blocks; m++) {
2477 int prev1 =
c->status[
channel].sample1;
2478 int prev2 =
c->status[
channel].sample2;
2482 for (
int i = 0;
i < samples_per_block;
i++) {
2483 int byte = bytestream2_get_byteu(&gb);
2484 int scale = 1 << (
byte >> 4);
2485 int index =
byte & 0xf;
2490 for (
int n = 0; n < 16; n++) {
2496 byte = bytestream2_get_byteu(&gb);
2500 sampledat = ((prev1 * factor1 + prev2 * factor2) >> 11) +
2508 c->status[
channel].sample1 = prev1;
2509 c->status[
channel].sample2 = prev2;
2514 #
if CONFIG_ADPCM_THP_DECODER || CONFIG_ADPCM_THP_LE_DECODER
2520 #define THP_GET16(g) \
2522 avctx->codec->id == AV_CODEC_ID_ADPCM_THP_LE ? \
2523 bytestream2_get_le16u(&(g)) : \
2524 bytestream2_get_be16u(&(g)), 16)
2535 for (
int n = 0; n < 16; n++)
2536 table[
i][n] = THP_GET16(tb);
2539 for (
int n = 0; n < 16; n++)
2540 table[
i][n] = THP_GET16(gb);
2542 if (!
c->has_status) {
2545 c->status[
i].sample1 = THP_GET16(gb);
2546 c->status[
i].sample2 = THP_GET16(gb);
2554 for (
int ch = 0; ch <
channels; ch++) {
2558 for (
int i = 0;
i < (nb_samples + 13) / 14;
i++) {
2559 int byte = bytestream2_get_byteu(&gb);
2560 int index = (
byte >> 4) & 7;
2561 unsigned int exp =
byte & 0x0F;
2566 for (
int n = 0; n < 14 && (
i * 14 + n < nb_samples); n++) {
2572 byte = bytestream2_get_byteu(&gb);
2576 sampledat = ((
c->status[ch].sample1 * factor1
2577 +
c->status[ch].sample2 * factor2) >> 11) + sampledat * (1 <<
exp);
2579 c->status[ch].sample2 =
c->status[ch].sample1;
2580 c->status[ch].sample1 = *
samples++;
2592 for (
int i = 0;
i < nb_samples / 28;
i++) {
2596 header = bytestream2_get_byteu(&gb);
2600 for (
int n = 0; n < 28; n++) {
2605 prev = (
c->status[
channel].sample1 * 0x3c);
2608 prev = (
c->status[
channel].sample1 * 0x73) - (
c->status[
channel].sample2 * 0x34);
2611 prev = (
c->status[
channel].sample1 * 0x62) - (
c->status[
channel].sample2 * 0x37);
2619 byte = bytestream2_get_byteu(&gb);
2625 sampledat = ((sampledat * (1 << 12)) >> (
header & 0xf)) * (1 << 6) + prev;
2628 c->status[
channel].sample1 = sampledat;
2637 int coefs[8*2*8] = { 0 };
2646 order = bytestream2_get_be16(&
cb);
2647 entries = bytestream2_get_be16(&
cb);
2648 if (
version != 1 || order != 2 || entries > 8)
2651 for (
int n = 0; n < order * entries * 8; n++)
2657 int16_t hist[8] = { 0 };
2658 const int order = 2;
2661 hist[6] = cs->sample2;
2662 hist[7] = cs->sample1;
2666 scale = (buf[0] >> 4) & 0xF;
2667 index = (buf[0] >> 0) & 0xF;
2671 for (
int i = 0, j = 0;
i < 16;
i += 2, j++) {
2672 int n0 = (buf[j+1] >> 4) & 0xF;
2673 int n1 = (buf[j+1] >> 0) & 0xF;
2684 for (
int j = 0; j < 2; j++) {
2685 int *sf_codes = &codes[j*8];
2686 int16_t *sf_out = &
out[j*8];
2688 for (
int i = 0;
i < 8;
i++) {
2691 for (
int o = 0; o < order; o++)
2692 delta += coefs[o*8 +
i] * hist[(8 - order) + o];
2694 for (
int k =
i-1; k > -1; k--) {
2695 for (
int o = 1; o < order; o++)
2696 delta += sf_codes[(
i-1) - k] * coefs[(o*8) + k];
2705 for (
int i = 8 - order;
i < 8;
i++)
2706 hist[
i] = sf_out[
i];
2711 cs->sample2 = hist[6];
2712 cs->sample1 = hist[7];
2726 for (
int i = 0;
i < nb_samples_per_block / 28;
i++) {
2729 filter = bytestream2_get_byteu(&gb);
2734 flag = bytestream2_get_byteu(&gb) & 0x7;
2737 for (
int n = 0; n < 28; n++) {
2743 byte = bytestream2_get_byteu(&gb);
2768 filter = bytestream2_get_byteu(&gb);
2774 for (
int n = 0; n < nb_samples_per_block; n++) {
2780 byte = bytestream2_get_byteu(&gb);
2803 for (
int ch = 0; ch <
channels; ch++) {
2804 c->status[ch].predictor =
sign_extend(bytestream2_get_le16(&gb), 16);
2805 c->status[ch].step =
sign_extend(bytestream2_get_le16(&gb), 16);
2809 for (
int i = 0;
i < nb_samples;
i++)
2810 for (
int ch = 0; ch <
channels; ch++)
2842 control = bytestream2_get_byteu(&gb);
2843 shift = (control >> 4) + 2;
2845 for (
int n = 0; n < 16; n++) {
2846 int sample = bytestream2_get_byteu(&gb);
2854 for (
int n = 0; n < nb_samples; n++) {
2855 for (
int ch = 0; ch <
channels; ch++) {
2856 int v = bytestream2_get_byteu(&gb);
2862 for (
int n = 0; n < nb_samples *
channels; n++) {
2863 int v = bytestream2_get_byteu(&gb);
2868 for (
int n = nb_samples / 2; n > 0; n--) {
2870 int v = bytestream2_get_byteu(&gb);
2878 av_unreachable(
"There are cases for all codec ids using adpcm_decode_frame");
2905 c->status[0].step =
c->status[1].step = 511;
2946 #define ADPCM_DECODER_0(id_, sample_fmts_, name_, long_name_)
2947 #define ADPCM_DECODER_1(id_, sample_fmts_, name_, long_name_) \
2948 const FFCodec ff_ ## name_ ## _decoder = { \
2950 CODEC_LONG_NAME(long_name_), \
2951 .p.type = AVMEDIA_TYPE_AUDIO, \
2953 .p.capabilities = AV_CODEC_CAP_DR1, \
2954 CODEC_SAMPLEFMTS_ARRAY(sample_fmts_), \
2955 .priv_data_size = sizeof(ADPCMDecodeContext), \
2956 .init = adpcm_decode_init, \
2957 FF_CODEC_DECODE_CB(adpcm_decode_frame), \
2958 .flush = adpcm_flush, \
2960 #define ADPCM_DECODER_2(enabled, codec_id, name, sample_fmts, long_name) \
2961 ADPCM_DECODER_ ## enabled(codec_id, name, sample_fmts, long_name)
2962 #define ADPCM_DECODER_3(config, codec_id, name, sample_fmts, long_name) \
2963 ADPCM_DECODER_2(config, codec_id, name, sample_fmts, long_name)
2964 #define ADPCM_DECODER(codec, name, sample_fmts, long_name) \
2965 ADPCM_DECODER_3(CONFIG_ ## codec ## _DECODER, AV_CODEC_ID_ ## codec, \
2966 name, sample_fmts, long_name)