FFmpeg
mpegaudiodec_template.c
Go to the documentation of this file.
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 
27 #include "libavutil/attributes.h"
28 #include "libavutil/avassert.h"
30 #include "libavutil/float_dsp.h"
31 #include "libavutil/libm.h"
32 #include "avcodec.h"
33 #include "get_bits.h"
34 #include "internal.h"
35 #include "mathops.h"
36 #include "mpegaudiodsp.h"
37 
38 /*
39  * TODO:
40  * - test lsf / mpeg25 extensively.
41  */
42 
43 #include "mpegaudio.h"
44 #include "mpegaudiodecheader.h"
45 
46 #define BACKSTEP_SIZE 512
47 #define EXTRABYTES 24
48 #define LAST_BUF_SIZE 2 * BACKSTEP_SIZE + EXTRABYTES
49 
50 /* layer 3 "granule" */
51 typedef struct GranuleDef {
59  int table_select[3];
60  int subblock_gain[3];
63  int region_size[3]; /* number of huffman codes in each region */
64  int preflag;
65  int short_start, long_end; /* long/short band indexes */
67  DECLARE_ALIGNED(16, INTFLOAT, sb_hybrid)[SBLIMIT * 18]; /* 576 samples */
68 } GranuleDef;
69 
70 typedef struct MPADecodeContext {
74  int extrasize;
75  /* next header (used in free format parsing) */
82  INTFLOAT mdct_buf[MPA_MAX_CHANNELS][SBLIMIT * 18]; /* previous samples, for layer 3 MDCT */
83  GranuleDef granules[2][2]; /* Used in Layer 3 */
84  int adu_mode; ///< 0 for standard mp3, 1 for adu formatted mp3
92 
93 #define HEADER_SIZE 4
94 
95 #include "mpegaudiodata.h"
96 #include "mpegaudiodectab.h"
97 
98 /* vlc structure for decoding layer 3 huffman tables */
99 static VLC huff_vlc[16];
101  0 + 128 + 128 + 128 + 130 + 128 + 154 + 166 +
102  142 + 204 + 190 + 170 + 542 + 460 + 662 + 414
103  ][2];
104 static const int huff_vlc_tables_sizes[16] = {
105  0, 128, 128, 128, 130, 128, 154, 166,
106  142, 204, 190, 170, 542, 460, 662, 414
107 };
108 static VLC huff_quad_vlc[2];
109 static VLC_TYPE huff_quad_vlc_tables[128+16][2];
110 static const int huff_quad_vlc_tables_sizes[2] = { 128, 16 };
111 /* computed from band_size_long */
112 static uint16_t band_index_long[9][23];
113 #include "mpegaudio_tablegen.h"
114 /* intensity stereo coef table */
115 static INTFLOAT is_table[2][16];
116 static INTFLOAT is_table_lsf[2][2][16];
117 static INTFLOAT csa_table[8][4];
118 
119 static int16_t division_tab3[1<<6 ];
120 static int16_t division_tab5[1<<8 ];
121 static int16_t division_tab9[1<<11];
122 
123 static int16_t * const division_tabs[4] = {
125 };
126 
127 /* lower 2 bits: modulo 3, higher bits: shift */
128 static uint16_t scale_factor_modshift[64];
129 /* [i][j]: 2^(-j/3) * FRAC_ONE * 2^(i+2) / (2^(i+2) - 1) */
131 /* mult table for layer 2 group quantization */
132 
133 #define SCALE_GEN(v) \
134 { FIXR_OLD(1.0 * (v)), FIXR_OLD(0.7937005259 * (v)), FIXR_OLD(0.6299605249 * (v)) }
135 
136 static const int32_t scale_factor_mult2[3][3] = {
137  SCALE_GEN(4.0 / 3.0), /* 3 steps */
138  SCALE_GEN(4.0 / 5.0), /* 5 steps */
139  SCALE_GEN(4.0 / 9.0), /* 9 steps */
140 };
141 
142 /**
143  * Convert region offsets to region sizes and truncate
144  * size to big_values.
145  */
147 {
148  int i, k, j = 0;
149  g->region_size[2] = 576 / 2;
150  for (i = 0; i < 3; i++) {
151  k = FFMIN(g->region_size[i], g->big_values);
152  g->region_size[i] = k - j;
153  j = k;
154  }
155 }
156 
158 {
159  if (g->block_type == 2) {
160  if (s->sample_rate_index != 8)
161  g->region_size[0] = (36 / 2);
162  else
163  g->region_size[0] = (72 / 2);
164  } else {
165  if (s->sample_rate_index <= 2)
166  g->region_size[0] = (36 / 2);
167  else if (s->sample_rate_index != 8)
168  g->region_size[0] = (54 / 2);
169  else
170  g->region_size[0] = (108 / 2);
171  }
172  g->region_size[1] = (576 / 2);
173 }
174 
176  int ra1, int ra2)
177 {
178  int l;
179  g->region_size[0] = band_index_long[s->sample_rate_index][ra1 + 1] >> 1;
180  /* should not overflow */
181  l = FFMIN(ra1 + ra2 + 2, 22);
182  g->region_size[1] = band_index_long[s->sample_rate_index][ l] >> 1;
183 }
184 
186 {
187  if (g->block_type == 2) {
188  if (g->switch_point) {
189  if(s->sample_rate_index == 8)
190  avpriv_request_sample(s->avctx, "switch point in 8khz");
191  /* if switched mode, we handle the 36 first samples as
192  long blocks. For 8000Hz, we handle the 72 first
193  exponents as long blocks */
194  if (s->sample_rate_index <= 2)
195  g->long_end = 8;
196  else
197  g->long_end = 6;
198 
199  g->short_start = 3;
200  } else {
201  g->long_end = 0;
202  g->short_start = 0;
203  }
204  } else {
205  g->short_start = 13;
206  g->long_end = 22;
207  }
208 }
209 
210 /* layer 1 unscaling */
211 /* n = number of bits of the mantissa minus 1 */
212 static inline int l1_unscale(int n, int mant, int scale_factor)
213 {
214  int shift, mod;
215  int64_t val;
216 
217  shift = scale_factor_modshift[scale_factor];
218  mod = shift & 3;
219  shift >>= 2;
220  val = MUL64((int)(mant + (-1U << n) + 1), scale_factor_mult[n-1][mod]);
221  shift += n;
222  /* NOTE: at this point, 1 <= shift >= 21 + 15 */
223  return (int)((val + (1LL << (shift - 1))) >> shift);
224 }
225 
226 static inline int l2_unscale_group(int steps, int mant, int scale_factor)
227 {
228  int shift, mod, val;
229 
230  shift = scale_factor_modshift[scale_factor];
231  mod = shift & 3;
232  shift >>= 2;
233 
234  val = (mant - (steps >> 1)) * scale_factor_mult2[steps >> 2][mod];
235  /* NOTE: at this point, 0 <= shift <= 21 */
236  if (shift > 0)
237  val = (val + (1 << (shift - 1))) >> shift;
238  return val;
239 }
240 
241 /* compute value^(4/3) * 2^(exponent/4). It normalized to FRAC_BITS */
242 static inline int l3_unscale(int value, int exponent)
243 {
244  unsigned int m;
245  int e;
246 
247  e = table_4_3_exp [4 * value + (exponent & 3)];
248  m = table_4_3_value[4 * value + (exponent & 3)];
249  e -= exponent >> 2;
250 #ifdef DEBUG
251  if(e < 1)
252  av_log(NULL, AV_LOG_WARNING, "l3_unscale: e is %d\n", e);
253 #endif
254  if (e > (SUINT)31)
255  return 0;
256  m = (m + ((1U << e)>>1)) >> e;
257 
258  return m;
259 }
260 
261 static av_cold void decode_init_static(void)
262 {
263  int i, j, k;
264  int offset;
265 
266  /* scale factors table for layer 1/2 */
267  for (i = 0; i < 64; i++) {
268  int shift, mod;
269  /* 1.0 (i = 3) is normalized to 2 ^ FRAC_BITS */
270  shift = i / 3;
271  mod = i % 3;
272  scale_factor_modshift[i] = mod | (shift << 2);
273  }
274 
275  /* scale factor multiply for layer 1 */
276  for (i = 0; i < 15; i++) {
277  int n, norm;
278  n = i + 2;
279  norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
280  scale_factor_mult[i][0] = MULLx(norm, FIXR(1.0 * 2.0), FRAC_BITS);
281  scale_factor_mult[i][1] = MULLx(norm, FIXR(0.7937005259 * 2.0), FRAC_BITS);
282  scale_factor_mult[i][2] = MULLx(norm, FIXR(0.6299605249 * 2.0), FRAC_BITS);
283  ff_dlog(NULL, "%d: norm=%x s=%"PRIx32" %"PRIx32" %"PRIx32"\n", i,
284  (unsigned)norm,
285  scale_factor_mult[i][0],
286  scale_factor_mult[i][1],
287  scale_factor_mult[i][2]);
288  }
289 
290  RENAME(ff_mpa_synth_init)(RENAME(ff_mpa_synth_window));
291 
292  /* huffman decode tables */
293  offset = 0;
294  for (i = 1; i < 16; i++) {
295  const HuffTable *h = &mpa_huff_tables[i];
296  int xsize, x, y;
297  uint8_t tmp_bits [512] = { 0 };
298  uint16_t tmp_codes[512] = { 0 };
299 
300  xsize = h->xsize;
301 
302  j = 0;
303  for (x = 0; x < xsize; x++) {
304  for (y = 0; y < xsize; y++) {
305  tmp_bits [(x << 5) | y | ((x&&y)<<4)]= h->bits [j ];
306  tmp_codes[(x << 5) | y | ((x&&y)<<4)]= h->codes[j++];
307  }
308  }
309 
310  /* XXX: fail test */
313  init_vlc(&huff_vlc[i], 7, 512,
314  tmp_bits, 1, 1, tmp_codes, 2, 2,
317  }
319 
320  offset = 0;
321  for (i = 0; i < 2; i++) {
324  init_vlc(&huff_quad_vlc[i], i == 0 ? 7 : 4, 16,
325  mpa_quad_bits[i], 1, 1, mpa_quad_codes[i], 1, 1,
328  }
330 
331  for (i = 0; i < 9; i++) {
332  k = 0;
333  for (j = 0; j < 22; j++) {
334  band_index_long[i][j] = k;
335  k += band_size_long[i][j];
336  }
337  band_index_long[i][22] = k;
338  }
339 
340  /* compute n ^ (4/3) and store it in mantissa/exp format */
341 
343 
344  for (i = 0; i < 4; i++) {
345  if (ff_mpa_quant_bits[i] < 0) {
346  for (j = 0; j < (1 << (-ff_mpa_quant_bits[i]+1)); j++) {
347  int val1, val2, val3, steps;
348  int val = j;
349  steps = ff_mpa_quant_steps[i];
350  val1 = val % steps;
351  val /= steps;
352  val2 = val % steps;
353  val3 = val / steps;
354  division_tabs[i][j] = val1 + (val2 << 4) + (val3 << 8);
355  }
356  }
357  }
358 
359 
360  for (i = 0; i < 7; i++) {
361  float f;
362  INTFLOAT v;
363  if (i != 6) {
364  f = tan((double)i * M_PI / 12.0);
365  v = FIXR(f / (1.0 + f));
366  } else {
367  v = FIXR(1.0);
368  }
369  is_table[0][ i] = v;
370  is_table[1][6 - i] = v;
371  }
372  /* invalid values */
373  for (i = 7; i < 16; i++)
374  is_table[0][i] = is_table[1][i] = 0.0;
375 
376  for (i = 0; i < 16; i++) {
377  double f;
378  int e, k;
379 
380  for (j = 0; j < 2; j++) {
381  e = -(j + 1) * ((i + 1) >> 1);
382  f = exp2(e / 4.0);
383  k = i & 1;
384  is_table_lsf[j][k ^ 1][i] = FIXR(f);
385  is_table_lsf[j][k ][i] = FIXR(1.0);
386  ff_dlog(NULL, "is_table_lsf %d %d: %f %f\n",
387  i, j, (float) is_table_lsf[j][0][i],
388  (float) is_table_lsf[j][1][i]);
389  }
390  }
391 
392  for (i = 0; i < 8; i++) {
393  double ci, cs, ca;
394  ci = ci_table[i];
395  cs = 1.0 / sqrt(1.0 + ci * ci);
396  ca = cs * ci;
397 #if !USE_FLOATS
398  csa_table[i][0] = FIXHR(cs/4);
399  csa_table[i][1] = FIXHR(ca/4);
400  csa_table[i][2] = FIXHR(ca/4) + FIXHR(cs/4);
401  csa_table[i][3] = FIXHR(ca/4) - FIXHR(cs/4);
402 #else
403  csa_table[i][0] = cs;
404  csa_table[i][1] = ca;
405  csa_table[i][2] = ca + cs;
406  csa_table[i][3] = ca - cs;
407 #endif
408  }
409 }
410 
411 #if USE_FLOATS
412 static av_cold int decode_close(AVCodecContext * avctx)
413 {
414  MPADecodeContext *s = avctx->priv_data;
415  av_freep(&s->fdsp);
416 
417  return 0;
418 }
419 #endif
420 
421 static av_cold int decode_init(AVCodecContext * avctx)
422 {
423  static int initialized_tables = 0;
424  MPADecodeContext *s = avctx->priv_data;
425 
426  if (!initialized_tables) {
428  initialized_tables = 1;
429  }
430 
431  s->avctx = avctx;
432 
433 #if USE_FLOATS
435  if (!s->fdsp)
436  return AVERROR(ENOMEM);
437 #endif
438 
439  ff_mpadsp_init(&s->mpadsp);
440 
441  if (avctx->request_sample_fmt == OUT_FMT &&
442  avctx->codec_id != AV_CODEC_ID_MP3ON4)
443  avctx->sample_fmt = OUT_FMT;
444  else
445  avctx->sample_fmt = OUT_FMT_P;
446  s->err_recognition = avctx->err_recognition;
447 
448  if (avctx->codec_id == AV_CODEC_ID_MP3ADU)
449  s->adu_mode = 1;
450 
451  return 0;
452 }
453 
454 #define C3 FIXHR(0.86602540378443864676/2)
455 #define C4 FIXHR(0.70710678118654752439/2) //0.5 / cos(pi*(9)/36)
456 #define C5 FIXHR(0.51763809020504152469/2) //0.5 / cos(pi*(5)/36)
457 #define C6 FIXHR(1.93185165257813657349/4) //0.5 / cos(pi*(15)/36)
458 
459 /* 12 points IMDCT. We compute it "by hand" by factorizing obvious
460  cases. */
462 {
463  SUINTFLOAT in0, in1, in2, in3, in4, in5, t1, t2;
464 
465  in0 = in[0*3];
466  in1 = in[1*3] + in[0*3];
467  in2 = in[2*3] + in[1*3];
468  in3 = in[3*3] + in[2*3];
469  in4 = in[4*3] + in[3*3];
470  in5 = in[5*3] + in[4*3];
471  in5 += in3;
472  in3 += in1;
473 
474  in2 = MULH3(in2, C3, 2);
475  in3 = MULH3(in3, C3, 4);
476 
477  t1 = in0 - in4;
478  t2 = MULH3(in1 - in5, C4, 2);
479 
480  out[ 7] =
481  out[10] = t1 + t2;
482  out[ 1] =
483  out[ 4] = t1 - t2;
484 
485  in0 += SHR(in4, 1);
486  in4 = in0 + in2;
487  in5 += 2*in1;
488  in1 = MULH3(in5 + in3, C5, 1);
489  out[ 8] =
490  out[ 9] = in4 + in1;
491  out[ 2] =
492  out[ 3] = in4 - in1;
493 
494  in0 -= in2;
495  in5 = MULH3(in5 - in3, C6, 2);
496  out[ 0] =
497  out[ 5] = in0 - in5;
498  out[ 6] =
499  out[11] = in0 + in5;
500 }
501 
502 /* return the number of decoded frames */
504 {
505  int bound, i, v, n, ch, j, mant;
506  uint8_t allocation[MPA_MAX_CHANNELS][SBLIMIT];
507  uint8_t scale_factors[MPA_MAX_CHANNELS][SBLIMIT];
508 
509  if (s->mode == MPA_JSTEREO)
510  bound = (s->mode_ext + 1) * 4;
511  else
512  bound = SBLIMIT;
513 
514  /* allocation bits */
515  for (i = 0; i < bound; i++) {
516  for (ch = 0; ch < s->nb_channels; ch++) {
517  allocation[ch][i] = get_bits(&s->gb, 4);
518  }
519  }
520  for (i = bound; i < SBLIMIT; i++)
521  allocation[0][i] = get_bits(&s->gb, 4);
522 
523  /* scale factors */
524  for (i = 0; i < bound; i++) {
525  for (ch = 0; ch < s->nb_channels; ch++) {
526  if (allocation[ch][i])
527  scale_factors[ch][i] = get_bits(&s->gb, 6);
528  }
529  }
530  for (i = bound; i < SBLIMIT; i++) {
531  if (allocation[0][i]) {
532  scale_factors[0][i] = get_bits(&s->gb, 6);
533  scale_factors[1][i] = get_bits(&s->gb, 6);
534  }
535  }
536 
537  /* compute samples */
538  for (j = 0; j < 12; j++) {
539  for (i = 0; i < bound; i++) {
540  for (ch = 0; ch < s->nb_channels; ch++) {
541  n = allocation[ch][i];
542  if (n) {
543  mant = get_bits(&s->gb, n + 1);
544  v = l1_unscale(n, mant, scale_factors[ch][i]);
545  } else {
546  v = 0;
547  }
548  s->sb_samples[ch][j][i] = v;
549  }
550  }
551  for (i = bound; i < SBLIMIT; i++) {
552  n = allocation[0][i];
553  if (n) {
554  mant = get_bits(&s->gb, n + 1);
555  v = l1_unscale(n, mant, scale_factors[0][i]);
556  s->sb_samples[0][j][i] = v;
557  v = l1_unscale(n, mant, scale_factors[1][i]);
558  s->sb_samples[1][j][i] = v;
559  } else {
560  s->sb_samples[0][j][i] = 0;
561  s->sb_samples[1][j][i] = 0;
562  }
563  }
564  }
565  return 12;
566 }
567 
569 {
570  int sblimit; /* number of used subbands */
571  const unsigned char *alloc_table;
572  int table, bit_alloc_bits, i, j, ch, bound, v;
573  unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
574  unsigned char scale_code[MPA_MAX_CHANNELS][SBLIMIT];
575  unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3], *sf;
576  int scale, qindex, bits, steps, k, l, m, b;
577 
578  /* select decoding table */
579  table = ff_mpa_l2_select_table(s->bit_rate / 1000, s->nb_channels,
580  s->sample_rate, s->lsf);
581  sblimit = ff_mpa_sblimit_table[table];
583 
584  if (s->mode == MPA_JSTEREO)
585  bound = (s->mode_ext + 1) * 4;
586  else
587  bound = sblimit;
588 
589  ff_dlog(s->avctx, "bound=%d sblimit=%d\n", bound, sblimit);
590 
591  /* sanity check */
592  if (bound > sblimit)
593  bound = sblimit;
594 
595  /* parse bit allocation */
596  j = 0;
597  for (i = 0; i < bound; i++) {
598  bit_alloc_bits = alloc_table[j];
599  for (ch = 0; ch < s->nb_channels; ch++)
600  bit_alloc[ch][i] = get_bits(&s->gb, bit_alloc_bits);
601  j += 1 << bit_alloc_bits;
602  }
603  for (i = bound; i < sblimit; i++) {
604  bit_alloc_bits = alloc_table[j];
605  v = get_bits(&s->gb, bit_alloc_bits);
606  bit_alloc[0][i] = v;
607  bit_alloc[1][i] = v;
608  j += 1 << bit_alloc_bits;
609  }
610 
611  /* scale codes */
612  for (i = 0; i < sblimit; i++) {
613  for (ch = 0; ch < s->nb_channels; ch++) {
614  if (bit_alloc[ch][i])
615  scale_code[ch][i] = get_bits(&s->gb, 2);
616  }
617  }
618 
619  /* scale factors */
620  for (i = 0; i < sblimit; i++) {
621  for (ch = 0; ch < s->nb_channels; ch++) {
622  if (bit_alloc[ch][i]) {
623  sf = scale_factors[ch][i];
624  switch (scale_code[ch][i]) {
625  default:
626  case 0:
627  sf[0] = get_bits(&s->gb, 6);
628  sf[1] = get_bits(&s->gb, 6);
629  sf[2] = get_bits(&s->gb, 6);
630  break;
631  case 2:
632  sf[0] = get_bits(&s->gb, 6);
633  sf[1] = sf[0];
634  sf[2] = sf[0];
635  break;
636  case 1:
637  sf[0] = get_bits(&s->gb, 6);
638  sf[2] = get_bits(&s->gb, 6);
639  sf[1] = sf[0];
640  break;
641  case 3:
642  sf[0] = get_bits(&s->gb, 6);
643  sf[2] = get_bits(&s->gb, 6);
644  sf[1] = sf[2];
645  break;
646  }
647  }
648  }
649  }
650 
651  /* samples */
652  for (k = 0; k < 3; k++) {
653  for (l = 0; l < 12; l += 3) {
654  j = 0;
655  for (i = 0; i < bound; i++) {
656  bit_alloc_bits = alloc_table[j];
657  for (ch = 0; ch < s->nb_channels; ch++) {
658  b = bit_alloc[ch][i];
659  if (b) {
660  scale = scale_factors[ch][i][k];
661  qindex = alloc_table[j+b];
662  bits = ff_mpa_quant_bits[qindex];
663  if (bits < 0) {
664  int v2;
665  /* 3 values at the same time */
666  v = get_bits(&s->gb, -bits);
667  v2 = division_tabs[qindex][v];
668  steps = ff_mpa_quant_steps[qindex];
669 
670  s->sb_samples[ch][k * 12 + l + 0][i] =
671  l2_unscale_group(steps, v2 & 15, scale);
672  s->sb_samples[ch][k * 12 + l + 1][i] =
673  l2_unscale_group(steps, (v2 >> 4) & 15, scale);
674  s->sb_samples[ch][k * 12 + l + 2][i] =
675  l2_unscale_group(steps, v2 >> 8 , scale);
676  } else {
677  for (m = 0; m < 3; m++) {
678  v = get_bits(&s->gb, bits);
679  v = l1_unscale(bits - 1, v, scale);
680  s->sb_samples[ch][k * 12 + l + m][i] = v;
681  }
682  }
683  } else {
684  s->sb_samples[ch][k * 12 + l + 0][i] = 0;
685  s->sb_samples[ch][k * 12 + l + 1][i] = 0;
686  s->sb_samples[ch][k * 12 + l + 2][i] = 0;
687  }
688  }
689  /* next subband in alloc table */
690  j += 1 << bit_alloc_bits;
691  }
692  /* XXX: find a way to avoid this duplication of code */
693  for (i = bound; i < sblimit; i++) {
694  bit_alloc_bits = alloc_table[j];
695  b = bit_alloc[0][i];
696  if (b) {
697  int mant, scale0, scale1;
698  scale0 = scale_factors[0][i][k];
699  scale1 = scale_factors[1][i][k];
700  qindex = alloc_table[j+b];
701  bits = ff_mpa_quant_bits[qindex];
702  if (bits < 0) {
703  /* 3 values at the same time */
704  v = get_bits(&s->gb, -bits);
705  steps = ff_mpa_quant_steps[qindex];
706  mant = v % steps;
707  v = v / steps;
708  s->sb_samples[0][k * 12 + l + 0][i] =
709  l2_unscale_group(steps, mant, scale0);
710  s->sb_samples[1][k * 12 + l + 0][i] =
711  l2_unscale_group(steps, mant, scale1);
712  mant = v % steps;
713  v = v / steps;
714  s->sb_samples[0][k * 12 + l + 1][i] =
715  l2_unscale_group(steps, mant, scale0);
716  s->sb_samples[1][k * 12 + l + 1][i] =
717  l2_unscale_group(steps, mant, scale1);
718  s->sb_samples[0][k * 12 + l + 2][i] =
719  l2_unscale_group(steps, v, scale0);
720  s->sb_samples[1][k * 12 + l + 2][i] =
721  l2_unscale_group(steps, v, scale1);
722  } else {
723  for (m = 0; m < 3; m++) {
724  mant = get_bits(&s->gb, bits);
725  s->sb_samples[0][k * 12 + l + m][i] =
726  l1_unscale(bits - 1, mant, scale0);
727  s->sb_samples[1][k * 12 + l + m][i] =
728  l1_unscale(bits - 1, mant, scale1);
729  }
730  }
731  } else {
732  s->sb_samples[0][k * 12 + l + 0][i] = 0;
733  s->sb_samples[0][k * 12 + l + 1][i] = 0;
734  s->sb_samples[0][k * 12 + l + 2][i] = 0;
735  s->sb_samples[1][k * 12 + l + 0][i] = 0;
736  s->sb_samples[1][k * 12 + l + 1][i] = 0;
737  s->sb_samples[1][k * 12 + l + 2][i] = 0;
738  }
739  /* next subband in alloc table */
740  j += 1 << bit_alloc_bits;
741  }
742  /* fill remaining samples to zero */
743  for (i = sblimit; i < SBLIMIT; i++) {
744  for (ch = 0; ch < s->nb_channels; ch++) {
745  s->sb_samples[ch][k * 12 + l + 0][i] = 0;
746  s->sb_samples[ch][k * 12 + l + 1][i] = 0;
747  s->sb_samples[ch][k * 12 + l + 2][i] = 0;
748  }
749  }
750  }
751  }
752  return 3 * 12;
753 }
754 
755 #define SPLIT(dst,sf,n) \
756  if (n == 3) { \
757  int m = (sf * 171) >> 9; \
758  dst = sf - 3 * m; \
759  sf = m; \
760  } else if (n == 4) { \
761  dst = sf & 3; \
762  sf >>= 2; \
763  } else if (n == 5) { \
764  int m = (sf * 205) >> 10; \
765  dst = sf - 5 * m; \
766  sf = m; \
767  } else if (n == 6) { \
768  int m = (sf * 171) >> 10; \
769  dst = sf - 6 * m; \
770  sf = m; \
771  } else { \
772  dst = 0; \
773  }
774 
775 static av_always_inline void lsf_sf_expand(int *slen, int sf, int n1, int n2,
776  int n3)
777 {
778  SPLIT(slen[3], sf, n3)
779  SPLIT(slen[2], sf, n2)
780  SPLIT(slen[1], sf, n1)
781  slen[0] = sf;
782 }
783 
785  int16_t *exponents)
786 {
787  const uint8_t *bstab, *pretab;
788  int len, i, j, k, l, v0, shift, gain, gains[3];
789  int16_t *exp_ptr;
790 
791  exp_ptr = exponents;
792  gain = g->global_gain - 210;
793  shift = g->scalefac_scale + 1;
794 
795  bstab = band_size_long[s->sample_rate_index];
796  pretab = mpa_pretab[g->preflag];
797  for (i = 0; i < g->long_end; i++) {
798  v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift) + 400;
799  len = bstab[i];
800  for (j = len; j > 0; j--)
801  *exp_ptr++ = v0;
802  }
803 
804  if (g->short_start < 13) {
805  bstab = band_size_short[s->sample_rate_index];
806  gains[0] = gain - (g->subblock_gain[0] << 3);
807  gains[1] = gain - (g->subblock_gain[1] << 3);
808  gains[2] = gain - (g->subblock_gain[2] << 3);
809  k = g->long_end;
810  for (i = g->short_start; i < 13; i++) {
811  len = bstab[i];
812  for (l = 0; l < 3; l++) {
813  v0 = gains[l] - (g->scale_factors[k++] << shift) + 400;
814  for (j = len; j > 0; j--)
815  *exp_ptr++ = v0;
816  }
817  }
818  }
819 }
820 
821 static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos,
822  int *end_pos2)
823 {
824  if (s->in_gb.buffer && *pos >= s->gb.size_in_bits - s->extrasize * 8) {
825  s->gb = s->in_gb;
826  s->in_gb.buffer = NULL;
827  s->extrasize = 0;
828  av_assert2((get_bits_count(&s->gb) & 7) == 0);
829  skip_bits_long(&s->gb, *pos - *end_pos);
830  *end_pos2 =
831  *end_pos = *end_pos2 + get_bits_count(&s->gb) - *pos;
832  *pos = get_bits_count(&s->gb);
833  }
834 }
835 
836 /* Following is an optimized code for
837  INTFLOAT v = *src
838  if(get_bits1(&s->gb))
839  v = -v;
840  *dst = v;
841 */
842 #if USE_FLOATS
843 #define READ_FLIP_SIGN(dst,src) \
844  v = AV_RN32A(src) ^ (get_bits1(&s->gb) << 31); \
845  AV_WN32A(dst, v);
846 #else
847 #define READ_FLIP_SIGN(dst,src) \
848  v = -get_bits1(&s->gb); \
849  *(dst) = (*(src) ^ v) - v;
850 #endif
851 
853  int16_t *exponents, int end_pos2)
854 {
855  int s_index;
856  int i;
857  int last_pos, bits_left;
858  VLC *vlc;
859  int end_pos = FFMIN(end_pos2, s->gb.size_in_bits - s->extrasize * 8);
860 
861  /* low frequencies (called big values) */
862  s_index = 0;
863  for (i = 0; i < 3; i++) {
864  int j, k, l, linbits;
865  j = g->region_size[i];
866  if (j == 0)
867  continue;
868  /* select vlc table */
869  k = g->table_select[i];
870  l = mpa_huff_data[k][0];
871  linbits = mpa_huff_data[k][1];
872  vlc = &huff_vlc[l];
873 
874  if (!l) {
875  memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * 2 * j);
876  s_index += 2 * j;
877  continue;
878  }
879 
880  /* read huffcode and compute each couple */
881  for (; j > 0; j--) {
882  int exponent, x, y;
883  int v;
884  int pos = get_bits_count(&s->gb);
885 
886  if (pos >= end_pos){
887  switch_buffer(s, &pos, &end_pos, &end_pos2);
888  if (pos >= end_pos)
889  break;
890  }
891  y = get_vlc2(&s->gb, vlc->table, 7, 3);
892 
893  if (!y) {
894  g->sb_hybrid[s_index ] =
895  g->sb_hybrid[s_index+1] = 0;
896  s_index += 2;
897  continue;
898  }
899 
900  exponent= exponents[s_index];
901 
902  ff_dlog(s->avctx, "region=%d n=%d y=%d exp=%d\n",
903  i, g->region_size[i] - j, y, exponent);
904  if (y & 16) {
905  x = y >> 5;
906  y = y & 0x0f;
907  if (x < 15) {
908  READ_FLIP_SIGN(g->sb_hybrid + s_index, RENAME(expval_table)[exponent] + x)
909  } else {
910  x += get_bitsz(&s->gb, linbits);
911  v = l3_unscale(x, exponent);
912  if (get_bits1(&s->gb))
913  v = -v;
914  g->sb_hybrid[s_index] = v;
915  }
916  if (y < 15) {
917  READ_FLIP_SIGN(g->sb_hybrid + s_index + 1, RENAME(expval_table)[exponent] + y)
918  } else {
919  y += get_bitsz(&s->gb, linbits);
920  v = l3_unscale(y, exponent);
921  if (get_bits1(&s->gb))
922  v = -v;
923  g->sb_hybrid[s_index+1] = v;
924  }
925  } else {
926  x = y >> 5;
927  y = y & 0x0f;
928  x += y;
929  if (x < 15) {
930  READ_FLIP_SIGN(g->sb_hybrid + s_index + !!y, RENAME(expval_table)[exponent] + x)
931  } else {
932  x += get_bitsz(&s->gb, linbits);
933  v = l3_unscale(x, exponent);
934  if (get_bits1(&s->gb))
935  v = -v;
936  g->sb_hybrid[s_index+!!y] = v;
937  }
938  g->sb_hybrid[s_index + !y] = 0;
939  }
940  s_index += 2;
941  }
942  }
943 
944  /* high frequencies */
945  vlc = &huff_quad_vlc[g->count1table_select];
946  last_pos = 0;
947  while (s_index <= 572) {
948  int pos, code;
949  pos = get_bits_count(&s->gb);
950  if (pos >= end_pos) {
951  if (pos > end_pos2 && last_pos) {
952  /* some encoders generate an incorrect size for this
953  part. We must go back into the data */
954  s_index -= 4;
955  skip_bits_long(&s->gb, last_pos - pos);
956  av_log(s->avctx, AV_LOG_INFO, "overread, skip %d enddists: %d %d\n", last_pos - pos, end_pos-pos, end_pos2-pos);
957  if(s->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT))
958  s_index=0;
959  break;
960  }
961  switch_buffer(s, &pos, &end_pos, &end_pos2);
962  if (pos >= end_pos)
963  break;
964  }
965  last_pos = pos;
966 
967  code = get_vlc2(&s->gb, vlc->table, vlc->bits, 1);
968  ff_dlog(s->avctx, "t=%d code=%d\n", g->count1table_select, code);
969  g->sb_hybrid[s_index+0] =
970  g->sb_hybrid[s_index+1] =
971  g->sb_hybrid[s_index+2] =
972  g->sb_hybrid[s_index+3] = 0;
973  while (code) {
974  static const int idxtab[16] = { 3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0 };
975  int v;
976  int pos = s_index + idxtab[code];
977  code ^= 8 >> idxtab[code];
978  READ_FLIP_SIGN(g->sb_hybrid + pos, RENAME(exp_table)+exponents[pos])
979  }
980  s_index += 4;
981  }
982  /* skip extension bits */
983  bits_left = end_pos2 - get_bits_count(&s->gb);
984  if (bits_left < 0 && (s->err_recognition & (AV_EF_BUFFER|AV_EF_COMPLIANT))) {
985  av_log(s->avctx, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
986  s_index=0;
987  } else if (bits_left > 0 && (s->err_recognition & (AV_EF_BUFFER|AV_EF_AGGRESSIVE))) {
988  av_log(s->avctx, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
989  s_index = 0;
990  }
991  memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * (576 - s_index));
992  skip_bits_long(&s->gb, bits_left);
993 
994  i = get_bits_count(&s->gb);
995  switch_buffer(s, &i, &end_pos, &end_pos2);
996 
997  return 0;
998 }
999 
1000 /* Reorder short blocks from bitstream order to interleaved order. It
1001  would be faster to do it in parsing, but the code would be far more
1002  complicated */
1004 {
1005  int i, j, len;
1006  INTFLOAT *ptr, *dst, *ptr1;
1007  INTFLOAT tmp[576];
1008 
1009  if (g->block_type != 2)
1010  return;
1011 
1012  if (g->switch_point) {
1013  if (s->sample_rate_index != 8)
1014  ptr = g->sb_hybrid + 36;
1015  else
1016  ptr = g->sb_hybrid + 72;
1017  } else {
1018  ptr = g->sb_hybrid;
1019  }
1020 
1021  for (i = g->short_start; i < 13; i++) {
1022  len = band_size_short[s->sample_rate_index][i];
1023  ptr1 = ptr;
1024  dst = tmp;
1025  for (j = len; j > 0; j--) {
1026  *dst++ = ptr[0*len];
1027  *dst++ = ptr[1*len];
1028  *dst++ = ptr[2*len];
1029  ptr++;
1030  }
1031  ptr += 2 * len;
1032  memcpy(ptr1, tmp, len * 3 * sizeof(*ptr1));
1033  }
1034 }
1035 
1036 #define ISQRT2 FIXR(0.70710678118654752440)
1037 
1039 {
1040  int i, j, k, l;
1041  int sf_max, sf, len, non_zero_found;
1042  INTFLOAT (*is_tab)[16], *tab0, *tab1, v1, v2;
1043  SUINTFLOAT tmp0, tmp1;
1044  int non_zero_found_short[3];
1045 
1046  /* intensity stereo */
1047  if (s->mode_ext & MODE_EXT_I_STEREO) {
1048  if (!s->lsf) {
1049  is_tab = is_table;
1050  sf_max = 7;
1051  } else {
1052  is_tab = is_table_lsf[g1->scalefac_compress & 1];
1053  sf_max = 16;
1054  }
1055 
1056  tab0 = g0->sb_hybrid + 576;
1057  tab1 = g1->sb_hybrid + 576;
1058 
1059  non_zero_found_short[0] = 0;
1060  non_zero_found_short[1] = 0;
1061  non_zero_found_short[2] = 0;
1062  k = (13 - g1->short_start) * 3 + g1->long_end - 3;
1063  for (i = 12; i >= g1->short_start; i--) {
1064  /* for last band, use previous scale factor */
1065  if (i != 11)
1066  k -= 3;
1067  len = band_size_short[s->sample_rate_index][i];
1068  for (l = 2; l >= 0; l--) {
1069  tab0 -= len;
1070  tab1 -= len;
1071  if (!non_zero_found_short[l]) {
1072  /* test if non zero band. if so, stop doing i-stereo */
1073  for (j = 0; j < len; j++) {
1074  if (tab1[j] != 0) {
1075  non_zero_found_short[l] = 1;
1076  goto found1;
1077  }
1078  }
1079  sf = g1->scale_factors[k + l];
1080  if (sf >= sf_max)
1081  goto found1;
1082 
1083  v1 = is_tab[0][sf];
1084  v2 = is_tab[1][sf];
1085  for (j = 0; j < len; j++) {
1086  tmp0 = tab0[j];
1087  tab0[j] = MULLx(tmp0, v1, FRAC_BITS);
1088  tab1[j] = MULLx(tmp0, v2, FRAC_BITS);
1089  }
1090  } else {
1091 found1:
1092  if (s->mode_ext & MODE_EXT_MS_STEREO) {
1093  /* lower part of the spectrum : do ms stereo
1094  if enabled */
1095  for (j = 0; j < len; j++) {
1096  tmp0 = tab0[j];
1097  tmp1 = tab1[j];
1098  tab0[j] = MULLx(tmp0 + tmp1, ISQRT2, FRAC_BITS);
1099  tab1[j] = MULLx(tmp0 - tmp1, ISQRT2, FRAC_BITS);
1100  }
1101  }
1102  }
1103  }
1104  }
1105 
1106  non_zero_found = non_zero_found_short[0] |
1107  non_zero_found_short[1] |
1108  non_zero_found_short[2];
1109 
1110  for (i = g1->long_end - 1;i >= 0;i--) {
1111  len = band_size_long[s->sample_rate_index][i];
1112  tab0 -= len;
1113  tab1 -= len;
1114  /* test if non zero band. if so, stop doing i-stereo */
1115  if (!non_zero_found) {
1116  for (j = 0; j < len; j++) {
1117  if (tab1[j] != 0) {
1118  non_zero_found = 1;
1119  goto found2;
1120  }
1121  }
1122  /* for last band, use previous scale factor */
1123  k = (i == 21) ? 20 : i;
1124  sf = g1->scale_factors[k];
1125  if (sf >= sf_max)
1126  goto found2;
1127  v1 = is_tab[0][sf];
1128  v2 = is_tab[1][sf];
1129  for (j = 0; j < len; j++) {
1130  tmp0 = tab0[j];
1131  tab0[j] = MULLx(tmp0, v1, FRAC_BITS);
1132  tab1[j] = MULLx(tmp0, v2, FRAC_BITS);
1133  }
1134  } else {
1135 found2:
1136  if (s->mode_ext & MODE_EXT_MS_STEREO) {
1137  /* lower part of the spectrum : do ms stereo
1138  if enabled */
1139  for (j = 0; j < len; j++) {
1140  tmp0 = tab0[j];
1141  tmp1 = tab1[j];
1142  tab0[j] = MULLx(tmp0 + tmp1, ISQRT2, FRAC_BITS);
1143  tab1[j] = MULLx(tmp0 - tmp1, ISQRT2, FRAC_BITS);
1144  }
1145  }
1146  }
1147  }
1148  } else if (s->mode_ext & MODE_EXT_MS_STEREO) {
1149  /* ms stereo ONLY */
1150  /* NOTE: the 1/sqrt(2) normalization factor is included in the
1151  global gain */
1152 #if USE_FLOATS
1153  s->fdsp->butterflies_float(g0->sb_hybrid, g1->sb_hybrid, 576);
1154 #else
1155  tab0 = g0->sb_hybrid;
1156  tab1 = g1->sb_hybrid;
1157  for (i = 0; i < 576; i++) {
1158  tmp0 = tab0[i];
1159  tmp1 = tab1[i];
1160  tab0[i] = tmp0 + tmp1;
1161  tab1[i] = tmp0 - tmp1;
1162  }
1163 #endif
1164  }
1165 }
1166 
1167 #if USE_FLOATS
1168 #if HAVE_MIPSFPU
1170 #endif /* HAVE_MIPSFPU */
1171 #else
1172 #if HAVE_MIPSDSP
1174 #endif /* HAVE_MIPSDSP */
1175 #endif /* USE_FLOATS */
1176 
1177 #ifndef compute_antialias
1178 #if USE_FLOATS
1179 #define AA(j) do { \
1180  float tmp0 = ptr[-1-j]; \
1181  float tmp1 = ptr[ j]; \
1182  ptr[-1-j] = tmp0 * csa_table[j][0] - tmp1 * csa_table[j][1]; \
1183  ptr[ j] = tmp0 * csa_table[j][1] + tmp1 * csa_table[j][0]; \
1184  } while (0)
1185 #else
1186 #define AA(j) do { \
1187  SUINT tmp0 = ptr[-1-j]; \
1188  SUINT tmp1 = ptr[ j]; \
1189  SUINT tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]); \
1190  ptr[-1-j] = 4 * (tmp2 - MULH(tmp1, csa_table[j][2])); \
1191  ptr[ j] = 4 * (tmp2 + MULH(tmp0, csa_table[j][3])); \
1192  } while (0)
1193 #endif
1194 
1196 {
1197  INTFLOAT *ptr;
1198  int n, i;
1199 
1200  /* we antialias only "long" bands */
1201  if (g->block_type == 2) {
1202  if (!g->switch_point)
1203  return;
1204  /* XXX: check this for 8000Hz case */
1205  n = 1;
1206  } else {
1207  n = SBLIMIT - 1;
1208  }
1209 
1210  ptr = g->sb_hybrid + 18;
1211  for (i = n; i > 0; i--) {
1212  AA(0);
1213  AA(1);
1214  AA(2);
1215  AA(3);
1216  AA(4);
1217  AA(5);
1218  AA(6);
1219  AA(7);
1220 
1221  ptr += 18;
1222  }
1223 }
1224 #endif /* compute_antialias */
1225 
1227  INTFLOAT *sb_samples, INTFLOAT *mdct_buf)
1228 {
1229  INTFLOAT *win, *out_ptr, *ptr, *buf, *ptr1;
1230  INTFLOAT out2[12];
1231  int i, j, mdct_long_end, sblimit;
1232 
1233  /* find last non zero block */
1234  ptr = g->sb_hybrid + 576;
1235  ptr1 = g->sb_hybrid + 2 * 18;
1236  while (ptr >= ptr1) {
1237  int32_t *p;
1238  ptr -= 6;
1239  p = (int32_t*)ptr;
1240  if (p[0] | p[1] | p[2] | p[3] | p[4] | p[5])
1241  break;
1242  }
1243  sblimit = ((ptr - g->sb_hybrid) / 18) + 1;
1244 
1245  if (g->block_type == 2) {
1246  /* XXX: check for 8000 Hz */
1247  if (g->switch_point)
1248  mdct_long_end = 2;
1249  else
1250  mdct_long_end = 0;
1251  } else {
1252  mdct_long_end = sblimit;
1253  }
1254 
1255  s->mpadsp.RENAME(imdct36_blocks)(sb_samples, mdct_buf, g->sb_hybrid,
1256  mdct_long_end, g->switch_point,
1257  g->block_type);
1258 
1259  buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1260  ptr = g->sb_hybrid + 18 * mdct_long_end;
1261 
1262  for (j = mdct_long_end; j < sblimit; j++) {
1263  /* select frequency inversion */
1264  win = RENAME(ff_mdct_win)[2 + (4 & -(j & 1))];
1265  out_ptr = sb_samples + j;
1266 
1267  for (i = 0; i < 6; i++) {
1268  *out_ptr = buf[4*i];
1269  out_ptr += SBLIMIT;
1270  }
1271  imdct12(out2, ptr + 0);
1272  for (i = 0; i < 6; i++) {
1273  *out_ptr = MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*1)];
1274  buf[4*(i + 6*2)] = MULH3(out2[i + 6], win[i + 6], 1);
1275  out_ptr += SBLIMIT;
1276  }
1277  imdct12(out2, ptr + 1);
1278  for (i = 0; i < 6; i++) {
1279  *out_ptr = MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*2)];
1280  buf[4*(i + 6*0)] = MULH3(out2[i + 6], win[i + 6], 1);
1281  out_ptr += SBLIMIT;
1282  }
1283  imdct12(out2, ptr + 2);
1284  for (i = 0; i < 6; i++) {
1285  buf[4*(i + 6*0)] = MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*0)];
1286  buf[4*(i + 6*1)] = MULH3(out2[i + 6], win[i + 6], 1);
1287  buf[4*(i + 6*2)] = 0;
1288  }
1289  ptr += 18;
1290  buf += (j&3) != 3 ? 1 : (4*18-3);
1291  }
1292  /* zero bands */
1293  for (j = sblimit; j < SBLIMIT; j++) {
1294  /* overlap */
1295  out_ptr = sb_samples + j;
1296  for (i = 0; i < 18; i++) {
1297  *out_ptr = buf[4*i];
1298  buf[4*i] = 0;
1299  out_ptr += SBLIMIT;
1300  }
1301  buf += (j&3) != 3 ? 1 : (4*18-3);
1302  }
1303 }
1304 
1305 /* main layer3 decoding function */
1307 {
1308  int nb_granules, main_data_begin;
1309  int gr, ch, blocksplit_flag, i, j, k, n, bits_pos;
1310  GranuleDef *g;
1311  int16_t exponents[576]; //FIXME try INTFLOAT
1312 
1313  /* read side info */
1314  if (s->lsf) {
1315  main_data_begin = get_bits(&s->gb, 8);
1316  skip_bits(&s->gb, s->nb_channels);
1317  nb_granules = 1;
1318  } else {
1319  main_data_begin = get_bits(&s->gb, 9);
1320  if (s->nb_channels == 2)
1321  skip_bits(&s->gb, 3);
1322  else
1323  skip_bits(&s->gb, 5);
1324  nb_granules = 2;
1325  for (ch = 0; ch < s->nb_channels; ch++) {
1326  s->granules[ch][0].scfsi = 0;/* all scale factors are transmitted */
1327  s->granules[ch][1].scfsi = get_bits(&s->gb, 4);
1328  }
1329  }
1330 
1331  for (gr = 0; gr < nb_granules; gr++) {
1332  for (ch = 0; ch < s->nb_channels; ch++) {
1333  ff_dlog(s->avctx, "gr=%d ch=%d: side_info\n", gr, ch);
1334  g = &s->granules[ch][gr];
1335  g->part2_3_length = get_bits(&s->gb, 12);
1336  g->big_values = get_bits(&s->gb, 9);
1337  if (g->big_values > 288) {
1338  av_log(s->avctx, AV_LOG_ERROR, "big_values too big\n");
1339  return AVERROR_INVALIDDATA;
1340  }
1341 
1342  g->global_gain = get_bits(&s->gb, 8);
1343  /* if MS stereo only is selected, we precompute the
1344  1/sqrt(2) renormalization factor */
1345  if ((s->mode_ext & (MODE_EXT_MS_STEREO | MODE_EXT_I_STEREO)) ==
1347  g->global_gain -= 2;
1348  if (s->lsf)
1349  g->scalefac_compress = get_bits(&s->gb, 9);
1350  else
1351  g->scalefac_compress = get_bits(&s->gb, 4);
1352  blocksplit_flag = get_bits1(&s->gb);
1353  if (blocksplit_flag) {
1354  g->block_type = get_bits(&s->gb, 2);
1355  if (g->block_type == 0) {
1356  av_log(s->avctx, AV_LOG_ERROR, "invalid block type\n");
1357  return AVERROR_INVALIDDATA;
1358  }
1359  g->switch_point = get_bits1(&s->gb);
1360  for (i = 0; i < 2; i++)
1361  g->table_select[i] = get_bits(&s->gb, 5);
1362  for (i = 0; i < 3; i++)
1363  g->subblock_gain[i] = get_bits(&s->gb, 3);
1364  init_short_region(s, g);
1365  } else {
1366  int region_address1, region_address2;
1367  g->block_type = 0;
1368  g->switch_point = 0;
1369  for (i = 0; i < 3; i++)
1370  g->table_select[i] = get_bits(&s->gb, 5);
1371  /* compute huffman coded region sizes */
1372  region_address1 = get_bits(&s->gb, 4);
1373  region_address2 = get_bits(&s->gb, 3);
1374  ff_dlog(s->avctx, "region1=%d region2=%d\n",
1375  region_address1, region_address2);
1376  init_long_region(s, g, region_address1, region_address2);
1377  }
1380 
1381  g->preflag = 0;
1382  if (!s->lsf)
1383  g->preflag = get_bits1(&s->gb);
1384  g->scalefac_scale = get_bits1(&s->gb);
1385  g->count1table_select = get_bits1(&s->gb);
1386  ff_dlog(s->avctx, "block_type=%d switch_point=%d\n",
1387  g->block_type, g->switch_point);
1388  }
1389  }
1390 
1391  if (!s->adu_mode) {
1392  int skip;
1393  const uint8_t *ptr = s->gb.buffer + (get_bits_count(&s->gb)>>3);
1394  s->extrasize = av_clip((get_bits_left(&s->gb) >> 3) - s->extrasize, 0,
1395  FFMAX(0, LAST_BUF_SIZE - s->last_buf_size));
1396  av_assert1((get_bits_count(&s->gb) & 7) == 0);
1397  /* now we get bits from the main_data_begin offset */
1398  ff_dlog(s->avctx, "seekback:%d, lastbuf:%d\n",
1399  main_data_begin, s->last_buf_size);
1400 
1401  memcpy(s->last_buf + s->last_buf_size, ptr, s->extrasize);
1402  s->in_gb = s->gb;
1403  init_get_bits(&s->gb, s->last_buf, (s->last_buf_size + s->extrasize) * 8);
1404  s->last_buf_size <<= 3;
1405  for (gr = 0; gr < nb_granules && (s->last_buf_size >> 3) < main_data_begin; gr++) {
1406  for (ch = 0; ch < s->nb_channels; ch++) {
1407  g = &s->granules[ch][gr];
1408  s->last_buf_size += g->part2_3_length;
1409  memset(g->sb_hybrid, 0, sizeof(g->sb_hybrid));
1410  compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
1411  }
1412  }
1413  skip = s->last_buf_size - 8 * main_data_begin;
1414  if (skip >= s->gb.size_in_bits - s->extrasize * 8 && s->in_gb.buffer) {
1415  skip_bits_long(&s->in_gb, skip - s->gb.size_in_bits + s->extrasize * 8);
1416  s->gb = s->in_gb;
1417  s->in_gb.buffer = NULL;
1418  s->extrasize = 0;
1419  } else {
1420  skip_bits_long(&s->gb, skip);
1421  }
1422  } else {
1423  gr = 0;
1424  s->extrasize = 0;
1425  }
1426 
1427  for (; gr < nb_granules; gr++) {
1428  for (ch = 0; ch < s->nb_channels; ch++) {
1429  g = &s->granules[ch][gr];
1430  bits_pos = get_bits_count(&s->gb);
1431 
1432  if (!s->lsf) {
1433  uint8_t *sc;
1434  int slen, slen1, slen2;
1435 
1436  /* MPEG-1 scale factors */
1437  slen1 = slen_table[0][g->scalefac_compress];
1438  slen2 = slen_table[1][g->scalefac_compress];
1439  ff_dlog(s->avctx, "slen1=%d slen2=%d\n", slen1, slen2);
1440  if (g->block_type == 2) {
1441  n = g->switch_point ? 17 : 18;
1442  j = 0;
1443  if (slen1) {
1444  for (i = 0; i < n; i++)
1445  g->scale_factors[j++] = get_bits(&s->gb, slen1);
1446  } else {
1447  for (i = 0; i < n; i++)
1448  g->scale_factors[j++] = 0;
1449  }
1450  if (slen2) {
1451  for (i = 0; i < 18; i++)
1452  g->scale_factors[j++] = get_bits(&s->gb, slen2);
1453  for (i = 0; i < 3; i++)
1454  g->scale_factors[j++] = 0;
1455  } else {
1456  for (i = 0; i < 21; i++)
1457  g->scale_factors[j++] = 0;
1458  }
1459  } else {
1460  sc = s->granules[ch][0].scale_factors;
1461  j = 0;
1462  for (k = 0; k < 4; k++) {
1463  n = k == 0 ? 6 : 5;
1464  if ((g->scfsi & (0x8 >> k)) == 0) {
1465  slen = (k < 2) ? slen1 : slen2;
1466  if (slen) {
1467  for (i = 0; i < n; i++)
1468  g->scale_factors[j++] = get_bits(&s->gb, slen);
1469  } else {
1470  for (i = 0; i < n; i++)
1471  g->scale_factors[j++] = 0;
1472  }
1473  } else {
1474  /* simply copy from last granule */
1475  for (i = 0; i < n; i++) {
1476  g->scale_factors[j] = sc[j];
1477  j++;
1478  }
1479  }
1480  }
1481  g->scale_factors[j++] = 0;
1482  }
1483  } else {
1484  int tindex, tindex2, slen[4], sl, sf;
1485 
1486  /* LSF scale factors */
1487  if (g->block_type == 2)
1488  tindex = g->switch_point ? 2 : 1;
1489  else
1490  tindex = 0;
1491 
1492  sf = g->scalefac_compress;
1493  if ((s->mode_ext & MODE_EXT_I_STEREO) && ch == 1) {
1494  /* intensity stereo case */
1495  sf >>= 1;
1496  if (sf < 180) {
1497  lsf_sf_expand(slen, sf, 6, 6, 0);
1498  tindex2 = 3;
1499  } else if (sf < 244) {
1500  lsf_sf_expand(slen, sf - 180, 4, 4, 0);
1501  tindex2 = 4;
1502  } else {
1503  lsf_sf_expand(slen, sf - 244, 3, 0, 0);
1504  tindex2 = 5;
1505  }
1506  } else {
1507  /* normal case */
1508  if (sf < 400) {
1509  lsf_sf_expand(slen, sf, 5, 4, 4);
1510  tindex2 = 0;
1511  } else if (sf < 500) {
1512  lsf_sf_expand(slen, sf - 400, 5, 4, 0);
1513  tindex2 = 1;
1514  } else {
1515  lsf_sf_expand(slen, sf - 500, 3, 0, 0);
1516  tindex2 = 2;
1517  g->preflag = 1;
1518  }
1519  }
1520 
1521  j = 0;
1522  for (k = 0; k < 4; k++) {
1523  n = lsf_nsf_table[tindex2][tindex][k];
1524  sl = slen[k];
1525  if (sl) {
1526  for (i = 0; i < n; i++)
1527  g->scale_factors[j++] = get_bits(&s->gb, sl);
1528  } else {
1529  for (i = 0; i < n; i++)
1530  g->scale_factors[j++] = 0;
1531  }
1532  }
1533  /* XXX: should compute exact size */
1534  for (; j < 40; j++)
1535  g->scale_factors[j] = 0;
1536  }
1537 
1538  exponents_from_scale_factors(s, g, exponents);
1539 
1540  /* read Huffman coded residue */
1541  huffman_decode(s, g, exponents, bits_pos + g->part2_3_length);
1542  } /* ch */
1543 
1544  if (s->mode == MPA_JSTEREO)
1545  compute_stereo(s, &s->granules[0][gr], &s->granules[1][gr]);
1546 
1547  for (ch = 0; ch < s->nb_channels; ch++) {
1548  g = &s->granules[ch][gr];
1549 
1550  reorder_block(s, g);
1551  compute_antialias(s, g);
1552  compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
1553  }
1554  } /* gr */
1555  if (get_bits_count(&s->gb) < 0)
1556  skip_bits_long(&s->gb, -get_bits_count(&s->gb));
1557  return nb_granules * 18;
1558 }
1559 
1561  const uint8_t *buf, int buf_size)
1562 {
1563  int i, nb_frames, ch, ret;
1564  OUT_INT *samples_ptr;
1565 
1566  init_get_bits(&s->gb, buf + HEADER_SIZE, (buf_size - HEADER_SIZE) * 8);
1567 
1568  /* skip error protection field */
1569  if (s->error_protection)
1570  skip_bits(&s->gb, 16);
1571 
1572  switch(s->layer) {
1573  case 1:
1574  s->avctx->frame_size = 384;
1575  nb_frames = mp_decode_layer1(s);
1576  break;
1577  case 2:
1578  s->avctx->frame_size = 1152;
1579  nb_frames = mp_decode_layer2(s);
1580  break;
1581  case 3:
1582  s->avctx->frame_size = s->lsf ? 576 : 1152;
1583  default:
1584  nb_frames = mp_decode_layer3(s);
1585 
1586  s->last_buf_size=0;
1587  if (s->in_gb.buffer) {
1588  align_get_bits(&s->gb);
1589  i = (get_bits_left(&s->gb) >> 3) - s->extrasize;
1590  if (i >= 0 && i <= BACKSTEP_SIZE) {
1591  memmove(s->last_buf, s->gb.buffer + (get_bits_count(&s->gb)>>3), i);
1592  s->last_buf_size=i;
1593  } else
1594  av_log(s->avctx, AV_LOG_ERROR, "invalid old backstep %d\n", i);
1595  s->gb = s->in_gb;
1596  s->in_gb.buffer = NULL;
1597  s->extrasize = 0;
1598  }
1599 
1600  align_get_bits(&s->gb);
1601  av_assert1((get_bits_count(&s->gb) & 7) == 0);
1602  i = (get_bits_left(&s->gb) >> 3) - s->extrasize;
1603  if (i < 0 || i > BACKSTEP_SIZE || nb_frames < 0) {
1604  if (i < 0)
1605  av_log(s->avctx, AV_LOG_ERROR, "invalid new backstep %d\n", i);
1606  i = FFMIN(BACKSTEP_SIZE, buf_size - HEADER_SIZE);
1607  }
1608  av_assert1(i <= buf_size - HEADER_SIZE && i >= 0);
1609  memcpy(s->last_buf + s->last_buf_size, s->gb.buffer + buf_size - HEADER_SIZE - i, i);
1610  s->last_buf_size += i;
1611  }
1612 
1613  if(nb_frames < 0)
1614  return nb_frames;
1615 
1616  /* get output buffer */
1617  if (!samples) {
1618  av_assert0(s->frame);
1619  s->frame->nb_samples = s->avctx->frame_size;
1620  if ((ret = ff_get_buffer(s->avctx, s->frame, 0)) < 0)
1621  return ret;
1622  samples = (OUT_INT **)s->frame->extended_data;
1623  }
1624 
1625  /* apply the synthesis filter */
1626  for (ch = 0; ch < s->nb_channels; ch++) {
1627  int sample_stride;
1628  if (s->avctx->sample_fmt == OUT_FMT_P) {
1629  samples_ptr = samples[ch];
1630  sample_stride = 1;
1631  } else {
1632  samples_ptr = samples[0] + ch;
1633  sample_stride = s->nb_channels;
1634  }
1635  for (i = 0; i < nb_frames; i++) {
1636  RENAME(ff_mpa_synth_filter)(&s->mpadsp, s->synth_buf[ch],
1637  &(s->synth_buf_offset[ch]),
1638  RENAME(ff_mpa_synth_window),
1639  &s->dither_state, samples_ptr,
1640  sample_stride, s->sb_samples[ch][i]);
1641  samples_ptr += 32 * sample_stride;
1642  }
1643  }
1644 
1645  return nb_frames * 32 * sizeof(OUT_INT) * s->nb_channels;
1646 }
1647 
1648 static int decode_frame(AVCodecContext * avctx, void *data, int *got_frame_ptr,
1649  AVPacket *avpkt)
1650 {
1651  const uint8_t *buf = avpkt->data;
1652  int buf_size = avpkt->size;
1653  MPADecodeContext *s = avctx->priv_data;
1654  uint32_t header;
1655  int ret;
1656 
1657  int skipped = 0;
1658  while(buf_size && !*buf){
1659  buf++;
1660  buf_size--;
1661  skipped++;
1662  }
1663 
1664  if (buf_size < HEADER_SIZE)
1665  return AVERROR_INVALIDDATA;
1666 
1667  header = AV_RB32(buf);
1668  if (header>>8 == AV_RB32("TAG")>>8) {
1669  av_log(avctx, AV_LOG_DEBUG, "discarding ID3 tag\n");
1670  return buf_size + skipped;
1671  }
1673  if (ret < 0) {
1674  av_log(avctx, AV_LOG_ERROR, "Header missing\n");
1675  return AVERROR_INVALIDDATA;
1676  } else if (ret == 1) {
1677  /* free format: prepare to compute frame size */
1678  s->frame_size = -1;
1679  return AVERROR_INVALIDDATA;
1680  }
1681  /* update codec info */
1682  avctx->channels = s->nb_channels;
1683  avctx->channel_layout = s->nb_channels == 1 ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO;
1684  if (!avctx->bit_rate)
1685  avctx->bit_rate = s->bit_rate;
1686 
1687  if (s->frame_size <= 0) {
1688  av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1689  return AVERROR_INVALIDDATA;
1690  } else if (s->frame_size < buf_size) {
1691  av_log(avctx, AV_LOG_DEBUG, "incorrect frame size - multiple frames in buffer?\n");
1692  buf_size= s->frame_size;
1693  }
1694 
1695  s->frame = data;
1696 
1697  ret = mp_decode_frame(s, NULL, buf, buf_size);
1698  if (ret >= 0) {
1699  s->frame->nb_samples = avctx->frame_size;
1700  *got_frame_ptr = 1;
1701  avctx->sample_rate = s->sample_rate;
1702  //FIXME maybe move the other codec info stuff from above here too
1703  } else {
1704  av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio frame.\n");
1705  /* Only return an error if the bad frame makes up the whole packet or
1706  * the error is related to buffer management.
1707  * If there is more data in the packet, just consume the bad frame
1708  * instead of returning an error, which would discard the whole
1709  * packet. */
1710  *got_frame_ptr = 0;
1711  if (buf_size == avpkt->size || ret != AVERROR_INVALIDDATA)
1712  return ret;
1713  }
1714  s->frame_size = 0;
1715  return buf_size + skipped;
1716 }
1717 
1719 {
1720  memset(ctx->synth_buf, 0, sizeof(ctx->synth_buf));
1721  memset(ctx->mdct_buf, 0, sizeof(ctx->mdct_buf));
1722  ctx->last_buf_size = 0;
1723  ctx->dither_state = 0;
1724 }
1725 
1726 static void flush(AVCodecContext *avctx)
1727 {
1728  mp_flush(avctx->priv_data);
1729 }
1730 
1731 #if CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER
1732 static int decode_frame_adu(AVCodecContext *avctx, void *data,
1733  int *got_frame_ptr, AVPacket *avpkt)
1734 {
1735  const uint8_t *buf = avpkt->data;
1736  int buf_size = avpkt->size;
1737  MPADecodeContext *s = avctx->priv_data;
1738  uint32_t header;
1739  int len, ret;
1740  int av_unused out_size;
1741 
1742  len = buf_size;
1743 
1744  // Discard too short frames
1745  if (buf_size < HEADER_SIZE) {
1746  av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
1747  return AVERROR_INVALIDDATA;
1748  }
1749 
1750 
1753 
1754  // Get header and restore sync word
1755  header = AV_RB32(buf) | 0xffe00000;
1756 
1758  if (ret < 0) {
1759  av_log(avctx, AV_LOG_ERROR, "Invalid frame header\n");
1760  return ret;
1761  }
1762  /* update codec info */
1763  avctx->sample_rate = s->sample_rate;
1764  avctx->channels = s->nb_channels;
1765  avctx->channel_layout = s->nb_channels == 1 ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO;
1766  if (!avctx->bit_rate)
1767  avctx->bit_rate = s->bit_rate;
1768 
1769  s->frame_size = len;
1770 
1771  s->frame = data;
1772 
1773  ret = mp_decode_frame(s, NULL, buf, buf_size);
1774  if (ret < 0) {
1775  av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio frame.\n");
1776  return ret;
1777  }
1778 
1779  *got_frame_ptr = 1;
1780 
1781  return buf_size;
1782 }
1783 #endif /* CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER */
1784 
1785 #if CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER
1786 
1787 /**
1788  * Context for MP3On4 decoder
1789  */
1790 typedef struct MP3On4DecodeContext {
1791  int frames; ///< number of mp3 frames per block (number of mp3 decoder instances)
1792  int syncword; ///< syncword patch
1793  const uint8_t *coff; ///< channel offsets in output buffer
1794  MPADecodeContext *mp3decctx[5]; ///< MPADecodeContext for every decoder instance
1795 } MP3On4DecodeContext;
1796 
1797 #include "mpeg4audio.h"
1798 
1799 /* Next 3 arrays are indexed by channel config number (passed via codecdata) */
1800 
1801 /* number of mp3 decoder instances */
1802 static const uint8_t mp3Frames[8] = { 0, 1, 1, 2, 3, 3, 4, 5 };
1803 
1804 /* offsets into output buffer, assume output order is FL FR C LFE BL BR SL SR */
1805 static const uint8_t chan_offset[8][5] = {
1806  { 0 },
1807  { 0 }, // C
1808  { 0 }, // FLR
1809  { 2, 0 }, // C FLR
1810  { 2, 0, 3 }, // C FLR BS
1811  { 2, 0, 3 }, // C FLR BLRS
1812  { 2, 0, 4, 3 }, // C FLR BLRS LFE
1813  { 2, 0, 6, 4, 3 }, // C FLR BLRS BLR LFE
1814 };
1815 
1816 /* mp3on4 channel layouts */
1817 static const int16_t chan_layout[8] = {
1818  0,
1826 };
1827 
1828 static av_cold int decode_close_mp3on4(AVCodecContext * avctx)
1829 {
1830  MP3On4DecodeContext *s = avctx->priv_data;
1831  int i;
1832 
1833  if (s->mp3decctx[0])
1834  av_freep(&s->mp3decctx[0]->fdsp);
1835 
1836  for (i = 0; i < s->frames; i++)
1837  av_freep(&s->mp3decctx[i]);
1838 
1839  return 0;
1840 }
1841 
1842 
1843 static av_cold int decode_init_mp3on4(AVCodecContext * avctx)
1844 {
1845  MP3On4DecodeContext *s = avctx->priv_data;
1846  MPEG4AudioConfig cfg;
1847  int i;
1848 
1849  if ((avctx->extradata_size < 2) || !avctx->extradata) {
1850  av_log(avctx, AV_LOG_ERROR, "Codec extradata missing or too short.\n");
1851  return AVERROR_INVALIDDATA;
1852  }
1853 
1855  avctx->extradata_size * 8, 1);
1856  if (!cfg.chan_config || cfg.chan_config > 7) {
1857  av_log(avctx, AV_LOG_ERROR, "Invalid channel config number.\n");
1858  return AVERROR_INVALIDDATA;
1859  }
1860  s->frames = mp3Frames[cfg.chan_config];
1861  s->coff = chan_offset[cfg.chan_config];
1863  avctx->channel_layout = chan_layout[cfg.chan_config];
1864 
1865  if (cfg.sample_rate < 16000)
1866  s->syncword = 0xffe00000;
1867  else
1868  s->syncword = 0xfff00000;
1869 
1870  /* Init the first mp3 decoder in standard way, so that all tables get builded
1871  * We replace avctx->priv_data with the context of the first decoder so that
1872  * decode_init() does not have to be changed.
1873  * Other decoders will be initialized here copying data from the first context
1874  */
1875  // Allocate zeroed memory for the first decoder context
1876  s->mp3decctx[0] = av_mallocz(sizeof(MPADecodeContext));
1877  if (!s->mp3decctx[0])
1878  goto alloc_fail;
1879  // Put decoder context in place to make init_decode() happy
1880  avctx->priv_data = s->mp3decctx[0];
1881  decode_init(avctx);
1882  // Restore mp3on4 context pointer
1883  avctx->priv_data = s;
1884  s->mp3decctx[0]->adu_mode = 1; // Set adu mode
1885 
1886  /* Create a separate codec/context for each frame (first is already ok).
1887  * Each frame is 1 or 2 channels - up to 5 frames allowed
1888  */
1889  for (i = 1; i < s->frames; i++) {
1890  s->mp3decctx[i] = av_mallocz(sizeof(MPADecodeContext));
1891  if (!s->mp3decctx[i])
1892  goto alloc_fail;
1893  s->mp3decctx[i]->adu_mode = 1;
1894  s->mp3decctx[i]->avctx = avctx;
1895  s->mp3decctx[i]->mpadsp = s->mp3decctx[0]->mpadsp;
1896  s->mp3decctx[i]->fdsp = s->mp3decctx[0]->fdsp;
1897  }
1898 
1899  return 0;
1900 alloc_fail:
1901  decode_close_mp3on4(avctx);
1902  return AVERROR(ENOMEM);
1903 }
1904 
1905 
1906 static void flush_mp3on4(AVCodecContext *avctx)
1907 {
1908  int i;
1909  MP3On4DecodeContext *s = avctx->priv_data;
1910 
1911  for (i = 0; i < s->frames; i++)
1912  mp_flush(s->mp3decctx[i]);
1913 }
1914 
1915 
1916 static int decode_frame_mp3on4(AVCodecContext *avctx, void *data,
1917  int *got_frame_ptr, AVPacket *avpkt)
1918 {
1919  AVFrame *frame = data;
1920  const uint8_t *buf = avpkt->data;
1921  int buf_size = avpkt->size;
1922  MP3On4DecodeContext *s = avctx->priv_data;
1923  MPADecodeContext *m;
1924  int fsize, len = buf_size, out_size = 0;
1925  uint32_t header;
1926  OUT_INT **out_samples;
1927  OUT_INT *outptr[2];
1928  int fr, ch, ret;
1929 
1930  /* get output buffer */
1931  frame->nb_samples = MPA_FRAME_SIZE;
1932  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1933  return ret;
1934  out_samples = (OUT_INT **)frame->extended_data;
1935 
1936  // Discard too short frames
1937  if (buf_size < HEADER_SIZE)
1938  return AVERROR_INVALIDDATA;
1939 
1940  avctx->bit_rate = 0;
1941 
1942  ch = 0;
1943  for (fr = 0; fr < s->frames; fr++) {
1944  fsize = AV_RB16(buf) >> 4;
1946  m = s->mp3decctx[fr];
1947  av_assert1(m);
1948 
1949  if (fsize < HEADER_SIZE) {
1950  av_log(avctx, AV_LOG_ERROR, "Frame size smaller than header size\n");
1951  return AVERROR_INVALIDDATA;
1952  }
1953  header = (AV_RB32(buf) & 0x000fffff) | s->syncword; // patch header
1954 
1956  if (ret < 0) {
1957  av_log(avctx, AV_LOG_ERROR, "Bad header, discard block\n");
1958  return AVERROR_INVALIDDATA;
1959  }
1960 
1961  if (ch + m->nb_channels > avctx->channels ||
1962  s->coff[fr] + m->nb_channels > avctx->channels) {
1963  av_log(avctx, AV_LOG_ERROR, "frame channel count exceeds codec "
1964  "channel count\n");
1965  return AVERROR_INVALIDDATA;
1966  }
1967  ch += m->nb_channels;
1968 
1969  outptr[0] = out_samples[s->coff[fr]];
1970  if (m->nb_channels > 1)
1971  outptr[1] = out_samples[s->coff[fr] + 1];
1972 
1973  if ((ret = mp_decode_frame(m, outptr, buf, fsize)) < 0) {
1974  av_log(avctx, AV_LOG_ERROR, "failed to decode channel %d\n", ch);
1975  memset(outptr[0], 0, MPA_FRAME_SIZE*sizeof(OUT_INT));
1976  if (m->nb_channels > 1)
1977  memset(outptr[1], 0, MPA_FRAME_SIZE*sizeof(OUT_INT));
1978  ret = m->nb_channels * MPA_FRAME_SIZE*sizeof(OUT_INT);
1979  }
1980 
1981  out_size += ret;
1982  buf += fsize;
1983  len -= fsize;
1984 
1985  avctx->bit_rate += m->bit_rate;
1986  }
1987  if (ch != avctx->channels) {
1988  av_log(avctx, AV_LOG_ERROR, "failed to decode all channels\n");
1989  return AVERROR_INVALIDDATA;
1990  }
1991 
1992  /* update codec info */
1993  avctx->sample_rate = s->mp3decctx[0]->sample_rate;
1994 
1995  frame->nb_samples = out_size / (avctx->channels * sizeof(OUT_INT));
1996  *got_frame_ptr = 1;
1997 
1998  return buf_size;
1999 }
2000 #endif /* CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER */
AVCodecContext::frame_size
int frame_size
Number of samples per channel in an audio frame.
Definition: avcodec.h:2245
GranuleDef::scale_factors
uint8_t scale_factors[40]
Definition: mpegaudiodec_template.c:66
MPADecodeContext::last_buf
MPA_DECODE_HEADER uint8_t last_buf[LAST_BUF_SIZE]
Definition: mpegaudiodec_template.c:72
compute_band_indexes
static void compute_band_indexes(MPADecodeContext *s, GranuleDef *g)
Definition: mpegaudiodec_template.c:185
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:291
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
l3_unscale
static int l3_unscale(int value, int exponent)
Definition: mpegaudiodec_template.c:242
INTFLOAT
#define INTFLOAT
Definition: dct32_template.c:44
init_short_region
static void init_short_region(MPADecodeContext *s, GranuleDef *g)
Definition: mpegaudiodec_template.c:157
ff_mpa_l2_select_table
int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf)
Definition: mpegaudio.c:31
mpa_quad_bits
static const uint8_t mpa_quad_bits[2][16]
Definition: mpegaudiodectab.h:566
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:849
AVERROR
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
huff_quad_vlc
static VLC huff_quad_vlc[2]
Definition: mpegaudiodec_template.c:108
SCALE_GEN
#define SCALE_GEN(v)
Definition: mpegaudiodec_template.c:133
AVCodecContext::channel_layout
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:2276
libm.h
MPADecodeContext::dither_state
int dither_state
Definition: mpegaudiodec_template.c:85
out
FILE * out
Definition: movenc.c:54
MPADecodeContext::last_buf_size
int last_buf_size
Definition: mpegaudiodec_template.c:73
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:2225
n
int n
Definition: avisynth_c.h:760
MPADecodeContext::granules
GranuleDef granules[2][2]
Definition: mpegaudiodec_template.c:83
lsf_nsf_table
static const uint8_t lsf_nsf_table[6][3][4]
Definition: mpegaudiodectab.h:52
l1_unscale
static int l1_unscale(int n, int mant, int scale_factor)
Definition: mpegaudiodec_template.c:212
is_table
static INTFLOAT is_table[2][16]
Definition: mpegaudiodec_template.c:115
AV_CH_LAYOUT_MONO
#define AV_CH_LAYOUT_MONO
Definition: channel_layout.h:85
mp_flush
static void mp_flush(MPADecodeContext *ctx)
Definition: mpegaudiodec_template.c:1718
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:2694
ch
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(const uint8_t *) pi - 0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(const int16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(const int16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(const int32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(const int32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(const int64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0f/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(const float *) pi *(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(const double *) pi *(INT64_C(1)<< 63))) #define FMT_PAIR_FUNC(out, in) static conv_func_type *const fmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={ FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64), };static void cpy1(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, len);} static void cpy2(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 2 *len);} static void cpy4(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 4 *len);} static void cpy8(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 8 *len);} AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, const int *ch_map, int flags) { AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) return NULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) return NULL;if(channels==1){ in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);} ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map) { switch(av_get_bytes_per_sample(in_fmt)){ case 1:ctx->simd_f=cpy1;break;case 2:ctx->simd_f=cpy2;break;case 4:ctx->simd_f=cpy4;break;case 8:ctx->simd_f=cpy8;break;} } if(HAVE_X86ASM &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);return ctx;} void swri_audio_convert_free(AudioConvert **ctx) { av_freep(ctx);} int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len) { int ch;int off=0;const int os=(out->planar ? 1 :out->ch_count) *out->bps;unsigned misaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask) { int planes=in->planar ? in->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;} if(ctx->out_simd_align_mask) { int planes=out->planar ? out->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;} if(ctx->simd_f &&!ctx->ch_map &&!misaligned){ off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){ if(out->planar==in->planar){ int planes=out->planar ? out->ch_count :1;for(ch=0;ch< planes;ch++){ ctx->simd_f(out-> ch ch
Definition: audioconvert.c:56
AV_CODEC_ID_MP3ON4
@ AV_CODEC_ID_MP3ON4
Definition: avcodec.h:578
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:219
ff_mpadsp_init
av_cold void ff_mpadsp_init(MPADSPContext *s)
Definition: mpegaudiodsp.c:31
av_unused
#define av_unused
Definition: attributes.h:125
out_size
int out_size
Definition: movenc.c:55
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:295
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:26
GranuleDef::switch_point
uint8_t switch_point
Definition: mpegaudiodec_template.c:58
MPADecodeContext::adu_mode
int adu_mode
0 for standard mp3, 1 for adu formatted mp3
Definition: mpegaudiodec_template.c:84
mpegaudiodecheader.h
internal.h
AVPacket::data
uint8_t * data
Definition: avcodec.h:1477
C4
#define C4
Definition: mpegaudiodec_template.c:455
MPADSPContext
Definition: mpegaudiodsp.h:27
init_vlc
#define init_vlc(vlc, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
Definition: vlc.h:38
b
#define b
Definition: input.c:41
table
static const uint16_t table[]
Definition: prosumer.c:206
data
const char data[16]
Definition: mxf.c:91
MPADecodeHeader
Definition: mpegaudiodecheader.h:46
mpa_quad_codes
static const uint8_t mpa_quad_codes[2][16]
Definition: mpegaudiodectab.h:561
huff_vlc_tables_sizes
static const int huff_vlc_tables_sizes[16]
Definition: mpegaudiodec_template.c:104
mp_decode_frame
static int mp_decode_frame(MPADecodeContext *s, OUT_INT **samples, const uint8_t *buf, int buf_size)
Definition: mpegaudiodec_template.c:1560
compute_antialias
static void compute_antialias(MPADecodeContext *s, GranuleDef *g)
Definition: mpegaudiodec_template.c:1195
table_4_3_exp
static int8_t table_4_3_exp[TABLE_4_3_SIZE]
Definition: mpegaudio_tablegen.h:35
FIXHR
#define FIXHR(a)
Definition: dct32_template.c:42
is_table_lsf
static INTFLOAT is_table_lsf[2][2][16]
Definition: mpegaudiodec_template.c:116
get_vlc2
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:797
GranuleDef::scfsi
uint8_t scfsi
Definition: mpegaudiodec_template.c:52
ff_mpa_quant_bits
const int ff_mpa_quant_bits[17]
Definition: mpegaudiodata.c:55
t1
#define t1
Definition: regdef.h:29
MPADecodeContext
Definition: mpegaudiodec_template.c:70
AV_EF_COMPLIANT
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
Definition: avcodec.h:2709
AV_EF_BUFFER
#define AV_EF_BUFFER
detect improper bitstream length
Definition: avcodec.h:2704
division_tabs
static int16_t *const division_tabs[4]
Definition: mpegaudiodec_template.c:123
huff_vlc_tables
static VLC_TYPE huff_vlc_tables[0+128+128+128+130+128+154+166+142+204+190+170+542+460+662+414][2]
Definition: mpegaudiodec_template.c:103
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:659
AV_CODEC_ID_MP3ADU
@ AV_CODEC_ID_MP3ADU
Definition: avcodec.h:577
win
static float win(SuperEqualizerContext *s, float n, int N)
Definition: af_superequalizer.c:119
mpegaudio_tableinit
static av_cold void mpegaudio_tableinit(void)
Definition: mpegaudio_tablegen.h:45
MPEG4AudioConfig
Definition: mpeg4audio.h:33
ff_mpeg4audio_channels
const uint8_t ff_mpeg4audio_channels[8]
Definition: mpeg4audio.c:67
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:467
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:379
exponents_from_scale_factors
static void exponents_from_scale_factors(MPADecodeContext *s, GranuleDef *g, int16_t *exponents)
Definition: mpegaudiodec_template.c:784
mpeg4audio.h
reorder_block
static void reorder_block(MPADecodeContext *s, GranuleDef *g)
Definition: mpegaudiodec_template.c:1003
MULH3
#define MULH3(x, y, s)
Definition: dct32_template.c:43
mp_decode_layer3
static int mp_decode_layer3(MPADecodeContext *s)
Definition: mpegaudiodec_template.c:1306
v0
#define v0
Definition: regdef.h:26
VLC_TYPE
#define VLC_TYPE
Definition: vlc.h:24
U
#define U(x)
Definition: vp56_arith.h:37
MPADecodeContext::gb
GetBitContext gb
Definition: mpegaudiodec_template.c:77
frames
if it could not because there are no more frames
Definition: filter_design.txt:266
GetBitContext
Definition: get_bits.h:61
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:1645
FFMIN3
#define FFMIN3(a, b, c)
Definition: common.h:97
AV_CH_LAYOUT_STEREO
#define AV_CH_LAYOUT_STEREO
Definition: channel_layout.h:86
tab1
const int16_t * tab1
Definition: mace.c:144
bit_alloc
static int bit_alloc(AC3EncodeContext *s, int snr_offset)
Run the bit allocation with a given SNR offset.
Definition: ac3enc.c:1064
AV_EF_BITSTREAM
#define AV_EF_BITSTREAM
detect bitstream specification deviations
Definition: avcodec.h:2703
MPA_FRAME_SIZE
#define MPA_FRAME_SIZE
Definition: mpegaudio.h:37
FRAC_ONE
#define FRAC_ONE
Definition: mpegaudio.h:58
avassert.h
MPADecodeContext::in_gb
GetBitContext in_gb
Definition: mpegaudiodec_template.c:78
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
ff_mpa_quant_steps
const int ff_mpa_quant_steps[17]
Definition: mpegaudiodata.c:47
buf
void * buf
Definition: avisynth_c.h:766
avpriv_mpegaudio_decode_header
int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header)
Definition: mpegaudiodecheader.c:36
av_cold
#define av_cold
Definition: attributes.h:84
compute_imdct
static void compute_imdct(MPADecodeContext *s, GranuleDef *g, INTFLOAT *sb_samples, INTFLOAT *mdct_buf)
Definition: mpegaudiodec_template.c:1226
imdct12
static void imdct12(INTFLOAT *out, SUINTFLOAT *in)
Definition: mpegaudiodec_template.c:461
decode_frame
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: mpegaudiodec_template.c:1648
MODE_EXT_MS_STEREO
#define MODE_EXT_MS_STEREO
Definition: mpegaudiodata.h:34
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:1667
s
#define s(width, name)
Definition: cbs_vp9.c:257
slen_table
static const uint8_t slen_table[2][16]
Definition: mpegaudiodectab.h:46
GranuleDef::scalefac_compress
int scalefac_compress
Definition: mpegaudiodec_template.c:56
compute_antialias_fixed.h
mpegaudiodectab.h
g
const char * g
Definition: vf_curves.c:115
BACKSTEP_SIZE
#define BACKSTEP_SIZE
Definition: mpegaudiodec_template.c:46
division_tab3
static int16_t division_tab3[1<< 6]
Definition: mpegaudiodec_template.c:119
bits
uint8_t bits
Definition: vp3data.h:202
band_size_long
static const uint8_t band_size_long[9][22]
Definition: mpegaudiodectab.h:572
ci_table
static const float ci_table[8]
Definition: mpegaudiodectab.h:611
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
MPADecodeContext::fdsp
AVFloatDSPContext * fdsp
Definition: mpegaudiodec_template.c:89
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
ctx
AVFormatContext * ctx
Definition: movenc.c:48
get_bits.h
GranuleDef::subblock_gain
int subblock_gain[3]
Definition: mpegaudiodec_template.c:60
GranuleDef::table_select
int table_select[3]
Definition: mpegaudiodec_template.c:59
band_size_short
static const uint8_t band_size_short[9][13]
Definition: mpegaudiodectab.h:593
OUT_FMT_P
#define OUT_FMT_P
Definition: mpegaudiodec_fixed.c:37
fsize
static int64_t fsize(FILE *f)
Definition: audiomatch.c:28
decode_close
static av_cold int decode_close(AVCodecContext *avctx)
Definition: agm.c:1268
f
#define f(width, name)
Definition: cbs_vp9.c:255
ff_mpa_alloc_tables
const unsigned char *const ff_mpa_alloc_tables[5]
Definition: mpegaudiodata.c:145
SPLIT
#define SPLIT(dst, sf, n)
Definition: mpegaudiodec_template.c:755
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:1575
int32_t
int32_t
Definition: audio_convert.c:194
compute_stereo
static void compute_stereo(MPADecodeContext *s, GranuleDef *g0, GranuleDef *g1)
Definition: mpegaudiodec_template.c:1038
if
if(ret)
Definition: filter_design.txt:179
GranuleDef::big_values
int big_values
Definition: mpegaudiodec_template.c:54
huff_quad_vlc_tables_sizes
static const int huff_quad_vlc_tables_sizes[2]
Definition: mpegaudiodec_template.c:110
NULL
#define NULL
Definition: coverity.c:32
huffman_decode
static int huffman_decode(MPADecodeContext *s, GranuleDef *g, int16_t *exponents, int end_pos2)
Definition: mpegaudiodec_template.c:852
HEADER_SIZE
#define HEADER_SIZE
Definition: mpegaudiodec_template.c:93
HuffTable
Used to store optimal huffman encoding results.
Definition: mjpegenc_huffman.h:69
MULLx
#define MULLx(x, y, s)
Definition: mpegaudiodec_fixed.c:34
MPADecodeContext::avctx
AVCodecContext * avctx
Definition: mpegaudiodec_template.c:87
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:1615
GranuleDef::sb_hybrid
int sb_hybrid[SBLIMIT *18]
Definition: mpegaudiodec_template.c:67
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:498
mp_decode_layer1
static int mp_decode_layer1(MPADecodeContext *s)
Definition: mpegaudiodec_template.c:503
mathops.h
AV_CH_LAYOUT_5POINT1
#define AV_CH_LAYOUT_5POINT1
Definition: channel_layout.h:96
INIT_VLC_USE_NEW_STATIC
#define INIT_VLC_USE_NEW_STATIC
Definition: vlc.h:55
GranuleDef::part2_3_length
int part2_3_length
Definition: mpegaudiodec_template.c:53
AA
#define AA(j)
Definition: mpegaudiodec_template.c:1186
MPADecodeContext::mpadsp
MPADSPContext mpadsp
Definition: mpegaudiodec_template.c:88
SBLIMIT
#define SBLIMIT
Definition: mpegaudio.h:44
GranuleDef::scalefac_scale
uint8_t scalefac_scale
Definition: mpegaudiodec_template.c:61
float_dsp.h
for
for(j=16;j >0;--j)
Definition: h264pred_template.c:469
ff_dlog
#define ff_dlog(a,...)
Definition: tableprint_vlc.h:29
VLC::table_allocated
int table_allocated
Definition: vlc.h:29
OUT_FMT
#define OUT_FMT
Definition: mpegaudiodec_fixed.c:36
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1965
AVPacket::size
int size
Definition: avcodec.h:1478
lsf_sf_expand
static av_always_inline void lsf_sf_expand(int *slen, int sf, int n1, int n2, int n3)
Definition: mpegaudiodec_template.c:775
GranuleDef
Definition: mpegaudiodec_template.c:51
FFMAX
#define FFMAX(a, b)
Definition: common.h:94
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:2233
AV_RB32
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
Definition: bytestream.h:92
huff_vlc
static VLC huff_vlc[16]
Definition: mpegaudiodec_template.c:99
OUT_INT
int16_t OUT_INT
Definition: mpegaudio.h:76
AVFloatDSPContext
Definition: float_dsp.h:24
READ_FLIP_SIGN
#define READ_FLIP_SIGN(dst, src)
Definition: mpegaudiodec_template.c:847
val
const char const char void * val
Definition: avisynth_c.h:863
header
static const uint8_t header[24]
Definition: sdr2.c:67
MPADecodeContext::free_format_next_header
uint32_t free_format_next_header
Definition: mpegaudiodec_template.c:76
FFMIN
#define FFMIN(a, b)
Definition: common.h:96
GranuleDef::block_type
uint8_t block_type
Definition: mpegaudiodec_template.c:57
MPA_DECODE_HEADER
#define MPA_DECODE_HEADER
Definition: mpegaudiodecheader.h:34
offset
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 offset
Definition: writing_filters.txt:86
AVCodecContext::request_sample_fmt
enum AVSampleFormat request_sample_fmt
desired sample format
Definition: avcodec.h:2298
attributes.h
decode_init_static
static av_cold void decode_init_static(void)
Definition: mpegaudiodec_template.c:261
MPADecodeContext::frame
AVFrame * frame
Definition: mpegaudiodec_template.c:90
division_tab9
static int16_t division_tab9[1<< 11]
Definition: mpegaudiodec_template.c:121
M_PI
#define M_PI
Definition: mathematics.h:52
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
scale_factor_mult
static int32_t scale_factor_mult[15][3]
Definition: mpegaudiodec_template.c:130
AVCodecContext::channels
int channels
number of audio channels
Definition: avcodec.h:2226
mpa_huff_data
static const uint8_t mpa_huff_data[32][2]
Definition: mpegaudiodectab.h:524
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:112
AV_CH_LAYOUT_5POINT0
#define AV_CH_LAYOUT_5POINT0
Definition: channel_layout.h:95
switch_buffer
static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos, int *end_pos2)
Definition: mpegaudiodec_template.c:821
in
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) #define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac) { } void ff_audio_convert_free(AudioConvert **ac) { if(! *ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);} AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map) { AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;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);return NULL;} return ac;} 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;} else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->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);return ac;} int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in) { int use_generic=1;int len=in->nb_samples;int p;if(ac->dc) { av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
Definition: audio_convert.c:326
av_assert2
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:64
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
code
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
Definition: filter_design.txt:178
AVCodecContext::extradata
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1666
ff_mpa_sblimit_table
const int ff_mpa_sblimit_table[5]
Definition: mpegaudiodata.c:45
GranuleDef::region_size
int region_size[3]
Definition: mpegaudiodec_template.c:63
RENAME
#define RENAME(name)
Definition: ffv1.h:197
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
AV_CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_7POINT1
Definition: channel_layout.h:107
exp2
#define exp2(x)
Definition: libm.h:288
av_always_inline
#define av_always_inline
Definition: attributes.h:43
value
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
Definition: writing_filters.txt:86
MPADecodeContext::synth_buf
MPA_INT synth_buf[MPA_MAX_CHANNELS][512 *2]
Definition: mpegaudiodec_template.c:79
SUINT
#define SUINT
Definition: dct32_template.c:30
uint8_t
uint8_t
Definition: audio_convert.c:194
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:236
MPEG4AudioConfig::chan_config
int chan_config
Definition: mpeg4audio.h:37
len
int len
Definition: vorbis_enc_data.h:452
mpegaudio.h
mpegaudio_tablegen.h
mpa_pretab
static const uint8_t mpa_pretab[2][22]
Definition: mpegaudiodectab.h:605
avcodec.h
VLC::bits
int bits
Definition: vlc.h:27
alloc_table
static int alloc_table(VLC *vlc, int size, int use_static)
Definition: bitstream.c:110
LAST_BUF_SIZE
#define LAST_BUF_SIZE
Definition: mpegaudiodec_template.c:48
bound
static double bound(const double threshold, const double val)
Definition: af_dynaudnorm.c:355
ret
ret
Definition: filter_design.txt:187
frame
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
Definition: filter_design.txt:264
AV_CH_LAYOUT_SURROUND
#define AV_CH_LAYOUT_SURROUND
Definition: channel_layout.h:89
align_get_bits
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:693
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen_template.c:38
AVCodecContext
main external API structure.
Definition: avcodec.h:1565
GranuleDef::global_gain
int global_gain
Definition: mpegaudiodec_template.c:55
channel_layout.h
t2
#define t2
Definition: regdef.h:30
FRAC_BITS
#define FRAC_BITS
Definition: g729postfilter.c:33
MPADecodeContext::synth_buf_offset
int synth_buf_offset[MPA_MAX_CHANNELS]
Definition: mpegaudiodec_template.c:80
huff_quad_vlc_tables
static VLC_TYPE huff_quad_vlc_tables[128+16][2]
Definition: mpegaudiodec_template.c:109
C3
#define C3
Definition: mpegaudiodec_template.c:454
VLC
Definition: vlc.h:26
region_offset2size
static void region_offset2size(GranuleDef *g)
Convert region offsets to region sizes and truncate size to big_values.
Definition: mpegaudiodec_template.c:146
init_long_region
static void init_long_region(MPADecodeContext *s, GranuleDef *g, int ra1, int ra2)
Definition: mpegaudiodec_template.c:175
MODE_EXT_I_STEREO
#define MODE_EXT_I_STEREO
Definition: mpegaudiodata.h:35
csa_table
static INTFLOAT csa_table[8][4]
Definition: mpegaudiodec_template.c:117
MUL64
#define MUL64(a, b)
Definition: mathops.h:54
MPA_JSTEREO
#define MPA_JSTEREO
Definition: mpegaudio.h:47
flush
static void flush(AVCodecContext *avctx)
Definition: mpegaudiodec_template.c:1726
samples
Filter the word “frame” indicates either a video frame or a group of audio samples
Definition: filter_design.txt:8
MPADecodeContext::extrasize
int extrasize
Definition: mpegaudiodec_template.c:74
l2_unscale_group
static int l2_unscale_group(int steps, int mant, int scale_factor)
Definition: mpegaudiodec_template.c:226
GranuleDef::preflag
int preflag
Definition: mpegaudiodec_template.c:64
scale_factor_modshift
static uint16_t scale_factor_modshift[64]
Definition: mpegaudiodec_template.c:128
mpegaudiodata.h
AV_EF_AGGRESSIVE
#define AV_EF_AGGRESSIVE
consider things that a sane encoder should not do as an error
Definition: avcodec.h:2710
shift
static int shift(int a, int b)
Definition: sonic.c:82
MPADecodeContext::sb_samples
int sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]
Definition: mpegaudiodec_template.c:81
mpegaudiodsp.h
MPA_INT
int32_t MPA_INT
Definition: mpegaudio.h:75
GranuleDef::count1table_select
uint8_t count1table_select
Definition: mpegaudiodec_template.c:62
band_index_long
static uint16_t band_index_long[9][23]
Definition: mpegaudiodec_template.c:112
get_bitsz
static av_always_inline int get_bitsz(GetBitContext *s, int n)
Read 0-25 bits.
Definition: get_bits.h:415
AV_CODEC_FLAG_BITEXACT
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition: avcodec.h:908
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:39
MPADecodeContext::err_recognition
int err_recognition
Definition: mpegaudiodec_template.c:86
AVPacket
This structure stores compressed data.
Definition: avcodec.h:1454
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:1592
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
avpriv_float_dsp_alloc
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
Definition: float_dsp.c:135
C5
#define C5
Definition: mpegaudiodec_template.c:456
decode_init
static av_cold int decode_init(AVCodecContext *avctx)
Definition: mpegaudiodec_template.c:421
AV_CH_LAYOUT_4POINT0
#define AV_CH_LAYOUT_4POINT0
Definition: channel_layout.h:91
scale_factor_mult2
static const int32_t scale_factor_mult2[3][3]
Definition: mpegaudiodec_template.c:136
mpa_huff_tables
static const HuffTable mpa_huff_tables[16]
Definition: mpegaudiodectab.h:505
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:28
C6
#define C6
Definition: mpegaudiodec_template.c:457
ISQRT2
#define ISQRT2
Definition: mpegaudiodec_template.c:1036
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
MPA_MAX_CHANNELS
#define MPA_MAX_CHANNELS
Definition: mpegaudio.h:42
h
h
Definition: vp9dsp_template.c:2038
MPADecodeContext::mdct_buf
INTFLOAT mdct_buf[MPA_MAX_CHANNELS][SBLIMIT *18]
Definition: mpegaudiodec_template.c:82
SUINTFLOAT
#define SUINTFLOAT
Definition: dct32_template.c:45
MPA_MAX_CODED_FRAME_SIZE
#define MPA_MAX_CODED_FRAME_SIZE
Definition: mpegaudio.h:40
avpriv_mpeg4audio_get_config
int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, int bit_size, int sync_extension)
Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration.
Definition: mpeg4audio.c:159
GranuleDef::short_start
int short_start
Definition: mpegaudiodec_template.c:65
VLC::table
VLC_TYPE(* table)[2]
code, bits
Definition: vlc.h:28
INTFLOAT
float INTFLOAT
Definition: aac_defines.h:86
SHR
#define SHR(a, b)
Definition: mpegaudiodec_fixed.c:28
compute_antialias_float.h
division_tab5
static int16_t division_tab5[1<< 8]
Definition: mpegaudiodec_template.c:120
FIXR
#define FIXR(x)
Definition: aac_defines.h:92
AV_RB16
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
Definition: bytestream.h:94
GranuleDef::long_end
int long_end
Definition: mpegaudiodec_template.c:65
MPEG4AudioConfig::sample_rate
int sample_rate
Definition: mpeg4audio.h:36
table_4_3_value
static uint32_t table_4_3_value[TABLE_4_3_SIZE]
Definition: mpegaudio_tablegen.h:36
mp_decode_layer2
static int mp_decode_layer2(MPADecodeContext *s)
Definition: mpegaudiodec_template.c:568