You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2075 lines
68KB

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