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;
1225 if (header_size > 0)
1226 return (buf_size - header_size) * 2 / ch;
1232 has_coded_samples = 1;
1233 *coded_samples = bytestream2_get_le32u(gb);
1234 nb_samples =
FFMIN((buf_size - 8) * 2, *coded_samples);
1240 has_coded_samples = 1;
1241 *coded_samples = bytestream2_get_le32(gb);
1242 *coded_samples -= *coded_samples % 28;
1243 nb_samples = (buf_size - 12) / (ch == 2 ? 30 : 15) * 28;
1246 nb_samples = ((bytestream2_peek_be64(gb) >> 16) & 0xFFFF);
1250 int frame_format = bytestream2_get_be16(gb);
1253 if (frame_format == 1)
1255 if (frame_format == 3)
1258 nb_samples = (buf_size -
skip) * 2 / ch;
1263 has_coded_samples = 1;
1264 *coded_samples = bytestream2_get_le32(gb);
1265 nb_samples = (buf_size - (4 + 8 * ch)) * 2 / ch;
1268 nb_samples = (buf_size - ch) / ch * 2;
1275 has_coded_samples = 1;
1278 header_size = 4 + 9 * ch;
1279 *coded_samples = bytestream2_get_le32(gb);
1282 header_size = 4 + 5 * ch;
1283 *coded_samples = bytestream2_get_le32(gb);
1286 header_size = 4 + 5 * ch;
1287 *coded_samples = bytestream2_get_be32(gb);
1290 *coded_samples -= *coded_samples % 28;
1291 nb_samples = (buf_size - header_size) * 2 / ch;
1292 nb_samples -= nb_samples % 28;
1293 *approx_nb_samples = 1;
1298 nb_samples = ((buf_size - 16) * 2 / 3 * 4) / ch;
1303 if (buf_size < 4 * ch)
1305 nb_samples = 1 + (buf_size - 4 * ch) * 2 / ch;
1310 nb_samples = (buf_size - 4 * ch) * 2 / ch;
1315 nb_samples = (buf_size - 4 * ch) * 2 / ch;
1320 nb_samples = (buf_size - 4 * ch) * 2 / ch;
1331 if (buf_size < 4 * ch)
1333 nb_samples = 1 + (buf_size - 4 * ch) / (bsize * ch) * bsamples;
1335 CASE(ADPCM_IMA_XBOX,
1340 if (buf_size < 4 * ch)
1342 nb_samples = (buf_size - 4 * ch) / (bsize * ch) * bsamples + 1;
1347 nb_samples = (buf_size - 6 * ch) * 2 / ch;
1352 nb_samples = (buf_size - 16 * (ch / 2)) * 2 / ch;
1358 int samples_per_byte;
1364 if (!
s->status[0].step_index) {
1370 nb_samples += buf_size * samples_per_byte / ch;
1375 int buf_bits = buf_size * 8 - 2;
1376 int nbits = (bytestream2_get_byte(gb) >> 6) + 2;
1377 int block_hdr_size = 22 * ch;
1378 int block_size = block_hdr_size + nbits * ch * 4095;
1379 int nblocks = buf_bits / block_size;
1380 int bits_left = buf_bits - nblocks * block_size;
1381 nb_samples = nblocks * 4096;
1383 nb_samples += 1 + (
bits_left - block_hdr_size) / (nbits * ch);
1389 nb_samples = buf_size * 14 / (8 * ch);
1392 has_coded_samples = 1;
1395 bytestream2_get_le32(gb) :
1396 bytestream2_get_be32(gb);
1397 buf_size -= 8 + 36 * ch;
1399 nb_samples = buf_size / 8 * 14;
1400 if (buf_size % 8 > 1)
1401 nb_samples += (buf_size % 8 - 1) * 2;
1402 *approx_nb_samples = 1;
1405 nb_samples = buf_size / (9 * ch) * 16;
1408 nb_samples = (buf_size / 128) * 224 / ch;
1411 nb_samples = buf_size / (21 * ch) * 32;
1415 nb_samples = buf_size / (16 * ch) * 28;
1418 nb_samples = ((buf_size - 1) / ch) * 2;
1425 nb_samples = buf_size / ch;
1435 if (has_coded_samples && (*coded_samples <= 0 || *coded_samples > nb_samples))
1442 int *got_frame_ptr,
AVPacket *avpkt)
1444 const uint8_t *buf = avpkt->
data;
1445 int buf_size = avpkt->
size;
1449 int16_t **samples_p;
1451 int nb_samples, coded_samples, approx_nb_samples,
ret;
1455 nb_samples =
get_nb_samples(avctx, &gb, buf_size, &coded_samples, &approx_nb_samples);
1456 if (nb_samples <= 0) {
1462 frame->nb_samples = nb_samples;
1466 samples_p = (int16_t **)
frame->extended_data;
1470 if (coded_samples) {
1471 if (!approx_nb_samples && coded_samples != nb_samples)
1473 frame->nb_samples = nb_samples = coded_samples;
1513 for (
int m = 0; m < 64; m += 2) {
1514 int byte = bytestream2_get_byteu(&gb);
1540 for (
int n = 0; n < (nb_samples - 1) / samples_per_block; n++) {
1543 samples = &samples_p[
i][1 + n * samples_per_block];
1544 for (
int j = 0; j < block_size; j++) {
1546 (j % 4) + (j / 4) * (
channels * 4) +
i * 4];
1551 for (
int m = 0; m < samples_per_block; m++) {
1559 for (
int n = 0; n < (nb_samples - 1) / 8; n++) {
1562 samples = &samples_p[
i][1 + n * 8];
1563 for (
int m = 0; m < 8; m += 2) {
1564 int v = bytestream2_get_byteu(&gb);
1572 CASE(ADPCM_IMA_XBOX,
1585 for (
int n = 0; n < (nb_samples-1) / 8; n++) {
1588 samples = &samples_p[
i][1 + n * 8];
1589 for (
int m = 0; m < 8; m += 2) {
1590 int v = bytestream2_get_byteu(&gb);
1596 frame->nb_samples--;
1600 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1603 c->status[
i].step_index =
sign_extend(bytestream2_get_le16u(&gb), 16);
1604 if (
c->status[
i].step_index > 88
u) {
1606 i,
c->status[
i].step_index);
1614 for (
int n = nb_samples >> 1; n > 0; n--) {
1615 int v = bytestream2_get_byteu(&gb);
1623 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1625 c->status[
i].step =
sign_extend(bytestream2_get_le16u(&gb), 16);
1627 for (
int n = 0; n < nb_samples >> (1 - st); n++) {
1628 int v = bytestream2_get_byteu(&gb);
1634 int block_predictor;
1639 block_predictor = bytestream2_get_byteu(&gb);
1640 if (block_predictor > 6) {
1652 for (
int n = (nb_samples - 2) >> 1; n > 0; n--) {
1653 int byte = bytestream2_get_byteu(&gb);
1659 block_predictor = bytestream2_get_byteu(&gb);
1660 if (block_predictor > 6) {
1668 block_predictor = bytestream2_get_byteu(&gb);
1669 if (block_predictor > 6) {
1677 c->status[0].idelta =
sign_extend(bytestream2_get_le16u(&gb), 16);
1679 c->status[1].idelta =
sign_extend(bytestream2_get_le16u(&gb), 16);
1682 c->status[0].sample1 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1683 if (st)
c->status[1].sample1 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1684 c->status[0].sample2 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1685 if (st)
c->status[1].sample2 =
sign_extend(bytestream2_get_le16u(&gb), 16);
1688 if (st) *
samples++ =
c->status[1].sample2;
1690 if (st) *
samples++ =
c->status[1].sample1;
1691 for (
int n = (nb_samples - 2) >> (1 - st); n > 0; n--) {
1692 int byte = bytestream2_get_byteu(&gb);
1701 c->status[
channel ].step = bytestream2_get_le16u(&gb) & 0x1f;
1702 c->status[
channel + 1].step = bytestream2_get_le16u(&gb) & 0x1f;
1707 for (
int n = 0; n < nb_samples; n += 2) {
1708 int v = bytestream2_get_byteu(&gb);
1712 for (
int n = 0; n < nb_samples; n += 2) {
1713 int v = bytestream2_get_byteu(&gb);
1730 for (
int n = (nb_samples - 1) >> (1 - st); n > 0; n--) {
1731 int v = bytestream2_get_byteu(&gb);
1739 if (decode_top_nibble_next) { \
1740 nibble = last_byte >> 4; \
1741 decode_top_nibble_next = 0; \
1743 last_byte = bytestream2_get_byteu(&gb); \
1744 nibble = last_byte & 0x0F; \
1745 decode_top_nibble_next = 1; \
1750 int decode_top_nibble_next = 0;
1755 c->status[0].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1756 c->status[1].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
1757 c->status[0].step_index = bytestream2_get_byteu(&gb);
1758 c->status[1].step_index = bytestream2_get_byteu(&gb);
1759 if (
c->status[0].step_index > 88
u ||
c->status[1].step_index > 88
u){
1761 c->status[0].step_index,
c->status[1].step_index);
1765 diff_channel =
c->status[1].predictor;
1767 while (
samples < samples_end) {
1781 diff_channel = (diff_channel +
c->status[1].predictor) / 2;
1782 *
samples++ =
c->status[0].predictor +
c->status[1].predictor;
1783 *
samples++ =
c->status[0].predictor -
c->status[1].predictor;
1790 diff_channel = (diff_channel +
c->status[1].predictor) / 2;
1791 *
samples++ =
c->status[0].predictor +
c->status[1].predictor;
1792 *
samples++ =
c->status[0].predictor -
c->status[1].predictor;
1798 CASE(ADPCM_IMA_MAGIX,
1810 for (
int m = 0; m <
channels*nb_samples/16; m ++) {
1811 uint32_t v0 = bytestream2_get_le32u(&gb);
1812 uint32_t v1 = bytestream2_get_le32u(&gb);
1814 for (
int n = 8; n > 0; n--, v0 >>= 4, v1 >>= 4,
samples += 2) {
1832 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1834 int v = bytestream2_get_byteu(&gb);
1847 CASE(ADPCM_IMA_MOFLEX,
1859 for (
int subframe = 0; subframe < nb_samples / 256; subframe++) {
1862 for (
int n = 0; n < 256; n += 2) {
1863 int v = bytestream2_get_byteu(&gb);
1870 CASE(ADPCM_IMA_DAT4,
1875 for (
int n = 0; n < nb_samples; n += 2) {
1876 int v = bytestream2_get_byteu(&gb);
1883 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1884 int v = bytestream2_get_byteu(&gb);
1889 CASE(ADPCM_IMA_HVQM2,
1890 int format = bytestream2_get_be16(&gb);
1895 CASE(ADPCM_IMA_HVQM4,
1896 int format = bytestream2_get_be16(&gb);
1902 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1903 int v = bytestream2_get_byteu(&gb);
1909 for (
int n = nb_samples / 2; n > 0; n--) {
1911 int v = bytestream2_get_byteu(&gb);
1919 for (
int n = nb_samples / 2; n > 0; n--) {
1921 int v = bytestream2_get_byteu(&gb);
1928 CASE(ADPCM_IMA_CUNNING,
1930 int16_t *smp = samples_p[
channel];
1931 for (
int n = 0; n < nb_samples / 2; n++) {
1932 int v = bytestream2_get_byteu(&gb);
1939 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
1940 int v = bytestream2_get_byteu(&gb);
1956 for (
int n = 0; n < nb_samples / 2; n++) {
1959 byte[0] = bytestream2_get_byteu(&gb);
1961 byte[1] = bytestream2_get_byteu(&gb);
1971 if (
c->vqa_version == 3) {
1973 int16_t *smp = samples_p[
channel];
1975 for (
int n = nb_samples / 2; n > 0; n--) {
1976 int v = bytestream2_get_byteu(&gb);
1982 for (
int n = nb_samples / 2; n > 0; n--) {
1984 int v = bytestream2_get_byteu(&gb);
1994 int bytes_remaining,
block = 0;
2001 history[1] =
sign_extend(bytestream2_get_le16(&gb), 16);
2002 history[0] =
sign_extend(bytestream2_get_le16(&gb), 16);
2003 scale = bytestream2_get_le16(&gb);
2005 out[0] = history[1];
2006 out[1] = history[0];
2008 for (
int n = 0; n < 15; n++) {
2009 unsigned byte = bytestream2_get_byte(&gb);
2015 out[2+n*2] = nibble[0]*
scale + ((history[0]*3667 - history[1]*1642) >> 11);
2016 history[1] = history[0];
2017 history[0] =
out[2+n*2];
2019 out[2+n*2+1] = nibble[1]*
scale + ((history[0]*3667 - history[1]*1642) >> 11);
2020 history[1] = history[0];
2021 history[0] =
out[2+n*2+1];
2028 if (bytes_remaining > 0) {
2033 int16_t *out0 = samples_p[0];
2034 int16_t *out1 = samples_p[1];
2035 int samples_per_block = 28 * (3 -
channels) * 4;
2036 int sample_offset = 0;
2037 int bytes_remaining;
2040 &
c->status[0], &
c->status[1],
2044 sample_offset += samples_per_block;
2049 if (bytes_remaining > 0) {
2053 CASE(ADPCM_IMA_ESCAPE,
2054 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2055 int byte = bytestream2_get_byteu(&gb);
2060 CASE(ADPCM_IMA_EA_EACS,
2061 for (
int i = 0;
i <= st;
i++) {
2062 c->status[
i].step_index = bytestream2_get_le32u(&gb);
2063 if (
c->status[
i].step_index > 88
u) {
2065 i,
c->status[
i].step_index);
2069 for (
int i = 0;
i <= st;
i++) {
2070 c->status[
i].predictor = bytestream2_get_le32u(&gb);
2075 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2076 int byte = bytestream2_get_byteu(&gb);
2081 CASE(ADPCM_IMA_EA_SEAD,
2082 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2083 int byte = bytestream2_get_byteu(&gb);
2089 int previous_left_sample, previous_right_sample;
2090 int current_left_sample, current_right_sample;
2091 int next_left_sample, next_right_sample;
2092 int coeff1l, coeff2l, coeff1r, coeff2r;
2093 int shift_left, shift_right;
2101 current_left_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2102 previous_left_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2103 current_right_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2104 previous_right_sample =
sign_extend(bytestream2_get_le16u(&gb), 16);
2106 for (
int count1 = 0; count1 < nb_samples / 28; count1++) {
2107 int byte = bytestream2_get_byteu(&gb);
2114 byte = bytestream2_get_byteu(&gb);
2115 shift_left = 20 - (
byte >> 4);
2116 shift_right = 20 - (
byte & 0x0F);
2119 shift_left = 20 - (
byte & 0x0F);
2122 for (
int count2 = 0; count2 < (
channels == 2 ? 28 : 14); count2++) {
2123 byte = bytestream2_get_byteu(&gb);
2124 next_left_sample =
sign_extend(
byte >> 4, 4) * (1 << shift_left);
2126 next_left_sample = (next_left_sample +
2127 (current_left_sample * coeff1l) +
2128 (previous_left_sample * coeff2l) + 0x80) >> 8;
2130 previous_left_sample = current_left_sample;
2132 *
samples++ = current_left_sample;
2135 next_right_sample =
sign_extend(
byte, 4) * (1 << shift_right);
2137 next_right_sample = (next_right_sample +
2138 (current_right_sample * coeff1r) +
2139 (previous_right_sample * coeff2r) + 0x80) >> 8;
2141 previous_right_sample = current_right_sample;
2143 *
samples++ = current_right_sample;
2145 next_left_sample =
sign_extend(
byte, 4) * (1 << shift_left);
2147 next_left_sample = (next_left_sample +
2148 (current_left_sample * coeff1l) +
2149 (previous_left_sample * coeff2l) + 0x80) >> 8;
2151 previous_left_sample = current_left_sample;
2154 *
samples++ = current_left_sample;
2160 CASE(ADPCM_EA_MAXIS_XA,
2164 int byte = bytestream2_get_byteu(&gb);
2165 for (
int i = 0;
i < 2;
i++)
2169 for (
int count1 = 0; count1 < nb_samples / 2; count1++) {
2172 byte[0] = bytestream2_get_byteu(&gb);
2173 if (st)
byte[1] = bytestream2_get_byteu(&gb);
2174 for (
int i = 4;
i >= 0;
i-=4) {
2188 #
if CONFIG_ADPCM_EA_R1_DECODER || CONFIG_ADPCM_EA_R2_DECODER || CONFIG_ADPCM_EA_R3_DECODER
2197 int previous_sample, current_sample, next_sample;
2206 bytestream2_get_le32(&gb)) +
2213 samplesC = samples_p[
channel];
2216 current_sample =
sign_extend(bytestream2_get_le16(&gb), 16);
2217 previous_sample =
sign_extend(bytestream2_get_le16(&gb), 16);
2219 current_sample =
c->status[
channel].predictor;
2220 previous_sample =
c->status[
channel].prev_sample;
2223 for (count1 = 0; count1 < nb_samples / 28; count1++) {
2224 int byte = bytestream2_get_byte(&gb);
2226 current_sample =
sign_extend(bytestream2_get_be16(&gb), 16);
2227 previous_sample =
sign_extend(bytestream2_get_be16(&gb), 16);
2229 for (
int count2 = 0; count2 < 28; count2++)
2230 *samplesC++ =
sign_extend(bytestream2_get_be16(&gb), 16);
2234 shift = 20 - (
byte & 0x0F);
2236 for (
int count2 = 0; count2 < 28; count2++) {
2240 byte = bytestream2_get_byte(&gb);
2244 next_sample += (current_sample * coeff1) +
2245 (previous_sample * coeff2);
2248 previous_sample = current_sample;
2249 current_sample = next_sample;
2250 *samplesC++ = current_sample;
2256 }
else if (count != count1) {
2258 count =
FFMAX(count, count1);
2262 c->status[
channel].predictor = current_sample;
2263 c->status[
channel].prev_sample = previous_sample;
2267 frame->nb_samples = count * 28;
2276 for (
int n = 0; n < 4; n++,
s += 32) {
2278 for (
int i = 0;
i < 2;
i++)
2287 for (
int m = 2; m < 32; m += 2) {
2289 for (
int n = 0; n < 4; n++,
s += 32) {
2291 int byte = bytestream2_get_byteu(&gb);
2304 CASE(ADPCM_IMA_ACORN,
2308 cs->
step_index = bytestream2_get_le16u(&gb) & 0xFF;
2315 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2316 int byte = bytestream2_get_byteu(&gb);
2334 c->status[0].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
2335 c->status[0].step_index = bytestream2_get_byteu(&gb);
2337 if (
c->status[0].step_index > 88
u) {
2339 c->status[0].step_index);
2343 for (
int n = nb_samples >> 1; n > 0; n--) {
2344 int v = bytestream2_get_byteu(&gb);
2350 if (nb_samples & 1) {
2351 int v = bytestream2_get_byteu(&gb);
2363 c->status[
i].predictor =
sign_extend(bytestream2_get_le16u(&gb), 16);
2364 c->status[
i].step_index = bytestream2_get_byteu(&gb);
2366 if (
c->status[
i].step_index > 88
u) {
2368 c->status[
i].step_index);
2373 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2374 int v = bytestream2_get_byteu(&gb);
2380 CASE(ADPCM_IMA_SMJPEG,
2382 c->status[
i].predictor =
sign_extend(bytestream2_get_be16u(&gb), 16);
2383 c->status[
i].step_index = bytestream2_get_byteu(&gb);
2385 if (
c->status[
i].step_index > 88
u) {
2387 c->status[
i].step_index);
2392 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2393 int v = bytestream2_get_byteu(&gb);
2400 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2401 int v = bytestream2_get_byteu(&gb);
2406 #
if CONFIG_ADPCM_SBPRO_2_DECODER || CONFIG_ADPCM_SBPRO_3_DECODER || \
2407 CONFIG_ADPCM_SBPRO_4_DECODER
2411 if (!
c->status[0].step_index) {
2413 *
samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2415 *
samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2416 c->status[0].step_index = 1;
2420 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2421 int byte = bytestream2_get_byteu(&gb);
2428 for (
int n = (nb_samples<<st) / 3; n > 0; n--) {
2429 int byte = bytestream2_get_byteu(&gb);
2433 (
byte >> 2) & 0x07, 3, 0);
2438 for (
int n = nb_samples >> (2 - st); n > 0; n--) {
2439 int byte = bytestream2_get_byteu(&gb);
2443 (
byte >> 4) & 0x03, 2, 2);
2445 (
byte >> 2) & 0x03, 2, 2);
2457 for (
int n = nb_samples >> (1 - st); n > 0; n--) {
2458 int v = bytestream2_get_byteu(&gb);
2466 for (
int n = nb_samples >> 1; n > 0; n--) {
2467 int v = bytestream2_get_byteu(&gb);
2474 int samples_per_block;
2478 samples_per_block = avctx->
extradata[0] / 16;
2479 blocks = nb_samples / avctx->
extradata[0];
2481 samples_per_block = nb_samples / 16;
2485 for (
int m = 0; m < blocks; m++) {
2487 int prev1 =
c->status[
channel].sample1;
2488 int prev2 =
c->status[
channel].sample2;
2492 for (
int i = 0;
i < samples_per_block;
i++) {
2493 int byte = bytestream2_get_byteu(&gb);
2494 int scale = 1 << (
byte >> 4);
2495 int index =
byte & 0xf;
2500 for (
int n = 0; n < 16; n++) {
2506 byte = bytestream2_get_byteu(&gb);
2510 sampledat = ((prev1 * factor1 + prev2 * factor2) >> 11) +
2518 c->status[
channel].sample1 = prev1;
2519 c->status[
channel].sample2 = prev2;
2524 #
if CONFIG_ADPCM_THP_DECODER || CONFIG_ADPCM_THP_LE_DECODER
2530 #define THP_GET16(g) \
2532 avctx->codec->id == AV_CODEC_ID_ADPCM_THP_LE ? \
2533 bytestream2_get_le16u(&(g)) : \
2534 bytestream2_get_be16u(&(g)), 16)
2545 for (
int n = 0; n < 16; n++)
2546 table[
i][n] = THP_GET16(tb);
2549 for (
int n = 0; n < 16; n++)
2550 table[
i][n] = THP_GET16(gb);
2552 if (!
c->has_status) {
2555 c->status[
i].sample1 = THP_GET16(gb);
2556 c->status[
i].sample2 = THP_GET16(gb);
2564 for (
int ch = 0; ch <
channels; ch++) {
2568 for (
int i = 0;
i < (nb_samples + 13) / 14;
i++) {
2569 int byte = bytestream2_get_byteu(&gb);
2570 int index = (
byte >> 4) & 7;
2571 unsigned int exp =
byte & 0x0F;
2576 for (
int n = 0; n < 14 && (
i * 14 + n < nb_samples); n++) {
2582 byte = bytestream2_get_byteu(&gb);
2586 sampledat = ((
c->status[ch].sample1 * factor1
2587 +
c->status[ch].sample2 * factor2) >> 11) + sampledat * (1 <<
exp);
2589 c->status[ch].sample2 =
c->status[ch].sample1;
2590 c->status[ch].sample1 = *
samples++;
2602 for (
int i = 0;
i < nb_samples / 28;
i++) {
2606 header = bytestream2_get_byteu(&gb);
2610 for (
int n = 0; n < 28; n++) {
2615 prev = (
c->status[
channel].sample1 * 0x3c);
2618 prev = (
c->status[
channel].sample1 * 0x73) - (
c->status[
channel].sample2 * 0x34);
2621 prev = (
c->status[
channel].sample1 * 0x62) - (
c->status[
channel].sample2 * 0x37);
2629 byte = bytestream2_get_byteu(&gb);
2635 sampledat = ((sampledat * (1 << 12)) >> (
header & 0xf)) * (1 << 6) + prev;
2638 c->status[
channel].sample1 = sampledat;
2647 int coefs[8*2*8] = { 0 };
2656 order = bytestream2_get_be16(&
cb);
2657 entries = bytestream2_get_be16(&
cb);
2658 if (
version != 1 || order != 2 || entries > 8)
2661 for (
int n = 0; n < order * entries * 8; n++)
2667 int16_t hist[8] = { 0 };
2668 const int order = 2;
2671 hist[6] = cs->sample2;
2672 hist[7] = cs->sample1;
2676 scale = (buf[0] >> 4) & 0xF;
2677 index = (buf[0] >> 0) & 0xF;
2681 for (
int i = 0, j = 0;
i < 16;
i += 2, j++) {
2682 int n0 = (buf[j+1] >> 4) & 0xF;
2683 int n1 = (buf[j+1] >> 0) & 0xF;
2694 for (
int j = 0; j < 2; j++) {
2695 int *sf_codes = &codes[j*8];
2696 int16_t *sf_out = &
out[j*8];
2698 for (
int i = 0;
i < 8;
i++) {
2702 for (
int o = 0; o < order; o++)
2703 delta += coefs[o*8 +
i] * hist[(8 - order) + o];
2705 for (
int k =
i-1; k > -1; k--) {
2706 for (
int o = 1; o < order; o++)
2707 delta += sf_codes[(
i-1) - k] * coefs[(o*8) + k];
2716 for (
int i = 8 - order;
i < 8;
i++)
2717 hist[
i] = sf_out[
i];
2722 cs->sample2 = hist[6];
2723 cs->sample1 = hist[7];
2737 for (
int i = 0;
i < nb_samples_per_block / 28;
i++) {
2740 filter = bytestream2_get_byteu(&gb);
2745 flag = bytestream2_get_byteu(&gb) & 0x7;
2748 for (
int n = 0; n < 28; n++) {
2754 byte = bytestream2_get_byteu(&gb);
2779 filter = bytestream2_get_byteu(&gb);
2785 for (
int n = 0; n < nb_samples_per_block; n++) {
2791 byte = bytestream2_get_byteu(&gb);
2814 for (
int ch = 0; ch <
channels; ch++) {
2815 c->status[ch].predictor =
sign_extend(bytestream2_get_le16(&gb), 16);
2816 c->status[ch].step =
sign_extend(bytestream2_get_le16(&gb), 16);
2820 for (
int i = 0;
i < nb_samples;
i++)
2821 for (
int ch = 0; ch <
channels; ch++)
2853 control = bytestream2_get_byteu(&gb);
2854 shift = (control >> 4) + 2;
2856 for (
int n = 0; n < 16; n++) {
2857 int sample = bytestream2_get_byteu(&gb);
2865 for (
int n = 0; n < nb_samples; n++) {
2866 for (
int ch = 0; ch <
channels; ch++) {
2867 int v = bytestream2_get_byteu(&gb);
2873 for (
int n = 0; n < nb_samples *
channels; n++) {
2874 int v = bytestream2_get_byteu(&gb);
2879 for (
int n = nb_samples / 2; n > 0; n--) {
2881 int v = bytestream2_get_byteu(&gb);
2889 av_unreachable(
"There are cases for all codec ids using adpcm_decode_frame");
2916 c->status[0].step =
c->status[1].step = 511;
2949 #define ADPCM_DECODER_0(id_, name_, long_name_)
2950 #define ADPCM_DECODER_1(id_, name_, long_name_) \
2951 const FFCodec ff_ ## name_ ## _decoder = { \
2953 CODEC_LONG_NAME(long_name_), \
2954 .p.type = AVMEDIA_TYPE_AUDIO, \
2956 .p.capabilities = AV_CODEC_CAP_DR1, \
2957 .priv_data_size = sizeof(ADPCMDecodeContext), \
2958 .init = adpcm_decode_init, \
2959 FF_CODEC_DECODE_CB(adpcm_decode_frame), \
2960 .flush = adpcm_flush, \
2962 #define ADPCM_DECODER_2(enabled, codec_id, name, long_name) \
2963 ADPCM_DECODER_ ## enabled(codec_id, name, long_name)
2964 #define ADPCM_DECODER_3(config, codec_id, name, long_name) \
2965 ADPCM_DECODER_2(config, codec_id, name, long_name)
2966 #define ADPCM_DECODER(codec, name, long_name) \
2967 ADPCM_DECODER_3(CONFIG_ ## codec ## _DECODER, AV_CODEC_ID_ ## codec, \
2972 ADPCM_DECODER(ADPCM_AFC, adpcm_afc, "ADPCM Nintendo Gamecube AFC")
2973 ADPCM_DECODER(ADPCM_AGM, adpcm_agm, "ADPCM AmuseGraphics Movie")
2975 ADPCM_DECODER(ADPCM_ARGO, adpcm_argo, "ADPCM Argonaut Games")
2977 ADPCM_DECODER(ADPCM_CT, adpcm_ct, "ADPCM Creative Technology")
2978 ADPCM_DECODER(ADPCM_DTK, adpcm_dtk, "ADPCM Nintendo Gamecube DTK")
2980 ADPCM_DECODER(ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa, "ADPCM Electronic Arts Maxis CDROM XA")
2984 ADPCM_DECODER(ADPCM_EA_XAS, adpcm_ea_xas, "ADPCM Electronic Arts XAS")
2985 ADPCM_DECODER(ADPCM_IMA_ACORN, adpcm_ima_acorn, "ADPCM IMA Acorn Replay")
2986 ADPCM_DECODER(ADPCM_IMA_AMV, adpcm_ima_amv, "ADPCM IMA AMV")
2987 ADPCM_DECODER(ADPCM_IMA_APC, adpcm_ima_apc, "ADPCM IMA CRYO APC")
2988 ADPCM_DECODER(ADPCM_IMA_APM, adpcm_ima_apm, "ADPCM IMA Ubisoft APM")
2989 ADPCM_DECODER(ADPCM_IMA_CUNNING, adpcm_ima_cunning, "ADPCM IMA Cunning Developments")
2990 ADPCM_DECODER(ADPCM_IMA_DAT4, adpcm_ima_dat4, "ADPCM IMA Eurocom DAT4")
2991 ADPCM_DECODER(ADPCM_IMA_DK3, adpcm_ima_dk3, "ADPCM IMA Duck DK3")
2992 ADPCM_DECODER(ADPCM_IMA_DK4, adpcm_ima_dk4, "ADPCM IMA Duck DK4")
2993 ADPCM_DECODER(ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS")
2994 ADPCM_DECODER(ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead, "ADPCM IMA Electronic Arts SEAD")
2995 ADPCM_DECODER(ADPCM_IMA_ESCAPE, adpcm_ima_escape, "ADPCM IMA Acorn Escape")
2996 ADPCM_DECODER(ADPCM_IMA_HVQM2, adpcm_ima_hvqm2, "ADPCM IMA HVQM2")
2997 ADPCM_DECODER(ADPCM_IMA_HVQM4, adpcm_ima_hvqm4, "ADPCM IMA HVQM4")
2998 ADPCM_DECODER(ADPCM_IMA_ISS, adpcm_ima_iss, "ADPCM IMA Funcom ISS")
2999 ADPCM_DECODER(ADPCM_IMA_MAGIX, adpcm_ima_magix, "ADPCM IMA Magix")
3000 ADPCM_DECODER(ADPCM_IMA_MOFLEX, adpcm_ima_moflex, "ADPCM IMA MobiClip MOFLEX")
3001 ADPCM_DECODER(ADPCM_IMA_MTF, adpcm_ima_mtf, "ADPCM IMA Capcom'
s MT Framework")
3002 ADPCM_DECODER(ADPCM_IMA_OKI, adpcm_ima_oki, "ADPCM IMA Dialogic OKI")
3003 ADPCM_DECODER(ADPCM_IMA_PDA, adpcm_ima_pda, "ADPCM IMA PlayDate")
3004 ADPCM_DECODER(ADPCM_IMA_QT, adpcm_ima_qt, "ADPCM IMA QuickTime")
3005 ADPCM_DECODER(ADPCM_IMA_RAD, adpcm_ima_rad, "ADPCM IMA Radical")
3006 ADPCM_DECODER(ADPCM_IMA_SSI, adpcm_ima_ssi, "ADPCM IMA Simon & Schuster Interactive")
3007 ADPCM_DECODER(ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg, "ADPCM IMA Loki SDL MJPEG")
3008 ADPCM_DECODER(ADPCM_IMA_ALP, adpcm_ima_alp, "ADPCM IMA High Voltage Software ALP")
3009 ADPCM_DECODER(ADPCM_IMA_WAV, adpcm_ima_wav, "ADPCM IMA WAV")
3010 ADPCM_DECODER(ADPCM_IMA_WS, adpcm_ima_ws, "ADPCM IMA Westwood")
3011 ADPCM_DECODER(ADPCM_IMA_XBOX, adpcm_ima_xbox, "ADPCM IMA Xbox")
3014 ADPCM_DECODER(ADPCM_N64, adpcm_n64, "ADPCM Silicon Graphics N64")
3018 ADPCM_DECODER(ADPCM_SBPRO_2, adpcm_sbpro_2, "ADPCM Sound Blaster Pro 2-
bit")
3019 ADPCM_DECODER(ADPCM_SBPRO_3, adpcm_sbpro_3, "ADPCM Sound Blaster Pro 2.6-
bit")
3020 ADPCM_DECODER(ADPCM_SBPRO_4, adpcm_sbpro_4, "ADPCM Sound Blaster Pro 4-
bit")
3021 ADPCM_DECODER(ADPCM_SWF, adpcm_swf, "ADPCM Shockwave Flash")
3022 ADPCM_DECODER(ADPCM_THP_LE, adpcm_thp_le, "ADPCM Nintendo THP (little-endian)")