46 #define BACKSTEP_SIZE 512
48 #define LAST_BUF_SIZE 2 * BACKSTEP_SIZE + EXTRABYTES
100 0 + 128 + 128 + 128 + 130 + 128 + 154 + 166 +
101 142 + 204 + 190 + 170 + 542 + 460 + 662 + 414
104 0, 128, 128, 128, 130, 128, 154, 166,
105 142, 204, 190, 170, 542, 460, 662, 414
132 #define SCALE_GEN(v) \
133 { FIXR_OLD(1.0 * (v)), FIXR_OLD(0.7937005259 * (v)), FIXR_OLD(0.6299605249 * (v)) }
149 for (i = 0; i < 3; i++) {
159 if (s->sample_rate_index != 8)
164 if (s->sample_rate_index <= 2)
166 else if (s->sample_rate_index != 8)
180 l =
FFMIN(ra1 + ra2 + 2, 22);
188 if(s->sample_rate_index == 8)
193 if (s->sample_rate_index <= 2)
222 return (
int)((val + (1LL << (shift - 1))) >> shift);
236 val = (val + (1 << (shift - 1))) >> shift;
255 m = (m + (1 << (e - 1))) >> e;
266 for (i = 0; i < 64; i++) {
275 for (i = 0; i < 15; i++) {
278 norm = ((INT64_C(1) <<
n) *
FRAC_ONE) / ((1 <<
n) - 1);
292 for (i = 1; i < 16; i++) {
295 uint8_t tmp_bits [512] = { 0 };
296 uint16_t tmp_codes[512] = { 0 };
301 for (x = 0; x < xsize; x++) {
302 for (y = 0; y < xsize; y++) {
303 tmp_bits [(x << 5) | y | ((x&&y)<<4)]= h->
bits [j ];
304 tmp_codes[(x << 5) | y | ((x&&
y)<<4)]= h->
codes[j++];
312 tmp_bits, 1, 1, tmp_codes, 2, 2,
319 for (i = 0; i < 2; i++) {
322 init_vlc(&huff_quad_vlc[i], i == 0 ? 7 : 4, 16,
329 for (i = 0; i < 9; i++) {
331 for (j = 0; j < 22; j++) {
342 for (i = 0; i < 4; i++) {
345 int val1, val2, val3, steps;
358 for (i = 0; i < 7; i++) {
362 f = tan((
double)i *
M_PI / 12.0);
363 v =
FIXR(f / (1.0 + f));
371 for (i = 7; i < 16; i++)
374 for (i = 0; i < 16; i++) {
378 for (j = 0; j < 2; j++) {
379 e = -(j + 1) * ((i + 1) >> 1);
390 for (i = 0; i < 8; i++) {
393 cs = 1.0 / sqrt(1.0 + ci * ci);
421 static int initialized_tables = 0;
424 if (!initialized_tables) {
426 initialized_tables = 1;
452 #define C3 FIXHR(0.86602540378443864676/2)
453 #define C4 FIXHR(0.70710678118654752439/2) //0.5 / cos(pi*(9)/36)
454 #define C5 FIXHR(0.51763809020504152469/2) //0.5 / cos(pi*(5)/36)
455 #define C6 FIXHR(1.93185165257813657349/4) //0.5 / cos(pi*(15)/36)
464 in1 = in[1*3] + in[0*3];
465 in2 = in[2*3] + in[1*3];
466 in3 = in[3*3] + in[2*3];
467 in4 = in[4*3] + in[3*3];
468 in5 = in[5*3] + in[4*3];
503 int bound, i,
v,
n, ch, j, mant;
508 bound = (s->mode_ext + 1) * 4;
513 for (i = 0; i < bound; i++) {
514 for (ch = 0; ch < s->nb_channels; ch++) {
518 for (i = bound; i <
SBLIMIT; i++)
522 for (i = 0; i < bound; i++) {
523 for (ch = 0; ch < s->nb_channels; ch++) {
524 if (allocation[ch][i])
528 for (i = bound; i <
SBLIMIT; i++) {
529 if (allocation[0][i]) {
536 for (j = 0; j < 12; j++) {
537 for (i = 0; i < bound; i++) {
538 for (ch = 0; ch < s->nb_channels; ch++) {
539 n = allocation[ch][i];
542 v =
l1_unscale(n, mant, scale_factors[ch][i]);
549 for (i = bound; i <
SBLIMIT; i++) {
550 n = allocation[0][i];
570 int table, bit_alloc_bits, i, j, ch, bound,
v;
574 int scale, qindex,
bits, steps, k, l,
m,
b;
578 s->sample_rate, s->lsf);
583 bound = (s->mode_ext + 1) * 4;
587 av_dlog(s->
avctx,
"bound=%d sblimit=%d\n", bound, sblimit);
595 for (i = 0; i < bound; i++) {
596 bit_alloc_bits = alloc_table[j];
597 for (ch = 0; ch < s->nb_channels; ch++)
598 bit_alloc[ch][i] =
get_bits(&s->
gb, bit_alloc_bits);
599 j += 1 << bit_alloc_bits;
601 for (i = bound; i < sblimit; i++) {
602 bit_alloc_bits = alloc_table[j];
606 j += 1 << bit_alloc_bits;
610 for (i = 0; i < sblimit; i++) {
611 for (ch = 0; ch < s->nb_channels; ch++) {
612 if (bit_alloc[ch][i])
618 for (i = 0; i < sblimit; i++) {
619 for (ch = 0; ch < s->nb_channels; ch++) {
620 if (bit_alloc[ch][i]) {
621 sf = scale_factors[ch][i];
622 switch (scale_code[ch][i]) {
650 for (k = 0; k < 3; k++) {
651 for (l = 0; l < 12; l += 3) {
653 for (i = 0; i < bound; i++) {
654 bit_alloc_bits = alloc_table[j];
655 for (ch = 0; ch < s->nb_channels; ch++) {
656 b = bit_alloc[ch][i];
658 scale = scale_factors[ch][i][k];
659 qindex = alloc_table[j+
b];
675 for (m = 0; m < 3; m++) {
688 j += 1 << bit_alloc_bits;
691 for (i = bound; i < sblimit; i++) {
692 bit_alloc_bits = alloc_table[j];
695 int mant, scale0, scale1;
696 scale0 = scale_factors[0][i][k];
697 scale1 = scale_factors[1][i][k];
698 qindex = alloc_table[j+
b];
721 for (m = 0; m < 3; m++) {
738 j += 1 << bit_alloc_bits;
741 for (i = sblimit; i <
SBLIMIT; i++) {
742 for (ch = 0; ch < s->nb_channels; ch++) {
753 #define SPLIT(dst,sf,n) \
755 int m = (sf * 171) >> 9; \
758 } else if (n == 4) { \
761 } else if (n == 5) { \
762 int m = (sf * 205) >> 10; \
765 } else if (n == 6) { \
766 int m = (sf * 171) >> 10; \
776 SPLIT(slen[3], sf, n3)
777 SPLIT(slen[2], sf, n2)
778 SPLIT(slen[1], sf, n1)
786 int len, i, j, k, l,
v0,
shift, gain, gains[3];
796 v0 = gain - ((g->
scale_factors[i] + pretab[i]) << shift) + 400;
798 for (j = len; j > 0; j--)
810 for (l = 0; l < 3; l++) {
812 for (j = len; j > 0; j--)
847 #define READ_FLIP_SIGN(dst,src) \
848 v = AV_RN32A(src) ^ (get_bits1(&s->gb) << 31); \
851 #define READ_FLIP_SIGN(dst,src) \
852 v = -get_bits1(&s->gb); \
853 *(dst) = (*(src) ^ v) - v;
857 int16_t *exponents,
int end_pos2)
861 int last_pos, bits_left;
867 for (i = 0; i < 3; i++) {
868 int j, k, l, linbits;
904 exponent= exponents[s_index];
951 while (s_index <= 572) {
954 if (pos >= end_pos) {
955 if (pos > end_pos2 && last_pos) {
960 av_log(s->
avctx,
AV_LOG_INFO,
"overread, skip %d enddists: %d %d\n", last_pos - pos, end_pos-pos, end_pos2-pos);
978 static const int idxtab[16] = { 3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0 };
980 int pos = s_index + idxtab[code];
981 code ^= 8 >> idxtab[code];
1017 if (s->sample_rate_index != 8)
1029 for (j = len; j > 0; j--) {
1030 *dst++ = ptr[0*
len];
1031 *dst++ = ptr[1*
len];
1032 *dst++ = ptr[2*
len];
1036 memcpy(ptr1, tmp, len * 3 *
sizeof(*ptr1));
1040 #define ISQRT2 FIXR(0.70710678118654752440)
1045 int sf_max, sf,
len, non_zero_found;
1046 INTFLOAT (*is_tab)[16], *tab0, *
tab1, tmp0, tmp1, v1, v2;
1047 int non_zero_found_short[3];
1062 non_zero_found_short[0] = 0;
1063 non_zero_found_short[1] = 0;
1064 non_zero_found_short[2] = 0;
1071 for (l = 2; l >= 0; l--) {
1074 if (!non_zero_found_short[l]) {
1076 for (j = 0; j <
len; j++) {
1078 non_zero_found_short[l] = 1;
1088 for (j = 0; j <
len; j++) {
1098 for (j = 0; j <
len; j++) {
1109 non_zero_found = non_zero_found_short[0] |
1110 non_zero_found_short[1] |
1111 non_zero_found_short[2];
1113 for (i = g1->
long_end - 1;i >= 0;i--) {
1118 if (!non_zero_found) {
1119 for (j = 0; j <
len; j++) {
1126 k = (i == 21) ? 20 : i;
1132 for (j = 0; j <
len; j++) {
1142 for (j = 0; j <
len; j++) {
1160 for (i = 0; i < 576; i++) {
1163 tab0[i] = tmp0 + tmp1;
1164 tab1[i] = tmp0 - tmp1;
1180 #ifndef compute_antialias
1182 #define AA(j) do { \
1183 float tmp0 = ptr[-1-j]; \
1184 float tmp1 = ptr[ j]; \
1185 ptr[-1-j] = tmp0 * csa_table[j][0] - tmp1 * csa_table[j][1]; \
1186 ptr[ j] = tmp0 * csa_table[j][1] + tmp1 * csa_table[j][0]; \
1189 #define AA(j) do { \
1190 int tmp0 = ptr[-1-j]; \
1191 int tmp1 = ptr[ j]; \
1192 int tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]); \
1193 ptr[-1-j] = 4 * (tmp2 - MULH(tmp1, csa_table[j][2])); \
1194 ptr[ j] = 4 * (tmp2 + MULH(tmp0, csa_table[j][3])); \
1214 for (i = n; i > 0; i--) {
1234 int i, j, mdct_long_end, sblimit;
1239 while (ptr >= ptr1) {
1243 if (p[0] | p[1] | p[2] | p[3] | p[4] | p[5])
1246 sblimit = ((ptr - g->
sb_hybrid) / 18) + 1;
1255 mdct_long_end = sblimit;
1262 buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1263 ptr = g->
sb_hybrid + 18 * mdct_long_end;
1265 for (j = mdct_long_end; j < sblimit; j++) {
1267 win =
RENAME(ff_mdct_win)[2 + (4 & -(j & 1))];
1268 out_ptr = sb_samples + j;
1270 for (i = 0; i < 6; i++) {
1271 *out_ptr = buf[4*i];
1275 for (i = 0; i < 6; i++) {
1276 *out_ptr =
MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*1)];
1277 buf[4*(i + 6*2)] =
MULH3(out2[i + 6], win[i + 6], 1);
1281 for (i = 0; i < 6; i++) {
1282 *out_ptr =
MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*2)];
1283 buf[4*(i + 6*0)] =
MULH3(out2[i + 6], win[i + 6], 1);
1287 for (i = 0; i < 6; i++) {
1288 buf[4*(i + 6*0)] =
MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*0)];
1289 buf[4*(i + 6*1)] =
MULH3(out2[i + 6], win[i + 6], 1);
1290 buf[4*(i + 6*2)] = 0;
1293 buf += (j&3) != 3 ? 1 : (4*18-3);
1296 for (j = sblimit; j <
SBLIMIT; j++) {
1298 out_ptr = sb_samples + j;
1299 for (i = 0; i < 18; i++) {
1300 *out_ptr = buf[4*i];
1304 buf += (j&3) != 3 ? 1 : (4*18-3);
1311 int nb_granules, main_data_begin;
1312 int gr, ch, blocksplit_flag, i, j, k,
n, bits_pos;
1314 int16_t exponents[576];
1323 if (s->nb_channels == 2)
1328 for (ch = 0; ch < s->nb_channels; ch++) {
1334 for (gr = 0; gr < nb_granules; gr++) {
1335 for (ch = 0; ch < s->nb_channels; ch++) {
1356 if (blocksplit_flag) {
1363 for (i = 0; i < 2; i++)
1365 for (i = 0; i < 3; i++)
1369 int region_address1, region_address2;
1372 for (i = 0; i < 3; i++)
1378 region_address1, region_address2);
1406 #if !UNCHECKED_BITSTREAM_READER
1410 for (gr = 0; gr < nb_granules && (s->
last_buf_size >> 3) < main_data_begin; gr++) {
1411 for (ch = 0; ch < s->nb_channels; ch++) {
1430 for (; gr < nb_granules; gr++) {
1431 for (ch = 0; ch < s->nb_channels; ch++) {
1437 int slen, slen1, slen2;
1442 av_dlog(s->
avctx,
"slen1=%d slen2=%d\n", slen1, slen2);
1447 for (i = 0; i <
n; i++)
1450 for (i = 0; i <
n; i++)
1454 for (i = 0; i < 18; i++)
1456 for (i = 0; i < 3; i++)
1459 for (i = 0; i < 21; i++)
1465 for (k = 0; k < 4; k++) {
1467 if ((g->
scfsi & (0x8 >> k)) == 0) {
1468 slen = (k < 2) ? slen1 : slen2;
1470 for (i = 0; i <
n; i++)
1473 for (i = 0; i <
n; i++)
1478 for (i = 0; i <
n; i++) {
1487 int tindex, tindex2, slen[4], sl, sf;
1502 }
else if (sf < 244) {
1514 }
else if (sf < 500) {
1525 for (k = 0; k < 4; k++) {
1529 for (i = 0; i <
n; i++)
1532 for (i = 0; i <
n; i++)
1550 for (ch = 0; ch < s->nb_channels; ch++) {
1560 return nb_granules * 18;
1566 int i, nb_frames, ch,
ret;
1572 if (s->error_protection)
1611 av_assert1(i <= buf_size - HEADER_SIZE && i >= 0);
1629 for (ch = 0; ch < s->nb_channels; ch++) {
1632 samples_ptr = samples[ch];
1635 samples_ptr = samples[0] + ch;
1636 sample_stride = s->nb_channels;
1638 for (i = 0; i < nb_frames; i++) {
1641 RENAME(ff_mpa_synth_window),
1644 samples_ptr += 32 * sample_stride;
1648 return nb_frames * 32 *
sizeof(
OUT_INT) * s->nb_channels;
1655 int buf_size = avpkt->
size;
1660 while(buf_size && !*buf){
1669 if (header>>8 ==
AV_RB32(
"TAG")>>8) {
1689 if (s->frame_size <= 0 || s->frame_size > buf_size) {
1692 }
else if (s->frame_size < buf_size) {
1694 buf_size= s->frame_size;
1733 #if CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER
1735 int *got_frame_ptr,
AVPacket *avpkt)
1738 int buf_size = avpkt->
size;
1757 header =
AV_RB32(buf) | 0xffe00000;
1772 s->frame_size =
len;
1788 #if CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER
1793 typedef struct MP3On4DecodeContext {
1798 } MP3On4DecodeContext;
1805 static const uint8_t mp3Frames[8] = { 0, 1, 1, 2, 3, 3, 4, 5 };
1808 static const uint8_t chan_offset[8][5] = {
1820 static const int16_t chan_layout[8] = {
1833 MP3On4DecodeContext *s = avctx->
priv_data;
1836 for (i = 0; i < s->frames; i++)
1845 MP3On4DecodeContext *s = avctx->
priv_data;
1866 s->syncword = 0xffe00000;
1868 s->syncword = 0xfff00000;
1877 if (!s->mp3decctx[0])
1884 s->mp3decctx[0]->adu_mode = 1;
1889 for (i = 1; i < s->frames; i++) {
1891 if (!s->mp3decctx[i])
1893 s->mp3decctx[i]->adu_mode = 1;
1894 s->mp3decctx[i]->avctx = avctx;
1895 s->mp3decctx[i]->mpadsp = s->mp3decctx[0]->mpadsp;
1900 decode_close_mp3on4(avctx);
1908 MP3On4DecodeContext *s = avctx->
priv_data;
1910 for (i = 0; i < s->frames; i++)
1915 static int decode_frame_mp3on4(
AVCodecContext *avctx,
void *data,
1916 int *got_frame_ptr,
AVPacket *avpkt)
1920 int buf_size = avpkt->
size;
1921 MP3On4DecodeContext *s = avctx->
priv_data;
1923 int fsize, len = buf_size, out_size = 0;
1942 for (fr = 0; fr < s->frames; fr++) {
1945 m = s->mp3decctx[fr];
1952 header = (
AV_RB32(buf) & 0x000fffff) | s->syncword;
1961 if (ch + m->nb_channels > avctx->
channels ||
1962 s->coff[fr] + m->nb_channels > avctx->
channels) {
1967 ch += m->nb_channels;
1969 outptr[0] = out_samples[s->coff[fr]];
1970 if (m->nb_channels > 1)
1971 outptr[1] = out_samples[s->coff[fr] + 1];
1976 if (m->nb_channels > 1)
1993 avctx->
sample_rate = s->mp3decctx[0]->sample_rate;