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)();
322 #define C3 FIXHR(0.86602540378443864676/2)
323 #define C4 FIXHR(0.70710678118654752439/2) //0.5 / cos(pi*(9)/36)
324 #define C5 FIXHR(0.51763809020504152469/2) //0.5 / cos(pi*(5)/36)
325 #define C6 FIXHR(1.93185165257813657349/4) //0.5 / cos(pi*(15)/36)
331 SUINTFLOAT in0, in1, in2, in3, in4, in5, t1, t2;
334 in1 = in[1*3] + in[0*3];
335 in2 = in[2*3] + in[1*3];
336 in3 = in[3*3] + in[2*3];
337 in4 = in[4*3] + in[3*3];
338 in5 = in[5*3] + in[4*3];
374 int sec_byte_len = sec_len >> 3;
375 int sec_rem_bits = sec_len & 7;
378 uint32_t crc_val =
av_crc(crc_tab, UINT16_MAX, &buf[2], 2);
379 crc_val =
av_crc(crc_tab, crc_val, &buf[6], sec_byte_len);
382 ((buf[6 + sec_byte_len] & (0xFF00U >> sec_rem_bits)) << 24) +
383 ((
s->crc << 16) >> sec_rem_bits));
385 crc_val =
av_crc(crc_tab, crc_val, tmp_buf, 3);
399 int bound,
i, v, n, ch, j, mant;
409 bound = (
s->mode_ext + 1) * 4;
415 for (ch = 0; ch <
s->nb_channels; ch++) {
424 for (ch = 0; ch <
s->nb_channels; ch++) {
425 if (allocation[ch][
i])
430 if (allocation[0][
i]) {
437 for (j = 0; j < 12; j++) {
439 for (ch = 0; ch <
s->nb_channels; ch++) {
440 n = allocation[ch][
i];
447 s->sb_samples[ch][j][
i] = v;
451 n = allocation[0][
i];
455 s->sb_samples[0][j][
i] = v;
457 s->sb_samples[1][j][
i] = v;
459 s->sb_samples[0][j][
i] = 0;
460 s->sb_samples[1][j][
i] = 0;
480 s->sample_rate,
s->lsf);
485 bound = (
s->mode_ext + 1) * 4;
499 for (ch = 0; ch <
s->nb_channels; ch++)
501 j += 1 << bit_alloc_bits;
508 j += 1 << bit_alloc_bits;
512 for (
i = 0;
i < sblimit;
i++) {
513 for (ch = 0; ch <
s->nb_channels; ch++) {
524 for (
i = 0;
i < sblimit;
i++) {
525 for (ch = 0; ch <
s->nb_channels; ch++) {
527 sf = scale_factors[ch][
i];
528 switch (scale_code[ch][
i]) {
556 for (k = 0; k < 3; k++) {
557 for (l = 0; l < 12; l += 3) {
561 for (ch = 0; ch <
s->nb_channels; ch++) {
564 scale = scale_factors[ch][
i][k];
574 s->sb_samples[ch][k * 12 + l + 0][
i] =
576 s->sb_samples[ch][k * 12 + l + 1][
i] =
578 s->sb_samples[ch][k * 12 + l + 2][
i] =
581 for (m = 0; m < 3; m++) {
584 s->sb_samples[ch][k * 12 + l + m][
i] = v;
588 s->sb_samples[ch][k * 12 + l + 0][
i] = 0;
589 s->sb_samples[ch][k * 12 + l + 1][
i] = 0;
590 s->sb_samples[ch][k * 12 + l + 2][
i] = 0;
594 j += 1 << bit_alloc_bits;
601 int mant, scale0, scale1;
602 scale0 = scale_factors[0][
i][k];
603 scale1 = scale_factors[1][
i][k];
612 s->sb_samples[0][k * 12 + l + 0][
i] =
614 s->sb_samples[1][k * 12 + l + 0][
i] =
618 s->sb_samples[0][k * 12 + l + 1][
i] =
620 s->sb_samples[1][k * 12 + l + 1][
i] =
622 s->sb_samples[0][k * 12 + l + 2][
i] =
624 s->sb_samples[1][k * 12 + l + 2][
i] =
627 for (m = 0; m < 3; m++) {
629 s->sb_samples[0][k * 12 + l + m][
i] =
631 s->sb_samples[1][k * 12 + l + m][
i] =
636 s->sb_samples[0][k * 12 + l + 0][
i] = 0;
637 s->sb_samples[0][k * 12 + l + 1][
i] = 0;
638 s->sb_samples[0][k * 12 + l + 2][
i] = 0;
639 s->sb_samples[1][k * 12 + l + 0][
i] = 0;
640 s->sb_samples[1][k * 12 + l + 1][
i] = 0;
641 s->sb_samples[1][k * 12 + l + 2][
i] = 0;
644 j += 1 << bit_alloc_bits;
648 for (ch = 0; ch <
s->nb_channels; ch++) {
649 s->sb_samples[ch][k * 12 + l + 0][
i] = 0;
650 s->sb_samples[ch][k * 12 + l + 1][
i] = 0;
651 s->sb_samples[ch][k * 12 + l + 2][
i] = 0;
659 #define SPLIT(dst,sf,n) \
661 int m = (sf * 171) >> 9; \
664 } else if (n == 4) { \
667 } else if (n == 5) { \
668 int m = (sf * 205) >> 10; \
671 } else if (n == 6) { \
672 int m = (sf * 171) >> 10; \
682 SPLIT(slen[3], sf, n3)
683 SPLIT(slen[2], sf, n2)
684 SPLIT(slen[1], sf, n1)
691 const uint8_t *bstab, *pretab;
692 int len,
i, j, k, l, v0,
shift, gain, gains[3];
696 gain =
g->global_gain - 210;
697 shift =
g->scalefac_scale + 1;
701 for (
i = 0;
i <
g->long_end;
i++) {
702 v0 = gain - ((
g->scale_factors[
i] + pretab[
i]) <<
shift) + 400;
704 for (j =
len; j > 0; j--)
708 if (
g->short_start < 13) {
710 gains[0] = gain - (
g->subblock_gain[0] << 3);
711 gains[1] = gain - (
g->subblock_gain[1] << 3);
712 gains[2] = gain - (
g->subblock_gain[2] << 3);
714 for (
i =
g->short_start;
i < 13;
i++) {
716 for (l = 0; l < 3; l++) {
717 v0 = gains[l] - (
g->scale_factors[k++] <<
shift) + 400;
718 for (j =
len; j > 0; j--)
728 if (
s->in_gb.buffer && *
pos >=
s->gb.size_in_bits -
s->extrasize * 8) {
730 s->in_gb.buffer =
NULL;
747 #define READ_FLIP_SIGN(dst,src) \
748 v = AV_RN32A(src) ^ (get_bits1(&s->gb) << 31); \
751 #define READ_FLIP_SIGN(dst,src) \
752 v = -get_bits1(&s->gb); \
753 *(dst) = (*(src) ^ v) - v;
757 int16_t *exponents,
int end_pos2)
763 int end_pos =
FFMIN(end_pos2,
s->gb.size_in_bits -
s->extrasize * 8);
767 for (
i = 0;
i < 3;
i++) {
769 int j, k, l, linbits;
770 j =
g->region_size[
i];
774 k =
g->table_select[
i];
779 memset(&
g->sb_hybrid[s_index], 0,
sizeof(*
g->sb_hybrid) * 2 * j);
799 g->sb_hybrid[s_index ] =
800 g->sb_hybrid[s_index + 1] = 0;
805 exponent= exponents[s_index];
807 ff_dlog(
s->avctx,
"region=%d n=%d y=%d exp=%d\n",
808 i,
g->region_size[
i] - j, y, exponent);
819 g->sb_hybrid[s_index] = v;
828 g->sb_hybrid[s_index + 1] = v;
841 g->sb_hybrid[s_index+!!y] = v;
843 g->sb_hybrid[s_index + !y] = 0;
852 while (s_index <= 572) {
855 if (
pos >= end_pos) {
856 if (
pos > end_pos2 && last_pos) {
873 ff_dlog(
s->avctx,
"t=%d code=%d\n",
g->count1table_select,
code);
874 g->sb_hybrid[s_index + 0] =
875 g->sb_hybrid[s_index + 1] =
876 g->sb_hybrid[s_index + 2] =
877 g->sb_hybrid[s_index + 3] = 0;
879 static const int idxtab[16] = { 3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0 };
881 int pos = s_index + idxtab[
code];
896 memset(&
g->sb_hybrid[s_index], 0,
sizeof(*
g->sb_hybrid) * (576 - s_index));
914 if (
g->block_type != 2)
917 if (
g->switch_point) {
918 if (
s->sample_rate_index != 8)
919 ptr =
g->sb_hybrid + 36;
921 ptr =
g->sb_hybrid + 72;
926 for (
i =
g->short_start;
i < 13;
i++) {
930 for (j =
len; j > 0; j--) {
937 memcpy(ptr1,
tmp,
len * 3 *
sizeof(*ptr1));
941 #define ISQRT2 FIXR(0.70710678118654752440)
946 int sf_max, sf,
len, non_zero_found;
950 int non_zero_found_short[3];
965 non_zero_found_short[0] = 0;
966 non_zero_found_short[1] = 0;
967 non_zero_found_short[2] = 0;
974 for (l = 2; l >= 0; l--) {
977 if (!non_zero_found_short[l]) {
979 for (j = 0; j <
len; j++) {
981 non_zero_found_short[l] = 1;
991 for (j = 0; j <
len; j++) {
1001 for (j = 0; j <
len; j++) {
1012 non_zero_found = non_zero_found_short[0] |
1013 non_zero_found_short[1] |
1014 non_zero_found_short[2];
1021 if (!non_zero_found) {
1022 for (j = 0; j <
len; j++) {
1029 k = (
i == 21) ? 20 :
i;
1035 for (j = 0; j <
len; j++) {
1045 for (j = 0; j <
len; j++) {
1063 for (
i = 0;
i < 576;
i++) {
1066 tab0[
i] = tmp0 + tmp1;
1067 tab1[
i] = tmp0 - tmp1;
1083 #ifndef compute_antialias
1085 #define AA(j) do { \
1086 float tmp0 = ptr[-1-j]; \
1087 float tmp1 = ptr[ j]; \
1088 ptr[-1-j] = tmp0 * csa_table[j][0] - tmp1 * csa_table[j][1]; \
1089 ptr[ j] = tmp0 * csa_table[j][1] + tmp1 * csa_table[j][0]; \
1092 #define AA(j) do { \
1093 SUINT tmp0 = ptr[-1-j]; \
1094 SUINT tmp1 = ptr[ j]; \
1095 SUINT tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]); \
1096 ptr[-1-j] = 4 * (tmp2 - MULH(tmp1, csa_table[j][2])); \
1097 ptr[ j] = 4 * (tmp2 + MULH(tmp0, csa_table[j][3])); \
1107 if (
g->block_type == 2) {
1108 if (!
g->switch_point)
1116 ptr =
g->sb_hybrid + 18;
1117 for (
i = n;
i > 0;
i--) {
1137 int i, j, mdct_long_end, sblimit;
1140 ptr =
g->sb_hybrid + 576;
1141 ptr1 =
g->sb_hybrid + 2 * 18;
1142 while (ptr >= ptr1) {
1146 if (
p[0] |
p[1] |
p[2] |
p[3] |
p[4] |
p[5])
1149 sblimit = ((ptr -
g->sb_hybrid) / 18) + 1;
1151 if (
g->block_type == 2) {
1153 if (
g->switch_point)
1158 mdct_long_end = sblimit;
1161 s->mpadsp.RENAME(imdct36_blocks)(sb_samples, mdct_buf,
g->sb_hybrid,
1162 mdct_long_end,
g->switch_point,
1165 buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1166 ptr =
g->sb_hybrid + 18 * mdct_long_end;
1168 for (j = mdct_long_end; j < sblimit; j++) {
1170 win =
RENAME(ff_mdct_win)[2 + (4 & -(j & 1))];
1171 out_ptr = sb_samples + j;
1173 for (
i = 0;
i < 6;
i++) {
1174 *out_ptr = buf[4*
i];
1178 for (
i = 0;
i < 6;
i++) {
1179 *out_ptr =
MULH3(out2[
i ],
win[
i ], 1) + buf[4*(
i + 6*1)];
1180 buf[4*(
i + 6*2)] =
MULH3(out2[
i + 6],
win[
i + 6], 1);
1184 for (
i = 0;
i < 6;
i++) {
1185 *out_ptr =
MULH3(out2[
i ],
win[
i ], 1) + buf[4*(
i + 6*2)];
1186 buf[4*(
i + 6*0)] =
MULH3(out2[
i + 6],
win[
i + 6], 1);
1190 for (
i = 0;
i < 6;
i++) {
1191 buf[4*(
i + 6*0)] =
MULH3(out2[
i ],
win[
i ], 1) + buf[4*(
i + 6*0)];
1192 buf[4*(
i + 6*1)] =
MULH3(out2[
i + 6],
win[
i + 6], 1);
1193 buf[4*(
i + 6*2)] = 0;
1196 buf += (j&3) != 3 ? 1 : (4*18-3);
1199 for (j = sblimit; j <
SBLIMIT; j++) {
1201 out_ptr = sb_samples + j;
1202 for (
i = 0;
i < 18;
i++) {
1203 *out_ptr = buf[4*
i];
1207 buf += (j&3) != 3 ? 1 : (4*18-3);
1214 int nb_granules, main_data_begin;
1215 int gr, ch, blocksplit_flag,
i, j, k, n, bits_pos;
1217 int16_t exponents[576];
1229 if (
s->nb_channels == 2)
1234 for (ch = 0; ch <
s->nb_channels; ch++) {
1235 s->granules[ch][0].scfsi = 0;
1236 s->granules[ch][1].scfsi =
get_bits(&
s->gb, 4);
1242 for (gr = 0; gr < nb_granules; gr++) {
1243 for (ch = 0; ch <
s->nb_channels; ch++) {
1244 ff_dlog(
s->avctx,
"gr=%d ch=%d: side_info\n", gr, ch);
1245 g = &
s->granules[ch][gr];
1248 if (
g->big_values > 288) {
1258 g->global_gain -= 2;
1264 if (blocksplit_flag) {
1266 if (
g->block_type == 0) {
1271 for (
i = 0;
i < 2;
i++)
1273 for (
i = 0;
i < 3;
i++)
1277 int region_address1, region_address2;
1279 g->switch_point = 0;
1280 for (
i = 0;
i < 3;
i++)
1285 ff_dlog(
s->avctx,
"region1=%d region2=%d\n",
1286 region_address1, region_address2);
1297 ff_dlog(
s->avctx,
"block_type=%d switch_point=%d\n",
1298 g->block_type,
g->switch_point);
1309 ff_dlog(
s->avctx,
"seekback:%d, lastbuf:%d\n",
1310 main_data_begin,
s->last_buf_size);
1312 memcpy(
s->last_buf +
s->last_buf_size, ptr,
s->extrasize);
1315 s->last_buf_size <<= 3;
1316 for (gr = 0; gr < nb_granules && (
s->last_buf_size >> 3) < main_data_begin; gr++) {
1317 for (ch = 0; ch <
s->nb_channels; ch++) {
1318 g = &
s->granules[ch][gr];
1319 s->last_buf_size +=
g->part2_3_length;
1320 memset(
g->sb_hybrid, 0,
sizeof(
g->sb_hybrid));
1324 skip =
s->last_buf_size - 8 * main_data_begin;
1325 if (
skip >=
s->gb.size_in_bits -
s->extrasize * 8 &&
s->in_gb.buffer) {
1328 s->in_gb.buffer =
NULL;
1338 for (; gr < nb_granules; gr++) {
1339 for (ch = 0; ch <
s->nb_channels; ch++) {
1340 g = &
s->granules[ch][gr];
1345 int slen, slen1, slen2;
1350 ff_dlog(
s->avctx,
"slen1=%d slen2=%d\n", slen1, slen2);
1351 if (
g->block_type == 2) {
1352 n =
g->switch_point ? 17 : 18;
1355 for (
i = 0;
i < n;
i++)
1356 g->scale_factors[j++] =
get_bits(&
s->gb, slen1);
1358 for (
i = 0;
i < n;
i++)
1359 g->scale_factors[j++] = 0;
1362 for (
i = 0;
i < 18;
i++)
1363 g->scale_factors[j++] =
get_bits(&
s->gb, slen2);
1364 for (
i = 0;
i < 3;
i++)
1365 g->scale_factors[j++] = 0;
1367 for (
i = 0;
i < 21;
i++)
1368 g->scale_factors[j++] = 0;
1371 sc =
s->granules[ch][0].scale_factors;
1373 for (k = 0; k < 4; k++) {
1375 if ((
g->scfsi & (0x8 >> k)) == 0) {
1376 slen = (k < 2) ? slen1 : slen2;
1378 for (
i = 0;
i < n;
i++)
1379 g->scale_factors[j++] =
get_bits(&
s->gb, slen);
1381 for (
i = 0;
i < n;
i++)
1382 g->scale_factors[j++] = 0;
1386 for (
i = 0;
i < n;
i++) {
1387 g->scale_factors[j] = sc[j];
1392 g->scale_factors[j++] = 0;
1395 int tindex, tindex2, slen[4], sl, sf;
1398 if (
g->block_type == 2)
1399 tindex =
g->switch_point ? 2 : 1;
1403 sf =
g->scalefac_compress;
1410 }
else if (sf < 244) {
1422 }
else if (sf < 500) {
1433 for (k = 0; k < 4; k++) {
1437 for (
i = 0;
i < n;
i++)
1438 g->scale_factors[j++] =
get_bits(&
s->gb, sl);
1440 for (
i = 0;
i < n;
i++)
1441 g->scale_factors[j++] = 0;
1446 g->scale_factors[j] = 0;
1458 for (ch = 0; ch <
s->nb_channels; ch++) {
1459 g = &
s->granules[ch][gr];
1468 return nb_granules * 18;
1472 const uint8_t *buf,
int buf_size)
1474 int i, nb_frames, ch,
ret;
1478 if (
s->error_protection)
1483 s->avctx->frame_size = 384;
1487 s->avctx->frame_size = 1152;
1491 s->avctx->frame_size =
s->lsf ? 576 : 1152;
1496 if (
s->in_gb.buffer) {
1505 s->in_gb.buffer =
NULL;
1517 av_assert1(i <= buf_size - HEADER_SIZE && i >= 0);
1518 memcpy(
s->last_buf +
s->last_buf_size,
s->gb.buffer + buf_size -
HEADER_SIZE -
i,
i);
1519 s->last_buf_size +=
i;
1528 s->frame->nb_samples =
s->avctx->frame_size;
1535 for (ch = 0; ch <
s->nb_channels; ch++) {
1541 samples_ptr =
samples[0] + ch;
1542 sample_stride =
s->nb_channels;
1544 for (
i = 0;
i < nb_frames;
i++) {
1545 RENAME(ff_mpa_synth_filter)(&
s->mpadsp,
s->synth_buf[ch],
1546 &(
s->synth_buf_offset[ch]),
1547 RENAME(ff_mpa_synth_window),
1548 &
s->dither_state, samples_ptr,
1549 sample_stride,
s->sb_samples[ch][
i]);
1550 samples_ptr += 32 * sample_stride;
1554 return nb_frames * 32 *
sizeof(
OUT_INT) *
s->nb_channels;
1558 int *got_frame_ptr,
AVPacket *avpkt)
1560 const uint8_t *buf = avpkt->
data;
1561 int buf_size = avpkt->
size;
1567 while(buf_size && !*buf){
1579 return buf_size + skipped;
1585 }
else if (
ret == 1) {
1597 if (
s->frame_size <= 0) {
1600 }
else if (
s->frame_size < buf_size) {
1602 buf_size=
s->frame_size;
1625 return buf_size + skipped;
1630 memset(
ctx->synth_buf, 0,
sizeof(
ctx->synth_buf));
1631 memset(
ctx->mdct_buf, 0,
sizeof(
ctx->mdct_buf));
1632 ctx->last_buf_size = 0;
1633 ctx->dither_state = 0;
1641 #if CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER
1643 int *got_frame_ptr,
AVPacket *avpkt)
1645 const uint8_t *buf = avpkt->
data;
1646 int buf_size = avpkt->
size;
1679 s->frame_size =
len;
1695 #if CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER
1700 typedef struct MP3On4DecodeContext {
1703 const uint8_t *coff;
1705 } MP3On4DecodeContext;
1712 static const uint8_t mp3Frames[8] = { 0, 1, 1, 2, 3, 3, 4, 5 };
1715 static const uint8_t chan_offset[8][5] = {
1727 static const int16_t chan_layout[8] = {
1771 s->syncword = 0xffe00000;
1773 s->syncword = 0xfff00000;
1779 s->mp3decctx[0] =
av_calloc(
s->frames,
sizeof(*
s->mp3decctx[0]));
1780 if (!
s->mp3decctx[0])
1785 s->mp3decctx[0]->adu_mode = 1;
1790 for (
i = 1;
i <
s->frames;
i++) {
1791 s->mp3decctx[
i] =
s->mp3decctx[0] +
i;
1792 s->mp3decctx[
i]->adu_mode = 1;
1793 s->mp3decctx[
i]->avctx = avctx;
1794 s->mp3decctx[
i]->mpadsp =
s->mp3decctx[0]->mpadsp;
1796 s->mp3decctx[
i]->butterflies_float =
s->mp3decctx[0]->butterflies_float;
1809 for (
i = 0;
i <
s->frames;
i++)
1815 int *got_frame_ptr,
AVPacket *avpkt)
1817 const uint8_t *buf = avpkt->
data;
1818 int buf_size = avpkt->
size;
1840 for (fr = 0; fr <
s->frames; fr++) {
1843 m =
s->mp3decctx[fr];
1864 ch += m->nb_channels;
1866 outptr[0] = out_samples[
s->coff[fr]];
1867 if (m->nb_channels > 1)
1868 outptr[1] = out_samples[
s->coff[fr] + 1];
1873 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
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)
static av_cold int decode_ctx_init(AVCodecContext *avctx, MPADecodeContext *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 av_cold void flush(AVCodecContext *avctx)
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
static av_cold void mp_flush(MPADecodeContext *ctx)
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]
uint16_t ff_band_index_long[9][23]
void * av_calloc(size_t nmemb, size_t size)
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]
Filter the word “frame” indicates either a video frame or a group of audio samples
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
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)