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.

1195 lines
42KB

  1. /*
  2. * AC-3 Audio Decoder
  3. * This code is developed as part of Google Summer of Code 2006 Program.
  4. *
  5. * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com).
  6. * Copyright (c) 2007 Justin Ruggles
  7. *
  8. * Portions of this code are derived from liba52
  9. * http://liba52.sourceforge.net
  10. * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
  11. * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
  12. *
  13. * This file is part of FFmpeg.
  14. *
  15. * FFmpeg is free software; you can redistribute it and/or
  16. * modify it under the terms of the GNU General Public
  17. * License as published by the Free Software Foundation; either
  18. * version 2 of the License, or (at your option) any later version.
  19. *
  20. * FFmpeg is distributed in the hope that it will be useful,
  21. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  23. * General Public License for more details.
  24. *
  25. * You should have received a copy of the GNU General Public
  26. * License along with FFmpeg; if not, write to the Free Software
  27. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  28. */
  29. #include <stdio.h>
  30. #include <stddef.h>
  31. #include <math.h>
  32. #include <string.h>
  33. #include "avcodec.h"
  34. #include "ac3_parser.h"
  35. #include "bitstream.h"
  36. #include "dsputil.h"
  37. #include "random.h"
  38. /**
  39. * Table of bin locations for rematrixing bands
  40. * reference: Section 7.5.2 Rematrixing : Frequency Band Definitions
  41. */
  42. static const uint8_t rematrix_band_tab[5] = { 13, 25, 37, 61, 253 };
  43. /**
  44. * table for exponent to scale_factor mapping
  45. * scale_factors[i] = 2 ^ -i
  46. */
  47. static float scale_factors[25];
  48. /** table for grouping exponents */
  49. static uint8_t exp_ungroup_tab[128][3];
  50. /** tables for ungrouping mantissas */
  51. static float b1_mantissas[32][3];
  52. static float b2_mantissas[128][3];
  53. static float b3_mantissas[8];
  54. static float b4_mantissas[128][2];
  55. static float b5_mantissas[16];
  56. /**
  57. * Quantization table: levels for symmetric. bits for asymmetric.
  58. * reference: Table 7.18 Mapping of bap to Quantizer
  59. */
  60. static const uint8_t quantization_tab[16] = {
  61. 0, 3, 5, 7, 11, 15,
  62. 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
  63. };
  64. /** dynamic range table. converts codes to scale factors. */
  65. static float dynamic_range_tab[256];
  66. /** dialog normalization table */
  67. static float dialog_norm_tab[32];
  68. /** Adjustments in dB gain */
  69. #define LEVEL_MINUS_3DB 0.7071067811865476
  70. #define LEVEL_MINUS_4POINT5DB 0.5946035575013605
  71. #define LEVEL_MINUS_6DB 0.5000000000000000
  72. #define LEVEL_MINUS_9DB 0.3535533905932738
  73. #define LEVEL_ZERO 0.0000000000000000
  74. #define LEVEL_ONE 1.0000000000000000
  75. static const float gain_levels[6] = {
  76. LEVEL_ZERO,
  77. LEVEL_ONE,
  78. LEVEL_MINUS_3DB,
  79. LEVEL_MINUS_4POINT5DB,
  80. LEVEL_MINUS_6DB,
  81. LEVEL_MINUS_9DB
  82. };
  83. /**
  84. * Table for center mix levels
  85. * reference: Section 5.4.2.4 cmixlev
  86. */
  87. static const uint8_t center_levels[4] = { 2, 3, 4, 3 };
  88. /**
  89. * Table for surround mix levels
  90. * reference: Section 5.4.2.5 surmixlev
  91. */
  92. static const uint8_t surround_levels[4] = { 2, 4, 0, 4 };
  93. /**
  94. * Table for default stereo downmixing coefficients
  95. * reference: Section 7.8.2 Downmixing Into Two Channels
  96. */
  97. static const uint8_t ac3_default_coeffs[8][5][2] = {
  98. { { 1, 0 }, { 0, 1 }, },
  99. { { 2, 2 }, },
  100. { { 1, 0 }, { 0, 1 }, },
  101. { { 1, 0 }, { 3, 3 }, { 0, 1 }, },
  102. { { 1, 0 }, { 0, 1 }, { 4, 4 }, },
  103. { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 5, 5 }, },
  104. { { 1, 0 }, { 0, 1 }, { 4, 0 }, { 0, 4 }, },
  105. { { 1, 0 }, { 3, 3 }, { 0, 1 }, { 4, 0 }, { 0, 4 }, },
  106. };
  107. /* override ac3.h to include coupling channel */
  108. #undef AC3_MAX_CHANNELS
  109. #define AC3_MAX_CHANNELS 7
  110. #define CPL_CH 0
  111. #define AC3_OUTPUT_LFEON 8
  112. typedef struct {
  113. int channel_mode; ///< channel mode (acmod)
  114. int dolby_surround_mode; ///< dolby surround mode
  115. int block_switch[AC3_MAX_CHANNELS]; ///< block switch flags
  116. int dither_flag[AC3_MAX_CHANNELS]; ///< dither flags
  117. int dither_all; ///< true if all channels are dithered
  118. int cpl_in_use; ///< coupling in use
  119. int channel_in_cpl[AC3_MAX_CHANNELS]; ///< channel in coupling
  120. int phase_flags_in_use; ///< phase flags in use
  121. int cpl_band_struct[18]; ///< coupling band structure
  122. int rematrixing_strategy; ///< rematrixing strategy
  123. int num_rematrixing_bands; ///< number of rematrixing bands
  124. int rematrixing_flags[4]; ///< rematrixing flags
  125. int exp_strategy[AC3_MAX_CHANNELS]; ///< exponent strategies
  126. int snr_offset[AC3_MAX_CHANNELS]; ///< signal-to-noise ratio offsets
  127. int fast_gain[AC3_MAX_CHANNELS]; ///< fast gain values (signal-to-mask ratio)
  128. int dba_mode[AC3_MAX_CHANNELS]; ///< delta bit allocation mode
  129. int dba_nsegs[AC3_MAX_CHANNELS]; ///< number of delta segments
  130. uint8_t dba_offsets[AC3_MAX_CHANNELS][8]; ///< delta segment offsets
  131. uint8_t dba_lengths[AC3_MAX_CHANNELS][8]; ///< delta segment lengths
  132. uint8_t dba_values[AC3_MAX_CHANNELS][8]; ///< delta values for each segment
  133. int sampling_rate; ///< sample frequency, in Hz
  134. int bit_rate; ///< stream bit rate, in bits-per-second
  135. int frame_size; ///< current frame size, in bytes
  136. int channels; ///< number of total channels
  137. int fbw_channels; ///< number of full-bandwidth channels
  138. int lfe_on; ///< lfe channel in use
  139. int lfe_ch; ///< index of LFE channel
  140. int output_mode; ///< output channel configuration
  141. int out_channels; ///< number of output channels
  142. float downmix_coeffs[AC3_MAX_CHANNELS][2]; ///< stereo downmix coefficients
  143. float dialog_norm[2]; ///< dialog normalization
  144. float dynamic_range[2]; ///< dynamic range
  145. float cpl_coords[AC3_MAX_CHANNELS][18]; ///< coupling coordinates
  146. int num_cpl_bands; ///< number of coupling bands
  147. int num_cpl_subbands; ///< number of coupling sub bands
  148. int start_freq[AC3_MAX_CHANNELS]; ///< start frequency bin
  149. int end_freq[AC3_MAX_CHANNELS]; ///< end frequency bin
  150. AC3BitAllocParameters bit_alloc_params; ///< bit allocation parameters
  151. int8_t dexps[AC3_MAX_CHANNELS][256]; ///< decoded exponents
  152. uint8_t bap[AC3_MAX_CHANNELS][256]; ///< bit allocation pointers
  153. int16_t psd[AC3_MAX_CHANNELS][256]; ///< scaled exponents
  154. int16_t band_psd[AC3_MAX_CHANNELS][50]; ///< interpolated exponents
  155. int16_t mask[AC3_MAX_CHANNELS][50]; ///< masking curve values
  156. DECLARE_ALIGNED_16(float, transform_coeffs[AC3_MAX_CHANNELS][256]); ///< transform coefficients
  157. /* For IMDCT. */
  158. MDCTContext imdct_512; ///< for 512 sample IMDCT
  159. MDCTContext imdct_256; ///< for 256 sample IMDCT
  160. DSPContext dsp; ///< for optimization
  161. float add_bias; ///< offset for float_to_int16 conversion
  162. float mul_bias; ///< scaling for float_to_int16 conversion
  163. DECLARE_ALIGNED_16(float, output[AC3_MAX_CHANNELS-1][256]); ///< output after imdct transform and windowing
  164. DECLARE_ALIGNED_16(short, int_output[AC3_MAX_CHANNELS-1][256]); ///< final 16-bit integer output
  165. DECLARE_ALIGNED_16(float, delay[AC3_MAX_CHANNELS-1][256]); ///< delay - added to the next block
  166. DECLARE_ALIGNED_16(float, tmp_imdct[256]); ///< temporary storage for imdct transform
  167. DECLARE_ALIGNED_16(float, tmp_output[512]); ///< temporary storage for output before windowing
  168. DECLARE_ALIGNED_16(float, window[256]); ///< window coefficients
  169. /* Miscellaneous. */
  170. GetBitContext gb; ///< bitstream reader
  171. AVRandomState dith_state; ///< for dither generation
  172. AVCodecContext *avctx; ///< parent context
  173. } AC3DecodeContext;
  174. /**
  175. * Generate a Kaiser-Bessel Derived Window.
  176. */
  177. static void ac3_window_init(float *window)
  178. {
  179. int i, j;
  180. double sum = 0.0, bessel, tmp;
  181. double local_window[256];
  182. double alpha2 = (5.0 * M_PI / 256.0) * (5.0 * M_PI / 256.0);
  183. for (i = 0; i < 256; i++) {
  184. tmp = i * (256 - i) * alpha2;
  185. bessel = 1.0;
  186. for (j = 100; j > 0; j--) /* default to 100 iterations */
  187. bessel = bessel * tmp / (j * j) + 1;
  188. sum += bessel;
  189. local_window[i] = sum;
  190. }
  191. sum++;
  192. for (i = 0; i < 256; i++)
  193. window[i] = sqrt(local_window[i] / sum);
  194. }
  195. /**
  196. * Symmetrical Dequantization
  197. * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
  198. * Tables 7.19 to 7.23
  199. */
  200. static inline float
  201. symmetric_dequant(int code, int levels)
  202. {
  203. return (code - (levels >> 1)) * (2.0f / levels);
  204. }
  205. /*
  206. * Initialize tables at runtime.
  207. */
  208. static void ac3_tables_init(void)
  209. {
  210. int i;
  211. /* generate grouped mantissa tables
  212. reference: Section 7.3.5 Ungrouping of Mantissas */
  213. for(i=0; i<32; i++) {
  214. /* bap=1 mantissas */
  215. b1_mantissas[i][0] = symmetric_dequant( i / 9 , 3);
  216. b1_mantissas[i][1] = symmetric_dequant((i % 9) / 3, 3);
  217. b1_mantissas[i][2] = symmetric_dequant((i % 9) % 3, 3);
  218. }
  219. for(i=0; i<128; i++) {
  220. /* bap=2 mantissas */
  221. b2_mantissas[i][0] = symmetric_dequant( i / 25 , 5);
  222. b2_mantissas[i][1] = symmetric_dequant((i % 25) / 5, 5);
  223. b2_mantissas[i][2] = symmetric_dequant((i % 25) % 5, 5);
  224. /* bap=4 mantissas */
  225. b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
  226. b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
  227. }
  228. /* generate ungrouped mantissa tables
  229. reference: Tables 7.21 and 7.23 */
  230. for(i=0; i<7; i++) {
  231. /* bap=3 mantissas */
  232. b3_mantissas[i] = symmetric_dequant(i, 7);
  233. }
  234. for(i=0; i<15; i++) {
  235. /* bap=5 mantissas */
  236. b5_mantissas[i] = symmetric_dequant(i, 15);
  237. }
  238. /* generate dynamic range table
  239. reference: Section 7.7.1 Dynamic Range Control */
  240. for(i=0; i<256; i++) {
  241. int v = (i >> 5) - ((i >> 7) << 3) - 5;
  242. dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
  243. }
  244. /* generate dialog normalization table
  245. references: Section 5.4.2.8 dialnorm
  246. Section 7.6 Dialogue Normalization */
  247. for(i=1; i<32; i++) {
  248. dialog_norm_tab[i] = expf((i-31) * M_LN10 / 20.0f);
  249. }
  250. dialog_norm_tab[0] = dialog_norm_tab[31];
  251. /* generate scale factors for exponents and asymmetrical dequantization
  252. reference: Section 7.3.2 Expansion of Mantissas for Asymmetric Quantization */
  253. for (i = 0; i < 25; i++)
  254. scale_factors[i] = pow(2.0, -i);
  255. /* generate exponent tables
  256. reference: Section 7.1.3 Exponent Decoding */
  257. for(i=0; i<128; i++) {
  258. exp_ungroup_tab[i][0] = i / 25;
  259. exp_ungroup_tab[i][1] = (i % 25) / 5;
  260. exp_ungroup_tab[i][2] = (i % 25) % 5;
  261. }
  262. }
  263. /**
  264. * AVCodec initialization
  265. */
  266. static int ac3_decode_init(AVCodecContext *avctx)
  267. {
  268. AC3DecodeContext *ctx = avctx->priv_data;
  269. ctx->avctx = avctx;
  270. ac3_common_init();
  271. ac3_tables_init();
  272. ff_mdct_init(&ctx->imdct_256, 8, 1);
  273. ff_mdct_init(&ctx->imdct_512, 9, 1);
  274. ac3_window_init(ctx->window);
  275. dsputil_init(&ctx->dsp, avctx);
  276. av_init_random(0, &ctx->dith_state);
  277. /* set bias values for float to int16 conversion */
  278. if(ctx->dsp.float_to_int16 == ff_float_to_int16_c) {
  279. ctx->add_bias = 385.0f;
  280. ctx->mul_bias = 1.0f;
  281. } else {
  282. ctx->add_bias = 0.0f;
  283. ctx->mul_bias = 32767.0f;
  284. }
  285. return 0;
  286. }
  287. /**
  288. * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
  289. * GetBitContext within AC3DecodeContext must point to
  290. * start of the synchronized ac3 bitstream.
  291. */
  292. static int ac3_parse_header(AC3DecodeContext *ctx)
  293. {
  294. AC3HeaderInfo hdr;
  295. GetBitContext *gb = &ctx->gb;
  296. float center_mix_level, surround_mix_level;
  297. int err, i;
  298. err = ff_ac3_parse_header(gb->buffer, &hdr);
  299. if(err)
  300. return err;
  301. /* get decoding parameters from header info */
  302. ctx->bit_alloc_params.sr_code = hdr.sr_code;
  303. ctx->channel_mode = hdr.channel_mode;
  304. center_mix_level = gain_levels[center_levels[hdr.center_mix_level]];
  305. surround_mix_level = gain_levels[surround_levels[hdr.surround_mix_level]];
  306. ctx->dolby_surround_mode = hdr.dolby_surround_mode;
  307. ctx->lfe_on = hdr.lfe_on;
  308. ctx->bit_alloc_params.sr_shift = hdr.sr_shift;
  309. ctx->sampling_rate = hdr.sample_rate;
  310. ctx->bit_rate = hdr.bit_rate;
  311. ctx->channels = hdr.channels;
  312. ctx->fbw_channels = ctx->channels - ctx->lfe_on;
  313. ctx->lfe_ch = ctx->fbw_channels + 1;
  314. ctx->frame_size = hdr.frame_size;
  315. /* set default output to all source channels */
  316. ctx->out_channels = ctx->channels;
  317. ctx->output_mode = ctx->channel_mode;
  318. if(ctx->lfe_on)
  319. ctx->output_mode |= AC3_OUTPUT_LFEON;
  320. /* skip over portion of header which has already been read */
  321. skip_bits(gb, 16); // skip the sync_word
  322. skip_bits(gb, 16); // skip crc1
  323. skip_bits(gb, 8); // skip fscod and frmsizecod
  324. skip_bits(gb, 11); // skip bsid, bsmod, and acmod
  325. if(ctx->channel_mode == AC3_CHMODE_STEREO) {
  326. skip_bits(gb, 2); // skip dsurmod
  327. } else {
  328. if((ctx->channel_mode & 1) && ctx->channel_mode != AC3_CHMODE_MONO)
  329. skip_bits(gb, 2); // skip cmixlev
  330. if(ctx->channel_mode & 4)
  331. skip_bits(gb, 2); // skip surmixlev
  332. }
  333. skip_bits1(gb); // skip lfeon
  334. /* read the rest of the bsi. read twice for dual mono mode. */
  335. i = !(ctx->channel_mode);
  336. do {
  337. ctx->dialog_norm[i] = dialog_norm_tab[get_bits(gb, 5)]; // dialog normalization
  338. if (get_bits1(gb))
  339. skip_bits(gb, 8); //skip compression
  340. if (get_bits1(gb))
  341. skip_bits(gb, 8); //skip language code
  342. if (get_bits1(gb))
  343. skip_bits(gb, 7); //skip audio production information
  344. } while (i--);
  345. skip_bits(gb, 2); //skip copyright bit and original bitstream bit
  346. /* skip the timecodes (or extra bitstream information for Alternate Syntax)
  347. TODO: read & use the xbsi1 downmix levels */
  348. if (get_bits1(gb))
  349. skip_bits(gb, 14); //skip timecode1 / xbsi1
  350. if (get_bits1(gb))
  351. skip_bits(gb, 14); //skip timecode2 / xbsi2
  352. /* skip additional bitstream info */
  353. if (get_bits1(gb)) {
  354. i = get_bits(gb, 6);
  355. do {
  356. skip_bits(gb, 8);
  357. } while(i--);
  358. }
  359. /* set stereo downmixing coefficients
  360. reference: Section 7.8.2 Downmixing Into Two Channels */
  361. for(i=0; i<ctx->fbw_channels; i++) {
  362. ctx->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[ctx->channel_mode][i][0]];
  363. ctx->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[ctx->channel_mode][i][1]];
  364. }
  365. if(ctx->channel_mode > 1 && ctx->channel_mode & 1) {
  366. ctx->downmix_coeffs[1][0] = ctx->downmix_coeffs[1][1] = center_mix_level;
  367. }
  368. if(ctx->channel_mode == AC3_CHMODE_2F1R || ctx->channel_mode == AC3_CHMODE_3F1R) {
  369. int nf = ctx->channel_mode - 2;
  370. ctx->downmix_coeffs[nf][0] = ctx->downmix_coeffs[nf][1] = surround_mix_level * LEVEL_MINUS_3DB;
  371. }
  372. if(ctx->channel_mode == AC3_CHMODE_2F2R || ctx->channel_mode == AC3_CHMODE_3F2R) {
  373. int nf = ctx->channel_mode - 4;
  374. ctx->downmix_coeffs[nf][0] = ctx->downmix_coeffs[nf+1][1] = surround_mix_level;
  375. }
  376. return 0;
  377. }
  378. /**
  379. * Decode the grouped exponents according to exponent strategy.
  380. * reference: Section 7.1.3 Exponent Decoding
  381. */
  382. static void decode_exponents(GetBitContext *gb, int exp_strategy, int ngrps,
  383. uint8_t absexp, int8_t *dexps)
  384. {
  385. int i, j, grp, group_size;
  386. int dexp[256];
  387. int expacc, prevexp;
  388. /* unpack groups */
  389. group_size = exp_strategy + (exp_strategy == EXP_D45);
  390. for(grp=0,i=0; grp<ngrps; grp++) {
  391. expacc = get_bits(gb, 7);
  392. dexp[i++] = exp_ungroup_tab[expacc][0];
  393. dexp[i++] = exp_ungroup_tab[expacc][1];
  394. dexp[i++] = exp_ungroup_tab[expacc][2];
  395. }
  396. /* convert to absolute exps and expand groups */
  397. prevexp = absexp;
  398. for(i=0; i<ngrps*3; i++) {
  399. prevexp = av_clip(prevexp + dexp[i]-2, 0, 24);
  400. for(j=0; j<group_size; j++) {
  401. dexps[(i*group_size)+j] = prevexp;
  402. }
  403. }
  404. }
  405. /**
  406. * Generate transform coefficients for each coupled channel in the coupling
  407. * range using the coupling coefficients and coupling coordinates.
  408. * reference: Section 7.4.3 Coupling Coordinate Format
  409. */
  410. static void uncouple_channels(AC3DecodeContext *ctx)
  411. {
  412. int i, j, ch, bnd, subbnd;
  413. subbnd = -1;
  414. i = ctx->start_freq[CPL_CH];
  415. for(bnd=0; bnd<ctx->num_cpl_bands; bnd++) {
  416. do {
  417. subbnd++;
  418. for(j=0; j<12; j++) {
  419. for(ch=1; ch<=ctx->fbw_channels; ch++) {
  420. if(ctx->channel_in_cpl[ch])
  421. ctx->transform_coeffs[ch][i] = ctx->transform_coeffs[CPL_CH][i] * ctx->cpl_coords[ch][bnd] * 8.0f;
  422. }
  423. i++;
  424. }
  425. } while(ctx->cpl_band_struct[subbnd]);
  426. }
  427. }
  428. /**
  429. * Grouped mantissas for 3-level 5-level and 11-level quantization
  430. */
  431. typedef struct {
  432. float b1_mant[3];
  433. float b2_mant[3];
  434. float b4_mant[2];
  435. int b1ptr;
  436. int b2ptr;
  437. int b4ptr;
  438. } mant_groups;
  439. /**
  440. * Get the transform coefficients for a particular channel
  441. * reference: Section 7.3 Quantization and Decoding of Mantissas
  442. */
  443. static int get_transform_coeffs_ch(AC3DecodeContext *ctx, int ch_index, mant_groups *m)
  444. {
  445. GetBitContext *gb = &ctx->gb;
  446. int i, gcode, tbap, start, end;
  447. uint8_t *exps;
  448. uint8_t *bap;
  449. float *coeffs;
  450. exps = ctx->dexps[ch_index];
  451. bap = ctx->bap[ch_index];
  452. coeffs = ctx->transform_coeffs[ch_index];
  453. start = ctx->start_freq[ch_index];
  454. end = ctx->end_freq[ch_index];
  455. for (i = start; i < end; i++) {
  456. tbap = bap[i];
  457. switch (tbap) {
  458. case 0:
  459. coeffs[i] = ((av_random(&ctx->dith_state) & 0xFFFF) / 65535.0f) - 0.5f;
  460. break;
  461. case 1:
  462. if(m->b1ptr > 2) {
  463. gcode = get_bits(gb, 5);
  464. m->b1_mant[0] = b1_mantissas[gcode][0];
  465. m->b1_mant[1] = b1_mantissas[gcode][1];
  466. m->b1_mant[2] = b1_mantissas[gcode][2];
  467. m->b1ptr = 0;
  468. }
  469. coeffs[i] = m->b1_mant[m->b1ptr++];
  470. break;
  471. case 2:
  472. if(m->b2ptr > 2) {
  473. gcode = get_bits(gb, 7);
  474. m->b2_mant[0] = b2_mantissas[gcode][0];
  475. m->b2_mant[1] = b2_mantissas[gcode][1];
  476. m->b2_mant[2] = b2_mantissas[gcode][2];
  477. m->b2ptr = 0;
  478. }
  479. coeffs[i] = m->b2_mant[m->b2ptr++];
  480. break;
  481. case 3:
  482. coeffs[i] = b3_mantissas[get_bits(gb, 3)];
  483. break;
  484. case 4:
  485. if(m->b4ptr > 1) {
  486. gcode = get_bits(gb, 7);
  487. m->b4_mant[0] = b4_mantissas[gcode][0];
  488. m->b4_mant[1] = b4_mantissas[gcode][1];
  489. m->b4ptr = 0;
  490. }
  491. coeffs[i] = m->b4_mant[m->b4ptr++];
  492. break;
  493. case 5:
  494. coeffs[i] = b5_mantissas[get_bits(gb, 4)];
  495. break;
  496. default:
  497. /* asymmetric dequantization */
  498. coeffs[i] = get_sbits(gb, quantization_tab[tbap]) * scale_factors[quantization_tab[tbap]-1];
  499. break;
  500. }
  501. coeffs[i] *= scale_factors[exps[i]];
  502. }
  503. return 0;
  504. }
  505. /**
  506. * Remove random dithering from coefficients with zero-bit mantissas
  507. * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
  508. */
  509. static void remove_dithering(AC3DecodeContext *ctx) {
  510. int ch, i;
  511. int end=0;
  512. float *coeffs;
  513. uint8_t *bap;
  514. for(ch=1; ch<=ctx->fbw_channels; ch++) {
  515. if(!ctx->dither_flag[ch]) {
  516. coeffs = ctx->transform_coeffs[ch];
  517. bap = ctx->bap[ch];
  518. if(ctx->channel_in_cpl[ch])
  519. end = ctx->start_freq[CPL_CH];
  520. else
  521. end = ctx->end_freq[ch];
  522. for(i=0; i<end; i++) {
  523. if(bap[i] == 0)
  524. coeffs[i] = 0.0f;
  525. }
  526. if(ctx->channel_in_cpl[ch]) {
  527. bap = ctx->bap[CPL_CH];
  528. for(; i<ctx->end_freq[CPL_CH]; i++) {
  529. if(bap[i] == 0)
  530. coeffs[i] = 0.0f;
  531. }
  532. }
  533. }
  534. }
  535. }
  536. /**
  537. * Get the transform coefficients.
  538. */
  539. static int get_transform_coeffs(AC3DecodeContext * ctx)
  540. {
  541. int ch, end;
  542. int got_cplchan = 0;
  543. mant_groups m;
  544. m.b1ptr = m.b2ptr = m.b4ptr = 3;
  545. for (ch = 1; ch <= ctx->channels; ch++) {
  546. /* transform coefficients for full-bandwidth channel */
  547. if (get_transform_coeffs_ch(ctx, ch, &m))
  548. return -1;
  549. /* tranform coefficients for coupling channel come right after the
  550. coefficients for the first coupled channel*/
  551. if (ctx->channel_in_cpl[ch]) {
  552. if (!got_cplchan) {
  553. if (get_transform_coeffs_ch(ctx, CPL_CH, &m)) {
  554. av_log(ctx->avctx, AV_LOG_ERROR, "error in decoupling channels\n");
  555. return -1;
  556. }
  557. uncouple_channels(ctx);
  558. got_cplchan = 1;
  559. }
  560. end = ctx->end_freq[CPL_CH];
  561. } else {
  562. end = ctx->end_freq[ch];
  563. }
  564. do
  565. ctx->transform_coeffs[ch][end] = 0;
  566. while(++end < 256);
  567. }
  568. /* if any channel doesn't use dithering, zero appropriate coefficients */
  569. if(!ctx->dither_all)
  570. remove_dithering(ctx);
  571. return 0;
  572. }
  573. /**
  574. * Stereo rematrixing.
  575. * reference: Section 7.5.4 Rematrixing : Decoding Technique
  576. */
  577. static void do_rematrixing(AC3DecodeContext *ctx)
  578. {
  579. int bnd, i;
  580. int end, bndend;
  581. float tmp0, tmp1;
  582. end = FFMIN(ctx->end_freq[1], ctx->end_freq[2]);
  583. for(bnd=0; bnd<ctx->num_rematrixing_bands; bnd++) {
  584. if(ctx->rematrixing_flags[bnd]) {
  585. bndend = FFMIN(end, rematrix_band_tab[bnd+1]);
  586. for(i=rematrix_band_tab[bnd]; i<bndend; i++) {
  587. tmp0 = ctx->transform_coeffs[1][i];
  588. tmp1 = ctx->transform_coeffs[2][i];
  589. ctx->transform_coeffs[1][i] = tmp0 + tmp1;
  590. ctx->transform_coeffs[2][i] = tmp0 - tmp1;
  591. }
  592. }
  593. }
  594. }
  595. /**
  596. * Perform the 256-point IMDCT
  597. */
  598. static void do_imdct_256(AC3DecodeContext *ctx, int chindex)
  599. {
  600. int i, k;
  601. DECLARE_ALIGNED_16(float, x[128]);
  602. FFTComplex z[2][64];
  603. float *o_ptr = ctx->tmp_output;
  604. for(i=0; i<2; i++) {
  605. /* de-interleave coefficients */
  606. for(k=0; k<128; k++) {
  607. x[k] = ctx->transform_coeffs[chindex][2*k+i];
  608. }
  609. /* run standard IMDCT */
  610. ctx->imdct_256.fft.imdct_calc(&ctx->imdct_256, o_ptr, x, ctx->tmp_imdct);
  611. /* reverse the post-rotation & reordering from standard IMDCT */
  612. for(k=0; k<32; k++) {
  613. z[i][32+k].re = -o_ptr[128+2*k];
  614. z[i][32+k].im = -o_ptr[2*k];
  615. z[i][31-k].re = o_ptr[2*k+1];
  616. z[i][31-k].im = o_ptr[128+2*k+1];
  617. }
  618. }
  619. /* apply AC-3 post-rotation & reordering */
  620. for(k=0; k<64; k++) {
  621. o_ptr[ 2*k ] = -z[0][ k].im;
  622. o_ptr[ 2*k+1] = z[0][63-k].re;
  623. o_ptr[128+2*k ] = -z[0][ k].re;
  624. o_ptr[128+2*k+1] = z[0][63-k].im;
  625. o_ptr[256+2*k ] = -z[1][ k].re;
  626. o_ptr[256+2*k+1] = z[1][63-k].im;
  627. o_ptr[384+2*k ] = z[1][ k].im;
  628. o_ptr[384+2*k+1] = -z[1][63-k].re;
  629. }
  630. }
  631. /**
  632. * Inverse MDCT Transform.
  633. * Convert frequency domain coefficients to time-domain audio samples.
  634. * reference: Section 7.9.4 Transformation Equations
  635. */
  636. static inline void do_imdct(AC3DecodeContext *ctx)
  637. {
  638. int ch;
  639. int channels;
  640. /* Don't perform the IMDCT on the LFE channel unless it's used in the output */
  641. channels = ctx->fbw_channels;
  642. if(ctx->output_mode & AC3_OUTPUT_LFEON)
  643. channels++;
  644. for (ch=1; ch<=channels; ch++) {
  645. if (ctx->block_switch[ch]) {
  646. do_imdct_256(ctx, ch);
  647. } else {
  648. ctx->imdct_512.fft.imdct_calc(&ctx->imdct_512, ctx->tmp_output,
  649. ctx->transform_coeffs[ch],
  650. ctx->tmp_imdct);
  651. }
  652. /* For the first half of the block, apply the window, add the delay
  653. from the previous block, and send to output */
  654. ctx->dsp.vector_fmul_add_add(ctx->output[ch-1], ctx->tmp_output,
  655. ctx->window, ctx->delay[ch-1], 0, 256, 1);
  656. /* For the second half of the block, apply the window and store the
  657. samples to delay, to be combined with the next block */
  658. ctx->dsp.vector_fmul_reverse(ctx->delay[ch-1], ctx->tmp_output+256,
  659. ctx->window, 256);
  660. }
  661. }
  662. /**
  663. * Downmix the output to mono or stereo.
  664. */
  665. static void ac3_downmix(float samples[][256], int fbw_channels,
  666. int output_mode, float coef[AC3_MAX_CHANNELS][2],
  667. int ch_offset)
  668. {
  669. int i, j;
  670. float v0, v1, s0, s1;
  671. for(i=0; i<256; i++) {
  672. v0 = v1 = s0 = s1 = 0.0f;
  673. for(j=ch_offset; j<fbw_channels+ch_offset; j++) {
  674. v0 += samples[j][i] * coef[j-ch_offset][0];
  675. v1 += samples[j][i] * coef[j-ch_offset][1];
  676. s0 += coef[j-ch_offset][0];
  677. s1 += coef[j-ch_offset][1];
  678. }
  679. v0 /= s0;
  680. v1 /= s1;
  681. if(output_mode == AC3_CHMODE_MONO) {
  682. samples[ch_offset][i] = (v0 + v1) * LEVEL_MINUS_3DB;
  683. } else if(output_mode == AC3_CHMODE_STEREO) {
  684. samples[ch_offset][i] = v0;
  685. samples[ch_offset+1][i] = v1;
  686. }
  687. }
  688. }
  689. /**
  690. * Parse an audio block from AC-3 bitstream.
  691. */
  692. static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
  693. {
  694. int fbw_channels = ctx->fbw_channels;
  695. int channel_mode = ctx->channel_mode;
  696. int i, bnd, seg, ch;
  697. GetBitContext *gb = &ctx->gb;
  698. uint8_t bit_alloc_stages[AC3_MAX_CHANNELS];
  699. int any_block_switching = 0;
  700. int num_channels_bak, fbw_channels_bak;
  701. memset(bit_alloc_stages, 0, AC3_MAX_CHANNELS);
  702. /* block switch flags */
  703. for (ch = 1; ch <= fbw_channels; ch++) {
  704. ctx->block_switch[ch] = get_bits1(gb);
  705. any_block_switching |= ctx->block_switch[ch];
  706. }
  707. /* dithering flags */
  708. ctx->dither_all = 1;
  709. for (ch = 1; ch <= fbw_channels; ch++) {
  710. ctx->dither_flag[ch] = get_bits1(gb);
  711. if(!ctx->dither_flag[ch])
  712. ctx->dither_all = 0;
  713. }
  714. /* dynamic range */
  715. i = !(ctx->channel_mode);
  716. do {
  717. if(get_bits1(gb)) {
  718. ctx->dynamic_range[i] = dynamic_range_tab[get_bits(gb, 8)];
  719. } else if(blk == 0) {
  720. ctx->dynamic_range[i] = 1.0f;
  721. }
  722. } while(i--);
  723. /* coupling strategy */
  724. if (get_bits1(gb)) {
  725. memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
  726. ctx->cpl_in_use = get_bits1(gb);
  727. if (ctx->cpl_in_use) {
  728. /* coupling in use */
  729. int cpl_begin_freq, cpl_end_freq;
  730. /* determine which channels are coupled */
  731. for (ch = 1; ch <= fbw_channels; ch++)
  732. ctx->channel_in_cpl[ch] = get_bits1(gb);
  733. /* phase flags in use */
  734. if (channel_mode == AC3_CHMODE_STEREO)
  735. ctx->phase_flags_in_use = get_bits1(gb);
  736. /* coupling frequency range and band structure */
  737. cpl_begin_freq = get_bits(gb, 4);
  738. cpl_end_freq = get_bits(gb, 4);
  739. if (3 + cpl_end_freq - cpl_begin_freq < 0) {
  740. av_log(ctx->avctx, AV_LOG_ERROR, "3+cplendf = %d < cplbegf = %d\n", 3+cpl_end_freq, cpl_begin_freq);
  741. return -1;
  742. }
  743. ctx->num_cpl_bands = ctx->num_cpl_subbands = 3 + cpl_end_freq - cpl_begin_freq;
  744. ctx->start_freq[CPL_CH] = cpl_begin_freq * 12 + 37;
  745. ctx->end_freq[CPL_CH] = cpl_end_freq * 12 + 73;
  746. for (bnd = 0; bnd < ctx->num_cpl_subbands - 1; bnd++) {
  747. if (get_bits1(gb)) {
  748. ctx->cpl_band_struct[bnd] = 1;
  749. ctx->num_cpl_bands--;
  750. }
  751. }
  752. } else {
  753. /* coupling not in use */
  754. for (ch = 1; ch <= fbw_channels; ch++)
  755. ctx->channel_in_cpl[ch] = 0;
  756. }
  757. }
  758. /* coupling coordinates */
  759. if (ctx->cpl_in_use) {
  760. int cpl_coords_exist = 0;
  761. for (ch = 1; ch <= fbw_channels; ch++) {
  762. if (ctx->channel_in_cpl[ch]) {
  763. if (get_bits1(gb)) {
  764. int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
  765. cpl_coords_exist = 1;
  766. master_cpl_coord = 3 * get_bits(gb, 2);
  767. for (bnd = 0; bnd < ctx->num_cpl_bands; bnd++) {
  768. cpl_coord_exp = get_bits(gb, 4);
  769. cpl_coord_mant = get_bits(gb, 4);
  770. if (cpl_coord_exp == 15)
  771. ctx->cpl_coords[ch][bnd] = cpl_coord_mant / 16.0f;
  772. else
  773. ctx->cpl_coords[ch][bnd] = (cpl_coord_mant + 16.0f) / 32.0f;
  774. ctx->cpl_coords[ch][bnd] *= scale_factors[cpl_coord_exp + master_cpl_coord];
  775. }
  776. }
  777. }
  778. }
  779. /* phase flags */
  780. if (channel_mode == AC3_CHMODE_STEREO && ctx->phase_flags_in_use && cpl_coords_exist) {
  781. for (bnd = 0; bnd < ctx->num_cpl_bands; bnd++) {
  782. if (get_bits1(gb))
  783. ctx->cpl_coords[2][bnd] = -ctx->cpl_coords[2][bnd];
  784. }
  785. }
  786. }
  787. /* stereo rematrixing strategy and band structure */
  788. if (channel_mode == AC3_CHMODE_STEREO) {
  789. ctx->rematrixing_strategy = get_bits1(gb);
  790. if (ctx->rematrixing_strategy) {
  791. ctx->num_rematrixing_bands = 4;
  792. if(ctx->cpl_in_use && ctx->start_freq[CPL_CH] <= 61)
  793. ctx->num_rematrixing_bands -= 1 + (ctx->start_freq[CPL_CH] == 37);
  794. for(bnd=0; bnd<ctx->num_rematrixing_bands; bnd++)
  795. ctx->rematrixing_flags[bnd] = get_bits1(gb);
  796. }
  797. }
  798. /* exponent strategies for each channel */
  799. ctx->exp_strategy[CPL_CH] = EXP_REUSE;
  800. ctx->exp_strategy[ctx->lfe_ch] = EXP_REUSE;
  801. for (ch = !ctx->cpl_in_use; ch <= ctx->channels; ch++) {
  802. if(ch == ctx->lfe_ch)
  803. ctx->exp_strategy[ch] = get_bits(gb, 1);
  804. else
  805. ctx->exp_strategy[ch] = get_bits(gb, 2);
  806. if(ctx->exp_strategy[ch] != EXP_REUSE)
  807. bit_alloc_stages[ch] = 3;
  808. }
  809. /* channel bandwidth */
  810. for (ch = 1; ch <= fbw_channels; ch++) {
  811. ctx->start_freq[ch] = 0;
  812. if (ctx->exp_strategy[ch] != EXP_REUSE) {
  813. int prev = ctx->end_freq[ch];
  814. if (ctx->channel_in_cpl[ch])
  815. ctx->end_freq[ch] = ctx->start_freq[CPL_CH];
  816. else {
  817. int bandwidth_code = get_bits(gb, 6);
  818. if (bandwidth_code > 60) {
  819. av_log(ctx->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60", bandwidth_code);
  820. return -1;
  821. }
  822. ctx->end_freq[ch] = bandwidth_code * 3 + 73;
  823. }
  824. if(blk > 0 && ctx->end_freq[ch] != prev)
  825. memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
  826. }
  827. }
  828. ctx->start_freq[ctx->lfe_ch] = 0;
  829. ctx->end_freq[ctx->lfe_ch] = 7;
  830. /* decode exponents for each channel */
  831. for (ch = !ctx->cpl_in_use; ch <= ctx->channels; ch++) {
  832. if (ctx->exp_strategy[ch] != EXP_REUSE) {
  833. int group_size, num_groups;
  834. group_size = 3 << (ctx->exp_strategy[ch] - 1);
  835. if(ch == CPL_CH)
  836. num_groups = (ctx->end_freq[ch] - ctx->start_freq[ch]) / group_size;
  837. else if(ch == ctx->lfe_ch)
  838. num_groups = 2;
  839. else
  840. num_groups = (ctx->end_freq[ch] + group_size - 4) / group_size;
  841. ctx->dexps[ch][0] = get_bits(gb, 4) << !ch;
  842. decode_exponents(gb, ctx->exp_strategy[ch], num_groups, ctx->dexps[ch][0],
  843. &ctx->dexps[ch][ctx->start_freq[ch]+!!ch]);
  844. if(ch != CPL_CH && ch != ctx->lfe_ch)
  845. skip_bits(gb, 2); /* skip gainrng */
  846. }
  847. }
  848. /* bit allocation information */
  849. if (get_bits1(gb)) {
  850. ctx->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gb, 2)] >> ctx->bit_alloc_params.sr_shift;
  851. ctx->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gb, 2)] >> ctx->bit_alloc_params.sr_shift;
  852. ctx->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gb, 2)];
  853. ctx->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gb, 2)];
  854. ctx->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gb, 3)];
  855. for(ch=!ctx->cpl_in_use; ch<=ctx->channels; ch++) {
  856. bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
  857. }
  858. }
  859. /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
  860. if (get_bits1(gb)) {
  861. int csnr;
  862. csnr = (get_bits(gb, 6) - 15) << 4;
  863. for (ch = !ctx->cpl_in_use; ch <= ctx->channels; ch++) { /* snr offset and fast gain */
  864. ctx->snr_offset[ch] = (csnr + get_bits(gb, 4)) << 2;
  865. ctx->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gb, 3)];
  866. }
  867. memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
  868. }
  869. /* coupling leak information */
  870. if (ctx->cpl_in_use && get_bits1(gb)) {
  871. ctx->bit_alloc_params.cpl_fast_leak = get_bits(gb, 3);
  872. ctx->bit_alloc_params.cpl_slow_leak = get_bits(gb, 3);
  873. bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
  874. }
  875. /* delta bit allocation information */
  876. if (get_bits1(gb)) {
  877. /* delta bit allocation exists (strategy) */
  878. for (ch = !ctx->cpl_in_use; ch <= fbw_channels; ch++) {
  879. ctx->dba_mode[ch] = get_bits(gb, 2);
  880. if (ctx->dba_mode[ch] == DBA_RESERVED) {
  881. av_log(ctx->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
  882. return -1;
  883. }
  884. bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
  885. }
  886. /* channel delta offset, len and bit allocation */
  887. for (ch = !ctx->cpl_in_use; ch <= fbw_channels; ch++) {
  888. if (ctx->dba_mode[ch] == DBA_NEW) {
  889. ctx->dba_nsegs[ch] = get_bits(gb, 3);
  890. for (seg = 0; seg <= ctx->dba_nsegs[ch]; seg++) {
  891. ctx->dba_offsets[ch][seg] = get_bits(gb, 5);
  892. ctx->dba_lengths[ch][seg] = get_bits(gb, 4);
  893. ctx->dba_values[ch][seg] = get_bits(gb, 3);
  894. }
  895. }
  896. }
  897. } else if(blk == 0) {
  898. for(ch=0; ch<=ctx->channels; ch++) {
  899. ctx->dba_mode[ch] = DBA_NONE;
  900. }
  901. }
  902. /* Bit allocation */
  903. for(ch=!ctx->cpl_in_use; ch<=ctx->channels; ch++) {
  904. if(bit_alloc_stages[ch] > 2) {
  905. /* Exponent mapping into PSD and PSD integration */
  906. ff_ac3_bit_alloc_calc_psd(ctx->dexps[ch],
  907. ctx->start_freq[ch], ctx->end_freq[ch],
  908. ctx->psd[ch], ctx->band_psd[ch]);
  909. }
  910. if(bit_alloc_stages[ch] > 1) {
  911. /* Compute excitation function, Compute masking curve, and
  912. Apply delta bit allocation */
  913. ff_ac3_bit_alloc_calc_mask(&ctx->bit_alloc_params, ctx->band_psd[ch],
  914. ctx->start_freq[ch], ctx->end_freq[ch],
  915. ctx->fast_gain[ch], (ch == ctx->lfe_ch),
  916. ctx->dba_mode[ch], ctx->dba_nsegs[ch],
  917. ctx->dba_offsets[ch], ctx->dba_lengths[ch],
  918. ctx->dba_values[ch], ctx->mask[ch]);
  919. }
  920. if(bit_alloc_stages[ch] > 0) {
  921. /* Compute bit allocation */
  922. ff_ac3_bit_alloc_calc_bap(ctx->mask[ch], ctx->psd[ch],
  923. ctx->start_freq[ch], ctx->end_freq[ch],
  924. ctx->snr_offset[ch],
  925. ctx->bit_alloc_params.floor,
  926. ctx->bap[ch]);
  927. }
  928. }
  929. /* unused dummy data */
  930. if (get_bits1(gb)) {
  931. int skipl = get_bits(gb, 9);
  932. while(skipl--)
  933. skip_bits(gb, 8);
  934. }
  935. /* unpack the transform coefficients
  936. this also uncouples channels if coupling is in use. */
  937. if (get_transform_coeffs(ctx)) {
  938. av_log(ctx->avctx, AV_LOG_ERROR, "Error in routine get_transform_coeffs\n");
  939. return -1;
  940. }
  941. /* recover coefficients if rematrixing is in use */
  942. if(ctx->channel_mode == AC3_CHMODE_STEREO)
  943. do_rematrixing(ctx);
  944. /* apply scaling to coefficients (headroom, dialnorm, dynrng) */
  945. for(ch=1; ch<=ctx->channels; ch++) {
  946. float gain = 2.0f * ctx->mul_bias;
  947. if(ctx->channel_mode == AC3_CHMODE_DUALMONO) {
  948. gain *= ctx->dialog_norm[ch-1] * ctx->dynamic_range[ch-1];
  949. } else {
  950. gain *= ctx->dialog_norm[0] * ctx->dynamic_range[0];
  951. }
  952. for(i=0; i<ctx->end_freq[ch]; i++) {
  953. ctx->transform_coeffs[ch][i] *= gain;
  954. }
  955. }
  956. /* if no block switching is used, downmixing can be done before IMDCT */
  957. num_channels_bak = ctx->channels;
  958. fbw_channels_bak = ctx->fbw_channels;
  959. if(!any_block_switching) {
  960. if(ctx->channels != ctx->out_channels && !((ctx->output_mode & AC3_OUTPUT_LFEON) &&
  961. ctx->fbw_channels == ctx->out_channels)) {
  962. ac3_downmix(ctx->transform_coeffs, ctx->fbw_channels,
  963. ctx->output_mode, ctx->downmix_coeffs, 1);
  964. ctx->channels = ctx->out_channels;
  965. ctx->fbw_channels = ctx->channels - (ctx->output_mode & AC3_OUTPUT_LFEON);
  966. }
  967. }
  968. do_imdct(ctx);
  969. /* downmix output now if it wasn't done before IMDCT */
  970. if(ctx->channels != ctx->out_channels && !((ctx->output_mode & AC3_OUTPUT_LFEON) &&
  971. ctx->fbw_channels == ctx->out_channels)) {
  972. ac3_downmix(ctx->output, ctx->fbw_channels, ctx->output_mode,
  973. ctx->downmix_coeffs, 0);
  974. }
  975. /* convert float to 16-bit integer */
  976. for(ch=0; ch<ctx->out_channels; ch++) {
  977. for(i=0; i<256; i++) {
  978. ctx->output[ch][i] += ctx->add_bias;
  979. }
  980. ctx->dsp.float_to_int16(ctx->int_output[ch], ctx->output[ch], 256);
  981. }
  982. ctx->channels = num_channels_bak;
  983. ctx->fbw_channels = fbw_channels_bak;
  984. return 0;
  985. }
  986. /**
  987. * Decode a single AC-3 frame.
  988. */
  989. static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, uint8_t *buf, int buf_size)
  990. {
  991. AC3DecodeContext *ctx = (AC3DecodeContext *)avctx->priv_data;
  992. int16_t *out_samples = (int16_t *)data;
  993. int i, blk, ch, err;
  994. /* initialize the GetBitContext with the start of valid AC-3 Frame */
  995. init_get_bits(&ctx->gb, buf, buf_size * 8);
  996. /* parse the syncinfo */
  997. err = ac3_parse_header(ctx);
  998. if(err) {
  999. switch(err) {
  1000. case AC3_PARSE_ERROR_SYNC:
  1001. av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
  1002. break;
  1003. case AC3_PARSE_ERROR_BSID:
  1004. av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
  1005. break;
  1006. case AC3_PARSE_ERROR_SAMPLE_RATE:
  1007. av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
  1008. break;
  1009. case AC3_PARSE_ERROR_FRAME_SIZE:
  1010. av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
  1011. break;
  1012. default:
  1013. av_log(avctx, AV_LOG_ERROR, "invalid header\n");
  1014. break;
  1015. }
  1016. return -1;
  1017. }
  1018. avctx->sample_rate = ctx->sampling_rate;
  1019. avctx->bit_rate = ctx->bit_rate;
  1020. /* check that reported frame size fits in input buffer */
  1021. if(ctx->frame_size > buf_size) {
  1022. av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
  1023. return -1;
  1024. }
  1025. /* channel config */
  1026. ctx->out_channels = ctx->channels;
  1027. if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
  1028. avctx->request_channels < ctx->channels) {
  1029. ctx->out_channels = avctx->request_channels;
  1030. ctx->output_mode = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
  1031. }
  1032. avctx->channels = ctx->out_channels;
  1033. /* parse the audio blocks */
  1034. for (blk = 0; blk < NB_BLOCKS; blk++) {
  1035. if (ac3_parse_audio_block(ctx, blk)) {
  1036. av_log(avctx, AV_LOG_ERROR, "error parsing the audio block\n");
  1037. *data_size = 0;
  1038. return ctx->frame_size;
  1039. }
  1040. for (i = 0; i < 256; i++)
  1041. for (ch = 0; ch < ctx->out_channels; ch++)
  1042. *(out_samples++) = ctx->int_output[ch][i];
  1043. }
  1044. *data_size = NB_BLOCKS * 256 * avctx->channels * sizeof (int16_t);
  1045. return ctx->frame_size;
  1046. }
  1047. /**
  1048. * Uninitialize the AC-3 decoder.
  1049. */
  1050. static int ac3_decode_end(AVCodecContext *avctx)
  1051. {
  1052. AC3DecodeContext *ctx = (AC3DecodeContext *)avctx->priv_data;
  1053. ff_mdct_end(&ctx->imdct_512);
  1054. ff_mdct_end(&ctx->imdct_256);
  1055. return 0;
  1056. }
  1057. AVCodec ac3_decoder = {
  1058. .name = "ac3",
  1059. .type = CODEC_TYPE_AUDIO,
  1060. .id = CODEC_ID_AC3,
  1061. .priv_data_size = sizeof (AC3DecodeContext),
  1062. .init = ac3_decode_init,
  1063. .close = ac3_decode_end,
  1064. .decode = ac3_decode_frame,
  1065. };