1 /*
2 * MPEG Audio decoder
3 * Copyright (c) 2001, 2002 Fabrice Bellard
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * MPEG Audio decoder
25 */
26
37
38 /*
39 * TODO:
40 * - test lsf / mpeg25 extensively.
41 */
42
45
46 #define BACKSTEP_SIZE 512
48 #define LAST_BUF_SIZE 2 * BACKSTEP_SIZE + EXTRABYTES
49
50 /* layer 3 "granule" */
63 int region_size[3];
/* number of huffman codes in each region */
69
74 /* next header (used in free format parsing) */
83 int adu_mode;
///< 0 for standard mp3, 1 for adu formatted mp3
91
93
96
97 /* vlc structure for decoding layer 3 huffman tables */
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
106 };
110 /* computed from band_size_long */
113 /* intensity stereo coef table */
117
121
124 };
125
126 /* lower 2 bits: modulo 3, higher bits: shift */
128 /* [i][j]: 2^(-j/3) * FRAC_ONE * 2^(i+2) / (2^(i+2) - 1) */
130 /* mult table for layer 2 group quantization */
131
132 #define SCALE_GEN(v) \
133 { FIXR_OLD(1.0 * (v)), FIXR_OLD(0.7937005259 * (v)), FIXR_OLD(0.6299605249 * (v)) }
134
139 };
140
141 /**
142 * Convert region offsets to region sizes and truncate
143 * size to big_values.
144 */
146 {
147 int i, k, j = 0;
149 for (i = 0; i < 3; i++) {
152 j = k;
153 }
154 }
155
157 {
159 if (s->sample_rate_index != 8)
161 else
163 } else {
164 if (s->sample_rate_index <= 2)
166 else if (s->sample_rate_index != 8)
168 else
170 }
172 }
173
175 int ra1, int ra2)
176 {
177 int l;
179 /* should not overflow */
180 l =
FFMIN(ra1 + ra2 + 2, 22);
182 }
183
185 {
188 if(s->sample_rate_index == 8)
190 /* if switched mode, we handle the 36 first samples as
191 long blocks. For 8000Hz, we handle the 72 first
192 exponents as long blocks */
193 if (s->sample_rate_index <= 2)
195 else
197
199 } else {
202 }
203 } else {
206 }
207 }
208
209 /* layer 1 unscaling */
210 /* n = number of bits of the mantissa minus 1 */
212 {
215
217 mod = shift & 3;
218 shift >>= 2;
221 /* NOTE: at this point, 1 <= shift >= 21 + 15 */
222 return (int)((val + (1LL << (shift - 1))) >> shift);
223 }
224
226 {
228
230 mod = shift & 3;
231 shift >>= 2;
232
234 /* NOTE: at this point, 0 <= shift <= 21 */
235 if (shift > 0)
236 val = (val + (1 << (shift - 1))) >> shift;
238 }
239
240 /* compute value^(4/3) * 2^(exponent/4). It normalized to FRAC_BITS */
242 {
244 int e;
245
248 e -= exponent >> 2;
249 #ifdef DEBUG
250 if(e < 1)
252 #endif
253 if (e > 31)
254 return 0;
255 m = (m + (1 << (e - 1))) >> e;
256
258 }
259
261 {
262 int i, j, k;
264
265 /* scale factors table for layer 1/2 */
266 for (i = 0; i < 64; i++) {
268 /* 1.0 (i = 3) is normalized to 2 ^ FRAC_BITS */
269 shift = i / 3;
270 mod = i % 3;
272 }
273
274 /* scale factor multiply for layer 1 */
275 for (i = 0; i < 15; i++) {
277 n = i + 2;
278 norm = ((INT64_C(1) <<
n) *
FRAC_ONE) / ((1 <<
n) - 1);
286 }
287
289
290 /* huffman decode tables */
291 offset = 0;
292 for (i = 1; i < 16; i++) {
294 int xsize, x, y;
295 uint8_t tmp_bits [512] = { 0 };
296 uint16_t tmp_codes[512] = { 0 };
297
299
300 j = 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++];
305 }
306 }
307
308 /* XXX: fail test */
312 tmp_bits, 1, 1, tmp_codes, 2, 2,
315 }
317
318 offset = 0;
319 for (i = 0; i < 2; i++) {
322 init_vlc(&huff_quad_vlc[i], i == 0 ? 7 : 4, 16,
326 }
328
329 for (i = 0; i < 9; i++) {
330 k = 0;
331 for (j = 0; j < 22; j++) {
334 }
336 }
337
338 /* compute n ^ (4/3) and store it in mantissa/exp format */
339
341
342 for (i = 0; i < 4; i++) {
345 int val1, val2, val3, steps;
348 val1 = val % steps;
349 val /= steps;
350 val2 = val % steps;
351 val3 = val / steps;
353 }
354 }
355 }
356
357
358 for (i = 0; i < 7; i++) {
359 float f;
361 if (i != 6) {
362 f = tan((
double)i *
M_PI / 12.0);
363 v =
FIXR(f / (1.0 + f));
364 } else {
366 }
369 }
370 /* invalid values */
371 for (i = 7; i < 16; i++)
373
374 for (i = 0; i < 16; i++) {
375 double f;
376 int e, k;
377
378 for (j = 0; j < 2; j++) {
379 e = -(j + 1) * ((i + 1) >> 1);
381 k = i & 1;
387 }
388 }
389
390 for (i = 0; i < 8; i++) {
391 double ci, cs, ca;
393 cs = 1.0 / sqrt(1.0 + ci * ci);
394 ca = cs * ci;
395 #if !USE_FLOATS
400 #else
405 #endif
406 }
407 }
408
409 #if USE_FLOATS
411 {
414
415 return 0;
416 }
417 #endif
418
420 {
421 static int initialized_tables = 0;
423
424 if (!initialized_tables) {
426 initialized_tables = 1;
427 }
428
430
431 #if USE_FLOATS
435 #endif
436
438
442 else
445
448
449 return 0;
450 }
451
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)
456
457 /* 12 points IMDCT. We compute it "by hand" by factorizing obvious
458 cases. */
460 {
462
463 in0 = in[0*3];
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];
469 in5 += in3;
470 in3 += in1;
471
474
475 t1 = in0 - in4;
477
478 out[ 7] =
480 out[ 1] =
482
484 in4 = in0 + in2;
485 in5 += 2*in1;
487 out[ 8] =
488 out[ 9] = in4 + in1;
489 out[ 2] =
490 out[ 3] = in4 - in1;
491
492 in0 -= in2;
494 out[ 0] =
495 out[ 5] = in0 - in5;
496 out[ 6] =
497 out[11] = in0 + in5;
498 }
499
500 /* return the number of decoded frames */
502 {
503 int bound, i, v,
n, ch, j, mant;
506
508 bound = (s->mode_ext + 1) * 4;
509 else
511
512 /* allocation bits */
513 for (i = 0; i <
bound; i++) {
514 for (ch = 0; ch < s->nb_channels; ch++) {
516 }
517 }
518 for (i = bound; i <
SBLIMIT; i++)
520
521 /* scale factors */
522 for (i = 0; i <
bound; i++) {
523 for (ch = 0; ch < s->nb_channels; ch++) {
524 if (allocation[ch][i])
526 }
527 }
528 for (i = bound; i <
SBLIMIT; i++) {
529 if (allocation[0][i]) {
532 }
533 }
534
535 /* compute samples */
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];
540 if (n) {
542 v =
l1_unscale(n, mant, scale_factors[ch][i]);
543 } else {
544 v = 0;
545 }
547 }
548 }
549 for (i = bound; i <
SBLIMIT; i++) {
550 n = allocation[0][i];
551 if (n) {
557 } else {
560 }
561 }
562 }
563 return 12;
564 }
565
567 {
568 int sblimit; /* number of used subbands */
570 int table, bit_alloc_bits, i, j, ch,
bound, v;
574 int scale, qindex,
bits, steps, k, l,
m,
b;
575
576 /* select decoding table */
578 s->sample_rate, s->lsf);
581
583 bound = (s->mode_ext + 1) * 4;
584 else
585 bound = sblimit;
586
587 ff_dlog(s->
avctx,
"bound=%d sblimit=%d\n", bound, sblimit);
588
589 /* sanity check */
590 if (bound > sblimit)
591 bound = sblimit;
592
593 /* parse bit allocation */
594 j = 0;
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;
600 }
601 for (i = bound; i < sblimit; i++) {
602 bit_alloc_bits = alloc_table[j];
604 bit_alloc[0][i] = v;
605 bit_alloc[1][i] = v;
606 j += 1 << bit_alloc_bits;
607 }
608
609 /* scale codes */
610 for (i = 0; i < sblimit; i++) {
611 for (ch = 0; ch < s->nb_channels; ch++) {
612 if (bit_alloc[ch][i])
614 }
615 }
616
617 /* scale factors */
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]) {
623 default:
624 case 0:
628 break;
629 case 2:
631 sf[1] = sf[0];
632 sf[2] = sf[0];
633 break;
634 case 1:
637 sf[1] = sf[0];
638 break;
639 case 3:
642 sf[1] = sf[2];
643 break;
644 }
645 }
646 }
647 }
648
649 /* samples */
650 for (k = 0; k < 3; k++) {
651 for (l = 0; l < 12; l += 3) {
652 j = 0;
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];
657 if (b) {
658 scale = scale_factors[ch][i][k];
659 qindex = alloc_table[j+
b];
661 if (bits < 0) {
662 int v2;
663 /* 3 values at the same time */
667
674 } else {
675 for (m = 0; m < 3; m++) {
679 }
680 }
681 } else {
685 }
686 }
687 /* next subband in alloc table */
688 j += 1 << bit_alloc_bits;
689 }
690 /* XXX: find a way to avoid this duplication of code */
691 for (i = bound; i < sblimit; i++) {
692 bit_alloc_bits = alloc_table[j];
693 b = bit_alloc[0][i];
694 if (b) {
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];
700 if (bits < 0) {
701 /* 3 values at the same time */
704 mant = v % steps;
705 v = v / steps;
710 mant = v % steps;
711 v = v / steps;
720 } else {
721 for (m = 0; m < 3; m++) {
727 }
728 }
729 } else {
736 }
737 /* next subband in alloc table */
738 j += 1 << bit_alloc_bits;
739 }
740 /* fill remaining samples to zero */
741 for (i = sblimit; i <
SBLIMIT; i++) {
742 for (ch = 0; ch < s->nb_channels; ch++) {
746 }
747 }
748 }
749 }
750 return 3 * 12;
751 }
752
753 #define SPLIT(dst,sf,n) \
754 if (n == 3) { \
755 int m = (sf * 171) >> 9; \
756 dst = sf - 3 * m; \
757 sf = m; \
758 } else if (n == 4) { \
759 dst = sf & 3; \
760 sf >>= 2; \
761 } else if (n == 5) { \
762 int m = (sf * 205) >> 10; \
763 dst = sf - 5 * m; \
764 sf = m; \
765 } else if (n == 6) { \
766 int m = (sf * 171) >> 10; \
767 dst = sf - 6 * m; \
768 sf = m; \
769 } else { \
770 dst = 0; \
771 }
772
774 int n3)
775 {
776 SPLIT(slen[3], sf, n3)
777 SPLIT(slen[2], sf, n2)
778 SPLIT(slen[1], sf, n1)
779 slen[0] = sf;
780 }
781
783 int16_t *exponents)
784 {
786 int len, i, j, k, l,
v0,
shift, gain, gains[3];
787 int16_t *exp_ptr;
788
789 exp_ptr = exponents;
792
796 v0 = gain - ((g->
scale_factors[i] + pretab[i]) << shift) + 400;
797 len = bstab[i];
798 for (j = len; j > 0; j--)
799 *exp_ptr++ = v0;
800 }
801
809 len = bstab[i];
810 for (l = 0; l < 3; l++) {
812 for (j = len; j > 0; j--)
813 *exp_ptr++ = v0;
814 }
815 }
816 }
817 }
818
820 int *end_pos2)
821 {
827 *end_pos2 =
830 }
831 }
832
833 /* Following is a optimized code for
834 INTFLOAT v = *src
835 if(get_bits1(&s->gb))
836 v = -v;
837 *dst = v;
838 */
839 #if USE_FLOATS
840 #define READ_FLIP_SIGN(dst,src) \
841 v = AV_RN32A(src) ^ (get_bits1(&s->gb) << 31); \
842 AV_WN32A(dst, v);
843 #else
844 #define READ_FLIP_SIGN(dst,src) \
845 v = -get_bits1(&s->gb); \
846 *(dst) = (*(src) ^ v) - v;
847 #endif
848
850 int16_t *exponents, int end_pos2)
851 {
852 int s_index;
853 int i;
854 int last_pos, bits_left;
857
858 /* low frequencies (called big values) */
859 s_index = 0;
860 for (i = 0; i < 3; i++) {
861 int j, k, l, linbits;
863 if (j == 0)
864 continue;
865 /* select vlc table */
869 vlc = &huff_vlc[l];
870
871 if (!l) {
873 s_index += 2 * j;
874 continue;
875 }
876
877 /* read huffcode and compute each couple */
878 for (; j > 0; j--) {
879 int exponent, x, y;
880 int v;
882
883 if (pos >= end_pos){
885 if (pos >= end_pos)
886 break;
887 }
889
890 if (!y) {
893 s_index += 2;
894 continue;
895 }
896
897 exponent= exponents[s_index];
898
901 if (y & 16) {
902 x = y >> 5;
903 y = y & 0x0f;
904 if (x < 15) {
906 } else {
910 v = -v;
912 }
913 if (y < 15) {
915 } else {
919 v = -v;
921 }
922 } else {
923 x = y >> 5;
924 y = y & 0x0f;
925 x += y;
926 if (x < 15) {
928 } else {
932 v = -v;
934 }
936 }
937 s_index += 2;
938 }
939 }
940
941 /* high frequencies */
943 last_pos = 0;
944 while (s_index <= 572) {
945 int pos, code;
947 if (pos >= end_pos) {
948 if (pos > end_pos2 && last_pos) {
949 /* some encoders generate an incorrect size for this
950 part. We must go back into the data */
951 s_index -= 4;
953 av_log(s->
avctx,
AV_LOG_INFO,
"overread, skip %d enddists: %d %d\n", last_pos - pos, end_pos-pos, end_pos2-pos);
955 s_index=0;
956 break;
957 }
959 if (pos >= end_pos)
960 break;
961 }
962 last_pos = pos;
963
970 while (code) {
971 static const int idxtab[16] = { 3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0 };
972 int v;
973 int pos = s_index + idxtab[code];
974 code ^= 8 >> idxtab[code];
976 }
977 s_index += 4;
978 }
979 /* skip extension bits */
983 s_index=0;
986 s_index = 0;
987 }
990
993
994 return 0;
995 }
996
997 /* Reorder short blocks from bitstream order to interleaved order. It
998 would be faster to do it in parsing, but the code would be far more
999 complicated */
1001 {
1005
1007 return;
1008
1010 if (s->sample_rate_index != 8)
1012 else
1014 } else {
1016 }
1017
1020 ptr1 = ptr;
1021 dst = tmp;
1022 for (j = len; j > 0; j--) {
1023 *dst++ = ptr[0*
len];
1024 *dst++ = ptr[1*
len];
1025 *dst++ = ptr[2*
len];
1026 ptr++;
1027 }
1029 memcpy(ptr1, tmp, len * 3 * sizeof(*ptr1));
1030 }
1031 }
1032
1033 #define ISQRT2 FIXR(0.70710678118654752440)
1034
1036 {
1037 int i, j, k, l;
1038 int sf_max, sf,
len, non_zero_found;
1039 INTFLOAT (*is_tab)[16], *tab0, *
tab1, tmp0, tmp1, v1, v2;
1040 int non_zero_found_short[3];
1041
1042 /* intensity stereo */
1044 if (!s->lsf) {
1046 sf_max = 7;
1047 } else {
1049 sf_max = 16;
1050 }
1051
1054
1055 non_zero_found_short[0] = 0;
1056 non_zero_found_short[1] = 0;
1057 non_zero_found_short[2] = 0;
1060 /* for last band, use previous scale factor */
1061 if (i != 11)
1062 k -= 3;
1064 for (l = 2; l >= 0; l--) {
1067 if (!non_zero_found_short[l]) {
1068 /* test if non zero band. if so, stop doing i-stereo */
1069 for (j = 0; j <
len; j++) {
1070 if (tab1[j] != 0) {
1071 non_zero_found_short[l] = 1;
1072 goto found1;
1073 }
1074 }
1076 if (sf >= sf_max)
1077 goto found1;
1078
1079 v1 = is_tab[0][sf];
1080 v2 = is_tab[1][sf];
1081 for (j = 0; j <
len; j++) {
1082 tmp0 = tab0[j];
1085 }
1086 } else {
1087 found1:
1089 /* lower part of the spectrum : do ms stereo
1090 if enabled */
1091 for (j = 0; j <
len; j++) {
1092 tmp0 = tab0[j];
1093 tmp1 = tab1[j];
1096 }
1097 }
1098 }
1099 }
1100 }
1101
1102 non_zero_found = non_zero_found_short[0] |
1103 non_zero_found_short[1] |
1104 non_zero_found_short[2];
1105
1106 for (i = g1->
long_end - 1;i >= 0;i--) {
1110 /* test if non zero band. if so, stop doing i-stereo */
1111 if (!non_zero_found) {
1112 for (j = 0; j <
len; j++) {
1113 if (tab1[j] != 0) {
1114 non_zero_found = 1;
1115 goto found2;
1116 }
1117 }
1118 /* for last band, use previous scale factor */
1119 k = (i == 21) ? 20 : i;
1121 if (sf >= sf_max)
1122 goto found2;
1123 v1 = is_tab[0][sf];
1124 v2 = is_tab[1][sf];
1125 for (j = 0; j <
len; j++) {
1126 tmp0 = tab0[j];
1129 }
1130 } else {
1131 found2:
1133 /* lower part of the spectrum : do ms stereo
1134 if enabled */
1135 for (j = 0; j <
len; j++) {
1136 tmp0 = tab0[j];
1137 tmp1 = tab1[j];
1140 }
1141 }
1142 }
1143 }
1145 /* ms stereo ONLY */
1146 /* NOTE: the 1/sqrt(2) normalization factor is included in the
1147 global gain */
1148 #if USE_FLOATS
1150 #else
1153 for (i = 0; i < 576; i++) {
1154 tmp0 = tab0[i];
1155 tmp1 = tab1[i];
1156 tab0[i] = tmp0 + tmp1;
1157 tab1[i] = tmp0 - tmp1;
1158 }
1159 #endif
1160 }
1161 }
1162
1163 #if USE_FLOATS
1164 #if HAVE_MIPSFPU
1166 #endif /* HAVE_MIPSFPU */
1167 #else
1168 #if HAVE_MIPSDSP
1170 #endif /* HAVE_MIPSDSP */
1171 #endif /* USE_FLOATS */
1172
1173 #ifndef compute_antialias
1174 #if USE_FLOATS
1175 #define AA(j) do { \
1176 float tmp0 = ptr[-1-j]; \
1177 float tmp1 = ptr[ j]; \
1178 ptr[-1-j] = tmp0 * csa_table[j][0] - tmp1 * csa_table[j][1]; \
1179 ptr[ j] = tmp0 * csa_table[j][1] + tmp1 * csa_table[j][0]; \
1180 } while (0)
1181 #else
1182 #define AA(j) do { \
1183 int tmp0 = ptr[-1-j]; \
1184 int tmp1 = ptr[ j]; \
1185 int tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]); \
1186 ptr[-1-j] = 4 * (tmp2 - MULH(tmp1, csa_table[j][2])); \
1187 ptr[ j] = 4 * (tmp2 + MULH(tmp0, csa_table[j][3])); \
1188 } while (0)
1189 #endif
1190
1192 {
1195
1196 /* we antialias only "long" bands */
1199 return;
1200 /* XXX: check this for 8000Hz case */
1201 n = 1;
1202 } else {
1204 }
1205
1207 for (i = n; i > 0; i--) {
1216
1217 ptr += 18;
1218 }
1219 }
1220 #endif /* compute_antialias */
1221
1224 {
1227 int i, j, mdct_long_end, sblimit;
1228
1229 /* find last non zero block */
1232 while (ptr >= ptr1) {
1234 ptr -= 6;
1236 if (p[0] | p[1] | p[2] | p[3] | p[4] | p[5])
1237 break;
1238 }
1239 sblimit = ((ptr - g->
sb_hybrid) / 18) + 1;
1240
1242 /* XXX: check for 8000 Hz */
1244 mdct_long_end = 2;
1245 else
1246 mdct_long_end = 0;
1247 } else {
1248 mdct_long_end = sblimit;
1249 }
1250
1254
1255 buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1256 ptr = g->
sb_hybrid + 18 * mdct_long_end;
1257
1258 for (j = mdct_long_end; j < sblimit; j++) {
1259 /* select frequency inversion */
1260 win =
RENAME(ff_mdct_win)[2 + (4 & -(j & 1))];
1261 out_ptr = sb_samples + j;
1262
1263 for (i = 0; i < 6; i++) {
1264 *out_ptr = buf[4*i];
1266 }
1268 for (i = 0; i < 6; i++) {
1269 *out_ptr =
MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*1)];
1270 buf[4*(i + 6*2)] =
MULH3(out2[i + 6], win[i + 6], 1);
1272 }
1274 for (i = 0; i < 6; i++) {
1275 *out_ptr =
MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*2)];
1276 buf[4*(i + 6*0)] =
MULH3(out2[i + 6], win[i + 6], 1);
1278 }
1280 for (i = 0; i < 6; i++) {
1281 buf[4*(i + 6*0)] =
MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*0)];
1282 buf[4*(i + 6*1)] =
MULH3(out2[i + 6], win[i + 6], 1);
1283 buf[4*(i + 6*2)] = 0;
1284 }
1285 ptr += 18;
1286 buf += (j&3) != 3 ? 1 : (4*18-3);
1287 }
1288 /* zero bands */
1289 for (j = sblimit; j <
SBLIMIT; j++) {
1290 /* overlap */
1291 out_ptr = sb_samples + j;
1292 for (i = 0; i < 18; i++) {
1293 *out_ptr = buf[4*i];
1294 buf[4*i] = 0;
1296 }
1297 buf += (j&3) != 3 ? 1 : (4*18-3);
1298 }
1299 }
1300
1301 /* main layer3 decoding function */
1303 {
1304 int nb_granules, main_data_begin;
1305 int gr, ch, blocksplit_flag, i, j, k,
n, bits_pos;
1307 int16_t exponents[576]; //FIXME try INTFLOAT
1308
1309 /* read side info */
1310 if (s->lsf) {
1313 nb_granules = 1;
1314 } else {
1316 if (s->nb_channels == 2)
1318 else
1320 nb_granules = 2;
1321 for (ch = 0; ch < s->nb_channels; ch++) {
1322 s->
granules[ch][0].
scfsi = 0;
/* all scale factors are transmitted */
1324 }
1325 }
1326
1327 for (gr = 0; gr < nb_granules; gr++) {
1328 for (ch = 0; ch < s->nb_channels; ch++) {
1336 }
1337
1339 /* if MS stereo only is selected, we precompute the
1340 1/sqrt(2) renormalization factor */
1344 if (s->lsf)
1346 else
1349 if (blocksplit_flag) {
1354 }
1356 for (i = 0; i < 2; i++)
1358 for (i = 0; i < 3; i++)
1361 } else {
1362 int region_address1, region_address2;
1365 for (i = 0; i < 3; i++)
1367 /* compute huffman coded region sizes */
1371 region_address1, region_address2);
1373 }
1376
1378 if (!s->lsf)
1384 }
1385 }
1386
1388 int skip;
1392 /* now we get bits from the main_data_begin offset */
1395
1399 #if !UNCHECKED_BITSTREAM_READER
1401 #endif
1403 for (gr = 0; gr < nb_granules && (s->
last_buf_size >> 3) < main_data_begin; gr++) {
1404 for (ch = 0; ch < s->nb_channels; ch++) {
1409 }
1410 }
1416 } else {
1418 }
1419 } else {
1420 gr = 0;
1421 }
1422
1423 for (; gr < nb_granules; gr++) {
1424 for (ch = 0; ch < s->nb_channels; ch++) {
1427
1428 if (!s->lsf) {
1430 int slen, slen1, slen2;
1431
1432 /* MPEG1 scale factors */
1435 ff_dlog(s->
avctx,
"slen1=%d slen2=%d\n", slen1, slen2);
1438 j = 0;
1439 if (slen1) {
1440 for (i = 0; i <
n; i++)
1442 } else {
1443 for (i = 0; i <
n; i++)
1445 }
1446 if (slen2) {
1447 for (i = 0; i < 18; i++)
1449 for (i = 0; i < 3; i++)
1451 } else {
1452 for (i = 0; i < 21; i++)
1454 }
1455 } else {
1457 j = 0;
1458 for (k = 0; k < 4; k++) {
1459 n = k == 0 ? 6 : 5;
1460 if ((g->
scfsi & (0x8 >> k)) == 0) {
1461 slen = (k < 2) ? slen1 : slen2;
1462 if (slen) {
1463 for (i = 0; i <
n; i++)
1465 } else {
1466 for (i = 0; i <
n; i++)
1468 }
1469 } else {
1470 /* simply copy from last granule */
1471 for (i = 0; i <
n; i++) {
1473 j++;
1474 }
1475 }
1476 }
1478 }
1479 } else {
1480 int tindex, tindex2, slen[4], sl, sf;
1481
1482 /* LSF scale factors */
1485 else
1486 tindex = 0;
1487
1490 /* intensity stereo case */
1491 sf >>= 1;
1492 if (sf < 180) {
1494 tindex2 = 3;
1495 } else if (sf < 244) {
1497 tindex2 = 4;
1498 } else {
1500 tindex2 = 5;
1501 }
1502 } else {
1503 /* normal case */
1504 if (sf < 400) {
1506 tindex2 = 0;
1507 } else if (sf < 500) {
1509 tindex2 = 1;
1510 } else {
1512 tindex2 = 2;
1514 }
1515 }
1516
1517 j = 0;
1518 for (k = 0; k < 4; k++) {
1520 sl = slen[k];
1521 if (sl) {
1522 for (i = 0; i <
n; i++)
1524 } else {
1525 for (i = 0; i <
n; i++)
1527 }
1528 }
1529 /* XXX: should compute exact size */
1530 for (; j < 40; j++)
1532 }
1533
1535
1536 /* read Huffman coded residue */
1538 } /* ch */
1539
1542
1543 for (ch = 0; ch < s->nb_channels; ch++) {
1545
1549 }
1550 } /* gr */
1553 return nb_granules * 18;
1554 }
1555
1558 {
1559 int i, nb_frames, ch, ret;
1561
1563
1564 /* skip error protection field */
1565 if (s->error_protection)
1567
1568 switch(s->layer) {
1569 case 1:
1572 break;
1573 case 2:
1576 break;
1577 case 3:
1579 default:
1581
1589 } else
1593 }
1594
1598
1600 if (i < 0)
1603 }
1604 av_assert1(i <= buf_size - HEADER_SIZE && i >= 0);
1607 }
1608
1609 if(nb_frames < 0)
1610 return nb_frames;
1611
1612 /* get output buffer */
1613 if (!samples) {
1617 return ret;
1619 }
1620
1621 /* apply the synthesis filter */
1622 for (ch = 0; ch < s->nb_channels; ch++) {
1623 int sample_stride;
1625 samples_ptr = samples[ch];
1626 sample_stride = 1;
1627 } else {
1628 samples_ptr = samples[0] + ch;
1629 sample_stride = s->nb_channels;
1630 }
1631 for (i = 0; i < nb_frames; i++) {
1634 RENAME(ff_mpa_synth_window),
1637 samples_ptr += 32 * sample_stride;
1638 }
1639 }
1640
1641 return nb_frames * 32 *
sizeof(
OUT_INT) * s->nb_channels;
1642 }
1643
1646 {
1648 int buf_size = avpkt->
size;
1651 int ret;
1652
1653 int skipped = 0;
1654 while(buf_size && !*buf){
1655 buf++;
1656 buf_size--;
1657 skipped++;
1658 }
1659
1662
1664 if (header>>8 ==
AV_RB32(
"TAG")>>8) {
1666 return buf_size;
1667 }
1669 if (ret < 0) {
1672 } else if (ret == 1) {
1673 /* free format: prepare to compute frame size */
1674 s->frame_size = -1;
1676 }
1677 /* update codec info */
1682
1683 if (s->frame_size <= 0) {
1686 } else if (s->frame_size < buf_size) {
1688 buf_size= s->frame_size;
1689 }
1690
1692
1694 if (ret >= 0) {
1696 *got_frame_ptr = 1;
1698 //FIXME maybe move the other codec info stuff from above here too
1699 } else {
1701 /* Only return an error if the bad frame makes up the whole packet or
1702 * the error is related to buffer management.
1703 * If there is more data in the packet, just consume the bad frame
1704 * instead of returning an error, which would discard the whole
1705 * packet. */
1706 *got_frame_ptr = 0;
1708 return ret;
1709 }
1710 s->frame_size = 0;
1711 return buf_size + skipped;
1712 }
1713
1715 {
1720 }
1721
1723 {
1725 }
1726
1727 #if CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER
1729 int *got_frame_ptr,
AVPacket *avpkt)
1730 {
1732 int buf_size = avpkt->
size;
1737
1738 len = buf_size;
1739
1740 // Discard too short frames
1744 }
1745
1746
1749
1750 // Get header and restore sync word
1751 header =
AV_RB32(buf) | 0xffe00000;
1752
1754 if (ret < 0) {
1756 return ret;
1757 }
1758 /* update codec info */
1764
1765 s->frame_size =
len;
1766
1768
1770 if (ret < 0) {
1772 return ret;
1773 }
1774
1775 *got_frame_ptr = 1;
1776
1777 return buf_size;
1778 }
1779 #endif /* CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER */
1780
1781 #if CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER
1782
1783 /**
1784 * Context for MP3On4 decoder
1785 */
1786 typedef struct MP3On4DecodeContext {
1787 int frames;
///< number of mp3 frames per block (number of mp3 decoder instances)
1788 int syncword; ///< syncword patch
1789 const uint8_t *coff;
///< channel offsets in output buffer
1790 MPADecodeContext *mp3decctx[5];
///< MPADecodeContext for every decoder instance
1791 } MP3On4DecodeContext;
1792
1794
1795 /* Next 3 arrays are indexed by channel config number (passed via codecdata) */
1796
1797 /* number of mp3 decoder instances */
1798 static const uint8_t mp3Frames[8] = { 0, 1, 1, 2, 3, 3, 4, 5 };
1799
1800 /* offsets into output buffer, assume output order is FL FR C LFE BL BR SL SR */
1801 static const uint8_t chan_offset[8][5] = {
1802 { 0 },
1803 { 0 }, // C
1804 { 0 }, // FLR
1805 { 2, 0 }, // C FLR
1806 { 2, 0, 3 }, // C FLR BS
1807 { 2, 0, 3 }, // C FLR BLRS
1808 { 2, 0, 4, 3 }, // C FLR BLRS LFE
1809 { 2, 0, 6, 4, 3 }, // C FLR BLRS BLR LFE
1810 };
1811
1812 /* mp3on4 channel layouts */
1813 static const int16_t chan_layout[8] = {
1814 0,
1822 };
1823
1825 {
1826 MP3On4DecodeContext *s = avctx->
priv_data;
1827 int i;
1828
1829 for (i = 0; i < s->frames; i++)
1831
1832 return 0;
1833 }
1834
1835
1837 {
1838 MP3On4DecodeContext *s = avctx->
priv_data;
1840 int i;
1841
1845 }
1846
1852 }
1857
1859 s->syncword = 0xffe00000;
1860 else
1861 s->syncword = 0xfff00000;
1862
1863 /* Init the first mp3 decoder in standard way, so that all tables get builded
1864 * We replace avctx->priv_data with the context of the first decoder so that
1865 * decode_init() does not have to be changed.
1866 * Other decoders will be initialized here copying data from the first context
1867 */
1868 // Allocate zeroed memory for the first decoder context
1870 if (!s->mp3decctx[0])
1871 goto alloc_fail;
1872 // Put decoder context in place to make init_decode() happy
1875 // Restore mp3on4 context pointer
1877 s->mp3decctx[0]->adu_mode = 1; // Set adu mode
1878
1879 /* Create a separate codec/context for each frame (first is already ok).
1880 * Each frame is 1 or 2 channels - up to 5 frames allowed
1881 */
1882 for (i = 1; i < s->frames; i++) {
1884 if (!s->mp3decctx[i])
1885 goto alloc_fail;
1886 s->mp3decctx[i]->adu_mode = 1;
1887 s->mp3decctx[i]->avctx = avctx;
1888 s->mp3decctx[i]->mpadsp = s->mp3decctx[0]->mpadsp;
1889 s->mp3decctx[i]->fdsp = s->mp3decctx[0]->fdsp;
1890 }
1891
1892 return 0;
1893 alloc_fail:
1894 decode_close_mp3on4(avctx);
1896 }
1897
1898
1900 {
1901 int i;
1902 MP3On4DecodeContext *s = avctx->
priv_data;
1903
1904 for (i = 0; i < s->frames; i++)
1906 }
1907
1908
1909 static int decode_frame_mp3on4(
AVCodecContext *avctx,
void *data,
1910 int *got_frame_ptr,
AVPacket *avpkt)
1911 {
1914 int buf_size = avpkt->
size;
1915 MP3On4DecodeContext *s = avctx->
priv_data;
1917 int fsize, len = buf_size, out_size = 0;
1921 int fr, ch, ret;
1922
1923 /* get output buffer */
1926 return ret;
1928
1929 // Discard too short frames
1932
1934
1935 ch = 0;
1936 for (fr = 0; fr < s->frames; fr++) {
1939 m = s->mp3decctx[fr];
1941
1945 }
1946 header = (
AV_RB32(buf) & 0x000fffff) | s->syncword;
// patch header
1947
1949 if (ret < 0) {
1952 }
1953
1954 if (ch + m->nb_channels > avctx->
channels ||
1955 s->coff[fr] + m->nb_channels > avctx->
channels) {
1957 "channel count\n");
1959 }
1960 ch += m->nb_channels;
1961
1962 outptr[0] = out_samples[s->coff[fr]];
1963 if (m->nb_channels > 1)
1964 outptr[1] = out_samples[s->coff[fr] + 1];
1965
1969 if (m->nb_channels > 1)
1972 }
1973
1974 out_size += ret;
1975 buf += fsize;
1976 len -= fsize;
1977
1979 }
1983 }
1984
1985 /* update codec info */
1986 avctx->
sample_rate = s->mp3decctx[0]->sample_rate;
1987
1989 *got_frame_ptr = 1;
1990
1991 return buf_size;
1992 }
1993 #endif /* CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER */
static av_cold void decode_init_static(void)
#define MPA_MAX_CODED_FRAME_SIZE
static int32_t scale_factor_mult[15][3]
#define AV_EF_AGGRESSIVE
consider things that a sane encoder should not do as an error
static double bound(const double threshold, const double val)
const char const char void * val
static int16_t division_tab9[1<< 11]
#define AV_CH_LAYOUT_7POINT1
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static uint32_t table_4_3_value[TABLE_4_3_SIZE]
static const uint8_t lsf_nsf_table[6][3][4]
static int shift(int a, int b)
This structure describes decoded (raw) audio or video data.
ptrdiff_t const GLvoid * data
Reference: libavcodec/mpegaudiodec.c.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
int64_t bit_rate
the average bitrate
#define AV_CH_LAYOUT_SURROUND
static void skip_bits_long(GetBitContext *s, int n)
static void exponents_from_scale_factors(MPADecodeContext *s, GranuleDef *g, int16_t *exponents)
static int8_t table_4_3_exp[TABLE_4_3_SIZE]
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
#define AV_EF_BUFFER
detect improper bitstream length
#define DECLARE_ALIGNED(n, t, v)
const int ff_mpa_quant_bits[17]
static const uint8_t mpa_pretab[2][22]
#define AV_CH_LAYOUT_4POINT0
#define AV_EF_BITSTREAM
detect bitstream specification deviations
#define AV_CH_LAYOUT_STEREO
static av_always_inline void lsf_sf_expand(int *slen, int sf, int n1, int n2, int n3)
uint8_t scale_factors[40]
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 void imdct12(INTFLOAT *out, INTFLOAT *in)
#define AV_CH_LAYOUT_5POINT0
mpeg audio layer common tables.
static const uint8_t slen_table[2][16]
Macro definitions for various function/variable attributes.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
enum AVSampleFormat sample_fmt
audio sample format
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
const int ff_mpa_quant_steps[17]
static int l2_unscale_group(int steps, int mant, int scale_factor)
static av_cold void mpegaudio_tableinit(void)
const unsigned char *const ff_mpa_alloc_tables[5]
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static const uint8_t mpa_huff_data[32][2]
#define SPLIT(dst, sf, n)
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
static INTFLOAT csa_table[8][4]
static int l3_unscale(int value, int exponent)
static const uint8_t mpa_quad_codes[2][16]
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos, int *end_pos2)
static av_cold int decode_close(AVCodecContext *avctx)
static const uint8_t header[24]
static int bit_alloc(AC3EncodeContext *s, int snr_offset)
Run the bit allocation with a given SNR offset.
#define AV_CH_LAYOUT_5POINT1
static int get_bits_left(GetBitContext *gb)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define MODE_EXT_MS_STEREO
enum AVSampleFormat request_sample_fmt
desired sample format
static const struct endianess table[]
void(* butterflies_float)(float *av_restrict v1, float *av_restrict v2, int len)
Calculate the sum and difference of two vectors of floats.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static void init_long_region(MPADecodeContext *s, GranuleDef *g, int ra1, int ra2)
static uint16_t band_index_long[9][23]
static av_cold int decode_init(AVCodecContext *avctx)
int flags
AV_CODEC_FLAG_*.
simple assert() macros that are a bit more flexible than ISO C assert().
static const uint8_t offset[127][2]
static VLC_TYPE huff_quad_vlc_tables[128+16][2]
static VLC_TYPE huff_vlc_tables[0+128+128+128+130+128+154+166+142+204+190+170+542+460+662+414][2]
uint64_t channel_layout
Audio channel layout.
static const int32_t scale_factor_mult2[3][3]
#define READ_FLIP_SIGN(dst, src)
audio channel layout utility functions
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
static void compute_band_indexes(MPADecodeContext *s, GranuleDef *g)
GLsizei GLboolean const GLfloat * value
uint32_t free_format_next_header
Reference: libavcodec/mpegaudiodec.c.
static int mp_decode_layer2(MPADecodeContext *s)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#define INIT_VLC_USE_NEW_STATIC
#define FF_ARRAY_ELEMS(a)
static const uint8_t mpa_quad_bits[2][16]
int frame_size
Number of samples per channel in an audio frame.
#define AV_LOG_INFO
Standard information.
Libavcodec external API header.
int sb_hybrid[SBLIMIT *18]
static const int huff_vlc_tables_sizes[16]
int sample_rate
samples per second
MPA_INT synth_buf[MPA_MAX_CHANNELS][512 *2]
static int mp_decode_layer3(MPADecodeContext *s)
static int mp_decode_frame(MPADecodeContext *s, OUT_INT **samples, const uint8_t *buf, int buf_size)
main external API structure.
static void compute_antialias(MPADecodeContext *s, GranuleDef *g)
static INTFLOAT is_table[2][16]
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> in
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
static void mp_flush(MPADecodeContext *ctx)
Replacements for frequently missing libm functions.
static void reorder_block(MPADecodeContext *s, GranuleDef *g)
static unsigned int get_bits1(GetBitContext *s)
uint8_t count1table_select
static void skip_bits(GetBitContext *s, int n)
#define MODE_EXT_I_STEREO
static const int huff_quad_vlc_tables_sizes[2]
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static uint16_t scale_factor_modshift[64]
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
static INTFLOAT is_table_lsf[2][2][16]
static int16_t division_tab5[1<< 8]
static void init_short_region(MPADecodeContext *s, GranuleDef *g)
static const uint8_t band_size_long[9][22]
static void compute_stereo(MPADecodeContext *s, GranuleDef *g0, GranuleDef *g1)
static int16_t *const division_tabs[4]
static void compute_imdct(MPADecodeContext *s, GranuleDef *g, INTFLOAT *sb_samples, INTFLOAT *mdct_buf)
common internal api header.
mpeg audio declarations for both encoder and decoder.
const int ff_mpa_sblimit_table[5]
int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, int bit_size, int sync_extension)
Parse MPEG-4 systems extradata to retrieve audio configuration.
static int mp_decode_layer1(MPADecodeContext *s)
INTFLOAT mdct_buf[MPA_MAX_CHANNELS][SBLIMIT *18]
int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf)
int channels
number of audio channels
const uint8_t ff_mpeg4audio_channels[8]
MPA_DECODE_HEADER uint8_t last_buf[LAST_BUF_SIZE]
VLC_TYPE(* table)[2]
code, bits
int synth_buf_offset[MPA_MAX_CHANNELS]
static const uint8_t * align_get_bits(GetBitContext *s)
static VLC huff_quad_vlc[2]
static int huffman_decode(MPADecodeContext *s, GranuleDef *g, int16_t *exponents, int end_pos2)
mpeg audio layer decoder tables.
static int l1_unscale(int n, int mant, int scale_factor)
int sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]
static const HuffTable mpa_huff_tables[16]
static const float ci_table[8]
uint8_t ** extended_data
pointers to the data planes/channels.
#define AV_CH_LAYOUT_MONO
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static void region_offset2size(GranuleDef *g)
Convert region offsets to region sizes and truncate size to big_values.
This structure stores compressed data.
av_cold void ff_mpadsp_init(MPADSPContext *s)
int nb_samples
number of audio samples (per channel) described by this frame
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static void flush(AVCodecContext *avctx)
static av_always_inline int get_bitsz(GetBitContext *s, int n)
Read 0-25 bits.
static int alloc_table(VLC *vlc, int size, int use_static)
static const uint8_t band_size_short[9][13]
int adu_mode
0 for standard mp3, 1 for adu formatted mp3
static int16_t division_tab3[1<< 6]
GranuleDef granules[2][2]