Go to the documentation of this file.
27 #include "config_components.h"
53 #define BACKSTEP_SIZE 512
55 #define LAST_BUF_SIZE 2 * BACKSTEP_SIZE + EXTRABYTES
101 #define HEADER_SIZE 4
113 #define SCALE_GEN(v) \
114 { FIXR_OLD(1.0 * (v)), FIXR_OLD(0.7937005259 * (v)), FIXR_OLD(0.6299605249 * (v)) }
129 g->region_size[2] = 576 / 2;
130 for (
i = 0;
i < 3;
i++) {
131 k =
FFMIN(
g->region_size[
i],
g->big_values);
132 g->region_size[
i] = k - j;
139 if (
g->block_type == 2) {
140 if (
s->sample_rate_index != 8)
141 g->region_size[0] = (36 / 2);
143 g->region_size[0] = (72 / 2);
145 if (
s->sample_rate_index <= 2)
146 g->region_size[0] = (36 / 2);
147 else if (
s->sample_rate_index != 8)
148 g->region_size[0] = (54 / 2);
150 g->region_size[0] = (108 / 2);
152 g->region_size[1] = (576 / 2);
161 l =
FFMIN(ra1 + ra2 + 2, 22);
167 if (
g->block_type == 2) {
168 if (
g->switch_point) {
169 if(
s->sample_rate_index == 8)
174 if (
s->sample_rate_index <= 2)
192 static inline int l1_unscale(
int n,
int mant,
int scale_factor)
236 m = (m + ((1U << e) >> 1)) >> e;
246 for (
i = 0;
i < 15;
i++) {
249 norm = ((INT64_C(1) << n) *
FRAC_ONE) / ((1 << n) - 1);
253 ff_dlog(
NULL,
"%d: norm=%x s=%"PRIx32
" %"PRIx32
" %"PRIx32
"\n",
i,
264 for (
i = 0;
i < 16;
i++) {
268 for (j = 0; j < 2; j++) {
269 e = -(j + 1) * ((
i + 1) >> 1);
279 RENAME(ff_mpa_synth_init)();
318 #define C3 FIXHR(0.86602540378443864676/2)
319 #define C4 FIXHR(0.70710678118654752439/2) //0.5 / cos(pi*(9)/36)
320 #define C5 FIXHR(0.51763809020504152469/2) //0.5 / cos(pi*(5)/36)
321 #define C6 FIXHR(1.93185165257813657349/4) //0.5 / cos(pi*(15)/36)
327 SUINTFLOAT in0, in1, in2, in3, in4, in5, t1, t2;
330 in1 = in[1*3] + in[0*3];
331 in2 = in[2*3] + in[1*3];
332 in3 = in[3*3] + in[2*3];
333 in4 = in[4*3] + in[3*3];
334 in5 = in[5*3] + in[4*3];
370 int sec_byte_len = sec_len >> 3;
371 int sec_rem_bits = sec_len & 7;
374 uint32_t crc_val =
av_crc(crc_tab, UINT16_MAX, &buf[2], 2);
375 crc_val =
av_crc(crc_tab, crc_val, &buf[6], sec_byte_len);
378 ((buf[6 + sec_byte_len] & (0xFF00U >> sec_rem_bits)) << 24) +
379 ((
s->crc << 16) >> sec_rem_bits));
381 crc_val =
av_crc(crc_tab, crc_val, tmp_buf, 3);
395 int bound,
i, v, n, ch, j, mant;
405 bound = (
s->mode_ext + 1) * 4;
411 for (ch = 0; ch <
s->nb_channels; ch++) {
420 for (ch = 0; ch <
s->nb_channels; ch++) {
421 if (allocation[ch][
i])
426 if (allocation[0][
i]) {
433 for (j = 0; j < 12; j++) {
435 for (ch = 0; ch <
s->nb_channels; ch++) {
436 n = allocation[ch][
i];
443 s->sb_samples[ch][j][
i] = v;
447 n = allocation[0][
i];
451 s->sb_samples[0][j][
i] = v;
453 s->sb_samples[1][j][
i] = v;
455 s->sb_samples[0][j][
i] = 0;
456 s->sb_samples[1][j][
i] = 0;
476 s->sample_rate,
s->lsf);
481 bound = (
s->mode_ext + 1) * 4;
495 for (ch = 0; ch <
s->nb_channels; ch++)
497 j += 1 << bit_alloc_bits;
504 j += 1 << bit_alloc_bits;
508 for (
i = 0;
i < sblimit;
i++) {
509 for (ch = 0; ch <
s->nb_channels; ch++) {
520 for (
i = 0;
i < sblimit;
i++) {
521 for (ch = 0; ch <
s->nb_channels; ch++) {
523 sf = scale_factors[ch][
i];
524 switch (scale_code[ch][
i]) {
552 for (k = 0; k < 3; k++) {
553 for (l = 0; l < 12; l += 3) {
557 for (ch = 0; ch <
s->nb_channels; ch++) {
560 scale = scale_factors[ch][
i][k];
570 s->sb_samples[ch][k * 12 + l + 0][
i] =
572 s->sb_samples[ch][k * 12 + l + 1][
i] =
574 s->sb_samples[ch][k * 12 + l + 2][
i] =
577 for (m = 0; m < 3; m++) {
580 s->sb_samples[ch][k * 12 + l + m][
i] = v;
584 s->sb_samples[ch][k * 12 + l + 0][
i] = 0;
585 s->sb_samples[ch][k * 12 + l + 1][
i] = 0;
586 s->sb_samples[ch][k * 12 + l + 2][
i] = 0;
590 j += 1 << bit_alloc_bits;
597 int mant, scale0, scale1;
598 scale0 = scale_factors[0][
i][k];
599 scale1 = scale_factors[1][
i][k];
608 s->sb_samples[0][k * 12 + l + 0][
i] =
610 s->sb_samples[1][k * 12 + l + 0][
i] =
614 s->sb_samples[0][k * 12 + l + 1][
i] =
616 s->sb_samples[1][k * 12 + l + 1][
i] =
618 s->sb_samples[0][k * 12 + l + 2][
i] =
620 s->sb_samples[1][k * 12 + l + 2][
i] =
623 for (m = 0; m < 3; m++) {
625 s->sb_samples[0][k * 12 + l + m][
i] =
627 s->sb_samples[1][k * 12 + l + m][
i] =
632 s->sb_samples[0][k * 12 + l + 0][
i] = 0;
633 s->sb_samples[0][k * 12 + l + 1][
i] = 0;
634 s->sb_samples[0][k * 12 + l + 2][
i] = 0;
635 s->sb_samples[1][k * 12 + l + 0][
i] = 0;
636 s->sb_samples[1][k * 12 + l + 1][
i] = 0;
637 s->sb_samples[1][k * 12 + l + 2][
i] = 0;
640 j += 1 << bit_alloc_bits;
644 for (ch = 0; ch <
s->nb_channels; ch++) {
645 s->sb_samples[ch][k * 12 + l + 0][
i] = 0;
646 s->sb_samples[ch][k * 12 + l + 1][
i] = 0;
647 s->sb_samples[ch][k * 12 + l + 2][
i] = 0;
655 #define SPLIT(dst,sf,n) \
657 int m = (sf * 171) >> 9; \
660 } else if (n == 4) { \
663 } else if (n == 5) { \
664 int m = (sf * 205) >> 10; \
667 } else if (n == 6) { \
668 int m = (sf * 171) >> 10; \
678 SPLIT(slen[3], sf, n3)
679 SPLIT(slen[2], sf, n2)
680 SPLIT(slen[1], sf, n1)
687 const uint8_t *bstab, *pretab;
688 int len,
i, j, k, l, v0,
shift, gain, gains[3];
692 gain =
g->global_gain - 210;
693 shift =
g->scalefac_scale + 1;
697 for (
i = 0;
i <
g->long_end;
i++) {
698 v0 = gain - ((
g->scale_factors[
i] + pretab[
i]) <<
shift) + 400;
700 for (j =
len; j > 0; j--)
704 if (
g->short_start < 13) {
706 gains[0] = gain - (
g->subblock_gain[0] << 3);
707 gains[1] = gain - (
g->subblock_gain[1] << 3);
708 gains[2] = gain - (
g->subblock_gain[2] << 3);
710 for (
i =
g->short_start;
i < 13;
i++) {
712 for (l = 0; l < 3; l++) {
713 v0 = gains[l] - (
g->scale_factors[k++] <<
shift) + 400;
714 for (j =
len; j > 0; j--)
724 if (
s->in_gb.buffer && *
pos >=
s->gb.size_in_bits -
s->extrasize * 8) {
726 s->in_gb.buffer =
NULL;
743 #define READ_FLIP_SIGN(dst,src) \
744 v = AV_RN32A(src) ^ (get_bits1(&s->gb) << 31); \
747 #define READ_FLIP_SIGN(dst,src) \
748 v = -get_bits1(&s->gb); \
749 *(dst) = (*(src) ^ v) - v;
753 int16_t *exponents,
int end_pos2)
759 int end_pos =
FFMIN(end_pos2,
s->gb.size_in_bits -
s->extrasize * 8);
763 for (
i = 0;
i < 3;
i++) {
765 int j, k, l, linbits;
766 j =
g->region_size[
i];
770 k =
g->table_select[
i];
775 memset(&
g->sb_hybrid[s_index], 0,
sizeof(*
g->sb_hybrid) * 2 * j);
795 g->sb_hybrid[s_index ] =
796 g->sb_hybrid[s_index + 1] = 0;
801 exponent= exponents[s_index];
803 ff_dlog(
s->avctx,
"region=%d n=%d y=%d exp=%d\n",
804 i,
g->region_size[
i] - j, y, exponent);
815 g->sb_hybrid[s_index] = v;
824 g->sb_hybrid[s_index + 1] = v;
837 g->sb_hybrid[s_index+!!y] = v;
839 g->sb_hybrid[s_index + !y] = 0;
848 while (s_index <= 572) {
851 if (
pos >= end_pos) {
852 if (
pos > end_pos2 && last_pos) {
869 ff_dlog(
s->avctx,
"t=%d code=%d\n",
g->count1table_select,
code);
870 g->sb_hybrid[s_index + 0] =
871 g->sb_hybrid[s_index + 1] =
872 g->sb_hybrid[s_index + 2] =
873 g->sb_hybrid[s_index + 3] = 0;
875 static const int idxtab[16] = { 3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0 };
877 int pos = s_index + idxtab[
code];
892 memset(&
g->sb_hybrid[s_index], 0,
sizeof(*
g->sb_hybrid) * (576 - s_index));
910 if (
g->block_type != 2)
913 if (
g->switch_point) {
914 if (
s->sample_rate_index != 8)
915 ptr =
g->sb_hybrid + 36;
917 ptr =
g->sb_hybrid + 72;
922 for (
i =
g->short_start;
i < 13;
i++) {
926 for (j =
len; j > 0; j--) {
933 memcpy(ptr1,
tmp,
len * 3 *
sizeof(*ptr1));
937 #define ISQRT2 FIXR(0.70710678118654752440)
942 int sf_max, sf,
len, non_zero_found;
946 int non_zero_found_short[3];
961 non_zero_found_short[0] = 0;
962 non_zero_found_short[1] = 0;
963 non_zero_found_short[2] = 0;
970 for (l = 2; l >= 0; l--) {
973 if (!non_zero_found_short[l]) {
975 for (j = 0; j <
len; j++) {
977 non_zero_found_short[l] = 1;
987 for (j = 0; j <
len; j++) {
997 for (j = 0; j <
len; j++) {
1008 non_zero_found = non_zero_found_short[0] |
1009 non_zero_found_short[1] |
1010 non_zero_found_short[2];
1017 if (!non_zero_found) {
1018 for (j = 0; j <
len; j++) {
1025 k = (
i == 21) ? 20 :
i;
1031 for (j = 0; j <
len; j++) {
1041 for (j = 0; j <
len; j++) {
1059 for (
i = 0;
i < 576;
i++) {
1062 tab0[
i] = tmp0 + tmp1;
1063 tab1[
i] = tmp0 - tmp1;
1079 #ifndef compute_antialias
1081 #define AA(j) do { \
1082 float tmp0 = ptr[-1-j]; \
1083 float tmp1 = ptr[ j]; \
1084 ptr[-1-j] = tmp0 * csa_table[j][0] - tmp1 * csa_table[j][1]; \
1085 ptr[ j] = tmp0 * csa_table[j][1] + tmp1 * csa_table[j][0]; \
1088 #define AA(j) do { \
1089 SUINT tmp0 = ptr[-1-j]; \
1090 SUINT tmp1 = ptr[ j]; \
1091 SUINT tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]); \
1092 ptr[-1-j] = 4 * (tmp2 - MULH(tmp1, csa_table[j][2])); \
1093 ptr[ j] = 4 * (tmp2 + MULH(tmp0, csa_table[j][3])); \
1103 if (
g->block_type == 2) {
1104 if (!
g->switch_point)
1112 ptr =
g->sb_hybrid + 18;
1113 for (
i = n;
i > 0;
i--) {
1133 int i, j, mdct_long_end, sblimit;
1136 ptr =
g->sb_hybrid + 576;
1137 ptr1 =
g->sb_hybrid + 2 * 18;
1138 while (ptr >= ptr1) {
1142 if (p[0] | p[1] | p[2] | p[3] | p[4] | p[5])
1145 sblimit = ((ptr -
g->sb_hybrid) / 18) + 1;
1147 if (
g->block_type == 2) {
1149 if (
g->switch_point)
1154 mdct_long_end = sblimit;
1157 s->mpadsp.RENAME(imdct36_blocks)(sb_samples, mdct_buf,
g->sb_hybrid,
1158 mdct_long_end,
g->switch_point,
1161 buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1162 ptr =
g->sb_hybrid + 18 * mdct_long_end;
1164 for (j = mdct_long_end; j < sblimit; j++) {
1166 win =
RENAME(ff_mdct_win)[2 + (4 & -(j & 1))];
1167 out_ptr = sb_samples + j;
1169 for (
i = 0;
i < 6;
i++) {
1170 *out_ptr = buf[4*
i];
1174 for (
i = 0;
i < 6;
i++) {
1175 *out_ptr =
MULH3(out2[
i ],
win[
i ], 1) + buf[4*(
i + 6*1)];
1176 buf[4*(
i + 6*2)] =
MULH3(out2[
i + 6],
win[
i + 6], 1);
1180 for (
i = 0;
i < 6;
i++) {
1181 *out_ptr =
MULH3(out2[
i ],
win[
i ], 1) + buf[4*(
i + 6*2)];
1182 buf[4*(
i + 6*0)] =
MULH3(out2[
i + 6],
win[
i + 6], 1);
1186 for (
i = 0;
i < 6;
i++) {
1187 buf[4*(
i + 6*0)] =
MULH3(out2[
i ],
win[
i ], 1) + buf[4*(
i + 6*0)];
1188 buf[4*(
i + 6*1)] =
MULH3(out2[
i + 6],
win[
i + 6], 1);
1189 buf[4*(
i + 6*2)] = 0;
1192 buf += (j&3) != 3 ? 1 : (4*18-3);
1195 for (j = sblimit; j <
SBLIMIT; j++) {
1197 out_ptr = sb_samples + j;
1198 for (
i = 0;
i < 18;
i++) {
1199 *out_ptr = buf[4*
i];
1203 buf += (j&3) != 3 ? 1 : (4*18-3);
1210 int nb_granules, main_data_begin;
1211 int gr, ch, blocksplit_flag,
i, j, k, n, bits_pos;
1213 int16_t exponents[576];
1225 if (
s->nb_channels == 2)
1230 for (ch = 0; ch <
s->nb_channels; ch++) {
1231 s->granules[ch][0].scfsi = 0;
1232 s->granules[ch][1].scfsi =
get_bits(&
s->gb, 4);
1238 for (gr = 0; gr < nb_granules; gr++) {
1239 for (ch = 0; ch <
s->nb_channels; ch++) {
1240 ff_dlog(
s->avctx,
"gr=%d ch=%d: side_info\n", gr, ch);
1241 g = &
s->granules[ch][gr];
1244 if (
g->big_values > 288) {
1254 g->global_gain -= 2;
1260 if (blocksplit_flag) {
1262 if (
g->block_type == 0) {
1267 for (
i = 0;
i < 2;
i++)
1269 for (
i = 0;
i < 3;
i++)
1273 int region_address1, region_address2;
1275 g->switch_point = 0;
1276 for (
i = 0;
i < 3;
i++)
1281 ff_dlog(
s->avctx,
"region1=%d region2=%d\n",
1282 region_address1, region_address2);
1293 ff_dlog(
s->avctx,
"block_type=%d switch_point=%d\n",
1294 g->block_type,
g->switch_point);
1305 ff_dlog(
s->avctx,
"seekback:%d, lastbuf:%d\n",
1306 main_data_begin,
s->last_buf_size);
1308 memcpy(
s->last_buf +
s->last_buf_size, ptr,
s->extrasize);
1311 s->last_buf_size <<= 3;
1312 for (gr = 0; gr < nb_granules && (
s->last_buf_size >> 3) < main_data_begin; gr++) {
1313 for (ch = 0; ch <
s->nb_channels; ch++) {
1314 g = &
s->granules[ch][gr];
1315 s->last_buf_size +=
g->part2_3_length;
1316 memset(
g->sb_hybrid, 0,
sizeof(
g->sb_hybrid));
1320 skip =
s->last_buf_size - 8 * main_data_begin;
1321 if (
skip >=
s->gb.size_in_bits -
s->extrasize * 8 &&
s->in_gb.buffer) {
1324 s->in_gb.buffer =
NULL;
1334 for (; gr < nb_granules; gr++) {
1335 for (ch = 0; ch <
s->nb_channels; ch++) {
1336 g = &
s->granules[ch][gr];
1341 int slen, slen1, slen2;
1346 ff_dlog(
s->avctx,
"slen1=%d slen2=%d\n", slen1, slen2);
1347 if (
g->block_type == 2) {
1348 n =
g->switch_point ? 17 : 18;
1351 for (
i = 0;
i < n;
i++)
1352 g->scale_factors[j++] =
get_bits(&
s->gb, slen1);
1354 for (
i = 0;
i < n;
i++)
1355 g->scale_factors[j++] = 0;
1358 for (
i = 0;
i < 18;
i++)
1359 g->scale_factors[j++] =
get_bits(&
s->gb, slen2);
1360 for (
i = 0;
i < 3;
i++)
1361 g->scale_factors[j++] = 0;
1363 for (
i = 0;
i < 21;
i++)
1364 g->scale_factors[j++] = 0;
1367 sc =
s->granules[ch][0].scale_factors;
1369 for (k = 0; k < 4; k++) {
1371 if ((
g->scfsi & (0x8 >> k)) == 0) {
1372 slen = (k < 2) ? slen1 : slen2;
1374 for (
i = 0;
i < n;
i++)
1375 g->scale_factors[j++] =
get_bits(&
s->gb, slen);
1377 for (
i = 0;
i < n;
i++)
1378 g->scale_factors[j++] = 0;
1382 for (
i = 0;
i < n;
i++) {
1383 g->scale_factors[j] = sc[j];
1388 g->scale_factors[j++] = 0;
1391 int tindex, tindex2, slen[4], sl, sf;
1394 if (
g->block_type == 2)
1395 tindex =
g->switch_point ? 2 : 1;
1399 sf =
g->scalefac_compress;
1406 }
else if (sf < 244) {
1418 }
else if (sf < 500) {
1429 for (k = 0; k < 4; k++) {
1433 for (
i = 0;
i < n;
i++)
1434 g->scale_factors[j++] =
get_bits(&
s->gb, sl);
1436 for (
i = 0;
i < n;
i++)
1437 g->scale_factors[j++] = 0;
1442 g->scale_factors[j] = 0;
1454 for (ch = 0; ch <
s->nb_channels; ch++) {
1455 g = &
s->granules[ch][gr];
1464 return nb_granules * 18;
1468 const uint8_t *buf,
int buf_size)
1470 int i, nb_frames, ch,
ret;
1474 if (
s->error_protection)
1479 s->avctx->frame_size = 384;
1483 s->avctx->frame_size = 1152;
1487 s->avctx->frame_size =
s->lsf ? 576 : 1152;
1492 if (
s->in_gb.buffer) {
1501 s->in_gb.buffer =
NULL;
1513 av_assert1(i <= buf_size - HEADER_SIZE && i >= 0);
1514 memcpy(
s->last_buf +
s->last_buf_size,
s->gb.buffer + buf_size -
HEADER_SIZE -
i,
i);
1515 s->last_buf_size +=
i;
1524 s->frame->nb_samples =
s->avctx->frame_size;
1531 for (ch = 0; ch <
s->nb_channels; ch++) {
1537 samples_ptr =
samples[0] + ch;
1538 sample_stride =
s->nb_channels;
1540 for (
i = 0;
i < nb_frames;
i++) {
1541 RENAME(ff_mpa_synth_filter)(&
s->mpadsp,
s->synth_buf[ch],
1542 &(
s->synth_buf_offset[ch]),
1543 RENAME(ff_mpa_synth_window),
1544 &
s->dither_state, samples_ptr,
1545 sample_stride,
s->sb_samples[ch][
i]);
1546 samples_ptr += 32 * sample_stride;
1550 return nb_frames * 32 *
sizeof(
OUT_INT) *
s->nb_channels;
1554 int *got_frame_ptr,
AVPacket *avpkt)
1556 const uint8_t *buf = avpkt->
data;
1557 int buf_size = avpkt->
size;
1563 while(buf_size && !*buf){
1575 return buf_size + skipped;
1581 }
else if (
ret == 1) {
1593 if (
s->frame_size <= 0) {
1596 }
else if (
s->frame_size < buf_size) {
1598 buf_size=
s->frame_size;
1621 return buf_size + skipped;
1626 memset(
ctx->synth_buf, 0,
sizeof(
ctx->synth_buf));
1627 memset(
ctx->mdct_buf, 0,
sizeof(
ctx->mdct_buf));
1628 ctx->last_buf_size = 0;
1629 ctx->dither_state = 0;
1637 #if CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER
1639 int *got_frame_ptr,
AVPacket *avpkt)
1641 const uint8_t *buf = avpkt->
data;
1642 int buf_size = avpkt->
size;
1675 s->frame_size =
len;
1691 #if CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER
1696 typedef struct MP3On4DecodeContext {
1699 const uint8_t *coff;
1701 } MP3On4DecodeContext;
1708 static const uint8_t mp3Frames[8] = { 0, 1, 1, 2, 3, 3, 4, 5 };
1711 static const uint8_t chan_offset[8][5] = {
1723 static const int16_t chan_layout[8] = {
1739 for (
i = 0;
i <
s->frames;
i++)
1769 s->syncword = 0xffe00000;
1771 s->syncword = 0xfff00000;
1780 if (!
s->mp3decctx[0])
1789 s->mp3decctx[0]->adu_mode = 1;
1794 for (
i = 1;
i <
s->frames;
i++) {
1796 if (!
s->mp3decctx[
i])
1798 s->mp3decctx[
i]->adu_mode = 1;
1799 s->mp3decctx[
i]->avctx = avctx;
1800 s->mp3decctx[
i]->mpadsp =
s->mp3decctx[0]->mpadsp;
1801 s->mp3decctx[
i]->butterflies_float =
s->mp3decctx[0]->butterflies_float;
1813 for (
i = 0;
i <
s->frames;
i++)
1819 int *got_frame_ptr,
AVPacket *avpkt)
1821 const uint8_t *buf = avpkt->
data;
1822 int buf_size = avpkt->
size;
1844 for (fr = 0; fr <
s->frames; fr++) {
1847 m =
s->mp3decctx[fr];
1868 ch += m->nb_channels;
1870 outptr[0] = out_samples[
s->coff[fr]];
1871 if (m->nb_channels > 1)
1872 outptr[1] = out_samples[
s->coff[fr] + 1];
1877 if (m->nb_channels > 1)
int frame_size
Number of samples per channel in an audio frame.
uint8_t scale_factors[40]
MPA_DECODE_HEADER uint8_t last_buf[LAST_BUF_SIZE]
static void compute_band_indexes(MPADecodeContext *s, GranuleDef *g)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
static int l3_unscale(int value, int exponent)
static void init_short_region(MPADecodeContext *s, GranuleDef *g)
#define AV_EF_EXPLODE
abort decoding on minor error detection
int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf)
static int get_bits_left(GetBitContext *gb)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
void(* butterflies_float)(float *restrict v1, float *restrict v2, int len)
Calculate the sum and difference of two vectors of floats.
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
#define AV_CHANNEL_LAYOUT_STEREO
int sample_rate
samples per second
GranuleDef granules[2][2]
static int l1_unscale(int n, int mant, int scale_factor)
#define AV_CH_LAYOUT_MONO
static void mp_flush(MPADecodeContext *ctx)
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
static int get_bits_count(const GetBitContext *s)
av_cold void ff_mpadsp_init(MPADSPContext *s)
This structure describes decoded (raw) audio or video data.
int adu_mode
0 for standard mp3, 1 for adu formatted mp3
void(* butterflies_float)(float *restrict v1, float *restrict v2, int len)
static const uint16_t table[]
static int mp_decode_frame(MPADecodeContext *s, OUT_INT **samples, const uint8_t *buf, int buf_size)
static void compute_antialias(MPADecodeContext *s, GranuleDef *g)
static INTFLOAT is_table_lsf[2][2][16]
const int ff_mpa_quant_bits[17]
int nb_channels
Number of channels in this layout.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static float win(SuperEqualizerContext *s, float n, int N)
static av_cold void mpegaudio_tableinit(void)
static void skip_bits(GetBitContext *s, int n)
int8_t ff_table_4_3_exp[TABLE_4_3_SIZE]
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static void exponents_from_scale_factors(MPADecodeContext *s, GranuleDef *g, int16_t *exponents)
static void reorder_block(MPADecodeContext *s, GranuleDef *g)
static int mp_decode_layer3(MPADecodeContext *s)
AVChannelLayout ch_layout
Audio channel layout.
if it could not because there are no more frames
#define AV_EF_BITSTREAM
detect bitstream specification deviations
int flags
AV_CODEC_FLAG_*.
static double val(void *priv, double ch)
#define AV_CH_LAYOUT_STEREO
const uint8_t ff_slen_table[2][16]
static int bit_alloc(AC3EncodeContext *s, int snr_offset)
Run the bit allocation with a given SNR offset.
static int ff_thread_once(char *control, void(*routine)(void))
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const int ff_mpa_quant_steps[17]
static void compute_imdct(MPADecodeContext *s, GranuleDef *g, INTFLOAT *sb_samples, INTFLOAT *mdct_buf)
static void imdct12(INTFLOAT *out, SUINTFLOAT *in)
#define MODE_EXT_MS_STEREO
const uint8_t ff_mpa_huff_data[32][2]
int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf, int size, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration.
void ff_mpegaudiodec_common_init_static(void)
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static int64_t fsize(FILE *f)
const unsigned char *const ff_mpa_alloc_tables[5]
#define SPLIT(dst, sf, n)
static void compute_stereo(MPADecodeContext *s, GranuleDef *g0, GranuleDef *g1)
static int huffman_decode(MPADecodeContext *s, GranuleDef *g, int16_t *exponents, int end_pos2)
int64_t bit_rate
the average bitrate
int sb_hybrid[SBLIMIT *18]
static unsigned int get_bits1(GetBitContext *s)
static int mp_decode_layer1(MPADecodeContext *s)
#define AV_CH_LAYOUT_5POINT1
#define AV_EF_CRCCHECK
Verify checksums embedded in the bitstream (could be of either encoded or decoded data,...
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
An AVChannelLayout holds information about the channel layout of audio data.
#define DECLARE_ALIGNED(n, t, v)
static int shift(int a, int b)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static av_always_inline void lsf_sf_expand(int *slen, int sf, int n1, int n2, int n3)
int16_t *const ff_division_tabs[4]
enum AVSampleFormat sample_fmt
audio sample format
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
#define READ_FLIP_SIGN(dst, src)
static const uint8_t header[24]
uint32_t free_format_next_header
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
enum AVSampleFormat request_sample_fmt
desired sample format
static av_cold void decode_init_static(void)
static int handle_crc(MPADecodeContext *s, int sec_len)
#define AV_LOG_INFO
Standard information.
static int32_t scale_factor_mult[15][3]
#define AV_CH_LAYOUT_5POINT0
static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos, int *end_pos2)
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define i(width, name, range_min, range_max)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
const int ff_mpa_sblimit_table[5]
static const int32_t is_table[2][16]
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define AV_CH_LAYOUT_7POINT1
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
MPA_INT synth_buf[MPA_MAX_CHANNELS][512 *2]
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
uint16_t ff_band_index_long[9][23]
static int mod(int a, int b)
Modulo operation with only positive remainders.
static double bound(const double threshold, const double val)
#define AV_EF_AGGRESSIVE
consider things that a sane encoder/muxer should not do as an error
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
#define AV_CH_LAYOUT_SURROUND
static const uint8_t * align_get_bits(GetBitContext *s)
uint32_t ff_table_4_3_value[TABLE_4_3_SIZE]
static const int16_t steps[16]
main external API structure.
int synth_buf_offset[MPA_MAX_CHANNELS]
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
const uint8_t ff_mpa_pretab[2][22]
static void region_offset2size(GranuleDef *g)
Convert region offsets to region sizes and truncate size to big_values.
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
static void init_long_region(MPADecodeContext *s, GranuleDef *g, int ra1, int ra2)
#define MODE_EXT_I_STEREO
static int alloc_table(VLC *vlc, int size, int use_static)
const VLCElem * ff_huff_vlc[16]
static void flush(AVCodecContext *avctx)
Filter the word “frame” indicates either a video frame or a group of audio samples
static int l2_unscale_group(int steps, int mant, int scale_factor)
int sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]
uint8_t count1table_select
const uint8_t ff_band_size_long[9][22]
uint16_t ff_scale_factor_modshift[64]
static av_always_inline int get_bitsz(GetBitContext *s, int n)
Read 0-25 bits.
#define AV_EF_BUFFER
detect improper bitstream length
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
#define avpriv_request_sample(...)
#define AV_CHANNEL_LAYOUT_MONO
static void scale(int *out, const int *in, const int w, const int h, const int shift)
This structure stores compressed data.
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
const uint8_t ff_lsf_nsf_table[6][3][4]
static av_cold int decode_init(AVCodecContext *avctx)
#define AV_CH_LAYOUT_4POINT0
static const int32_t scale_factor_mult2[3][3]
const uint8_t ff_band_size_short[9][13]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
INTFLOAT mdct_buf[MPA_MAX_CHANNELS][SBLIMIT *18]
static int decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
#define MPA_MAX_CODED_FRAME_SIZE
static void BS_FUNC() skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
static int mp_decode_layer2(MPADecodeContext *s)