Partially revert r20233, exp2f is not available on some BSDs, DOS and AVR32.
[FFMpeg-mirror/lagarith.git] / libavcodec / eac3dec.c
blob3784ccfb1db960eb51e9cca9414eb47f97115c96
1 /*
2 * E-AC-3 decoder
3 * Copyright (c) 2007 Bartlomiej Wolowiec <bartek.wolowiec@gmail.com>
4 * Copyright (c) 2008 Justin Ruggles
6 * This file is part of FFmpeg.
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * There are several features of E-AC-3 that this decoder does not yet support.
26 * Spectral Extension
27 * There is a patch to get this working for the two samples we have that
28 * use it, but it needs some minor changes in order to be accepted.
30 * Enhanced Coupling
31 * No known samples exist. If any ever surface, this feature should not be
32 * too difficult to implement.
34 * Reduced Sample Rates
35 * No known samples exist. The spec also does not give clear information
36 * on how this is to be implemented.
38 * Dependent Streams
39 * Only the independent stream is currently decoded. Any dependent
40 * streams are skipped. We have only come across two examples of this, and
41 * they are both just test streams, one for HD-DVD and the other for
42 * Blu-ray.
44 * Transient Pre-noise Processing
45 * This is side information which a decoder should use to reduce artifacts
46 * caused by transients. There are samples which are known to have this
47 * information, but this decoder currently ignores it.
51 #include "avcodec.h"
52 #include "internal.h"
53 #include "aac_ac3_parser.h"
54 #include "ac3.h"
55 #include "ac3_parser.h"
56 #include "ac3dec.h"
57 #include "ac3dec_data.h"
58 #include "eac3dec_data.h"
60 /** gain adaptive quantization mode */
61 typedef enum {
62 EAC3_GAQ_NO =0,
63 EAC3_GAQ_12,
64 EAC3_GAQ_14,
65 EAC3_GAQ_124
66 } EAC3GaqMode;
68 #define EAC3_SR_CODE_REDUCED 3
70 /** lrint(M_SQRT2*cos(2*M_PI/12)*(1<<23)) */
71 #define COEFF_0 10273905LL
73 /** lrint(M_SQRT2*cos(0*M_PI/12)*(1<<23)) = lrint(M_SQRT2*(1<<23)) */
74 #define COEFF_1 11863283LL
76 /** lrint(M_SQRT2*cos(5*M_PI/12)*(1<<23)) */
77 #define COEFF_2 3070444LL
79 /**
80 * Calculate 6-point IDCT of the pre-mantissas.
81 * All calculations are 24-bit fixed-point.
83 static void idct6(int pre_mant[6])
85 int tmp;
86 int even0, even1, even2, odd0, odd1, odd2;
88 odd1 = pre_mant[1] - pre_mant[3] - pre_mant[5];
90 even2 = ( pre_mant[2] * COEFF_0) >> 23;
91 tmp = ( pre_mant[4] * COEFF_1) >> 23;
92 odd0 = ((pre_mant[1] + pre_mant[5]) * COEFF_2) >> 23;
94 even0 = pre_mant[0] + (tmp >> 1);
95 even1 = pre_mant[0] - tmp;
97 tmp = even0;
98 even0 = tmp + even2;
99 even2 = tmp - even2;
101 tmp = odd0;
102 odd0 = tmp + pre_mant[1] + pre_mant[3];
103 odd2 = tmp + pre_mant[5] - pre_mant[3];
105 pre_mant[0] = even0 + odd0;
106 pre_mant[1] = even1 + odd1;
107 pre_mant[2] = even2 + odd2;
108 pre_mant[3] = even2 - odd2;
109 pre_mant[4] = even1 - odd1;
110 pre_mant[5] = even0 - odd0;
113 void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
115 int bin, blk, gs;
116 int end_bap, gaq_mode;
117 GetBitContext *gbc = &s->gbc;
118 int gaq_gain[AC3_MAX_COEFS];
120 gaq_mode = get_bits(gbc, 2);
121 end_bap = (gaq_mode < 2) ? 12 : 17;
123 /* if GAQ gain is used, decode gain codes for bins with hebap between
124 8 and end_bap */
125 gs = 0;
126 if (gaq_mode == EAC3_GAQ_12 || gaq_mode == EAC3_GAQ_14) {
127 /* read 1-bit GAQ gain codes */
128 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
129 if (s->bap[ch][bin] > 7 && s->bap[ch][bin] < end_bap)
130 gaq_gain[gs++] = get_bits1(gbc) << (gaq_mode-1);
132 } else if (gaq_mode == EAC3_GAQ_124) {
133 /* read 1.67-bit GAQ gain codes (3 codes in 5 bits) */
134 int gc = 2;
135 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
136 if (s->bap[ch][bin] > 7 && s->bap[ch][bin] < 17) {
137 if (gc++ == 2) {
138 int group_code = get_bits(gbc, 5);
139 if (group_code > 26) {
140 av_log(s->avctx, AV_LOG_WARNING, "GAQ gain group code out-of-range\n");
141 group_code = 26;
143 gaq_gain[gs++] = ff_ac3_ungroup_3_in_5_bits_tab[group_code][0];
144 gaq_gain[gs++] = ff_ac3_ungroup_3_in_5_bits_tab[group_code][1];
145 gaq_gain[gs++] = ff_ac3_ungroup_3_in_5_bits_tab[group_code][2];
146 gc = 0;
152 gs=0;
153 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
154 int hebap = s->bap[ch][bin];
155 int bits = ff_eac3_bits_vs_hebap[hebap];
156 if (!hebap) {
157 /* zero-mantissa dithering */
158 for (blk = 0; blk < 6; blk++) {
159 s->pre_mantissa[ch][bin][blk] = (av_lfg_get(&s->dith_state) & 0x7FFFFF) - 0x400000;
161 } else if (hebap < 8) {
162 /* Vector Quantization */
163 int v = get_bits(gbc, bits);
164 for (blk = 0; blk < 6; blk++) {
165 s->pre_mantissa[ch][bin][blk] = ff_eac3_mantissa_vq[hebap][v][blk] << 8;
167 } else {
168 /* Gain Adaptive Quantization */
169 int gbits, log_gain;
170 if (gaq_mode != EAC3_GAQ_NO && hebap < end_bap) {
171 log_gain = gaq_gain[gs++];
172 } else {
173 log_gain = 0;
175 gbits = bits - log_gain;
177 for (blk = 0; blk < 6; blk++) {
178 int mant = get_sbits(gbc, gbits);
179 if (log_gain && mant == -(1 << (gbits-1))) {
180 /* large mantissa */
181 int b;
182 int mbits = bits - (2 - log_gain);
183 mant = get_sbits(gbc, mbits);
184 mant <<= (23 - (mbits - 1));
185 /* remap mantissa value to correct for asymmetric quantization */
186 if (mant >= 0)
187 b = 1 << (23 - log_gain);
188 else
189 b = ff_eac3_gaq_remap_2_4_b[hebap-8][log_gain-1] << 8;
190 mant += ((ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] * (int64_t)mant) >> 15) + b;
191 } else {
192 /* small mantissa, no GAQ, or Gk=1 */
193 mant <<= 24 - bits;
194 if (!log_gain) {
195 /* remap mantissa value for no GAQ or Gk=1 */
196 mant += (ff_eac3_gaq_remap_1[hebap-8] * (int64_t)mant) >> 15;
199 s->pre_mantissa[ch][bin][blk] = mant;
202 idct6(s->pre_mantissa[ch][bin]);
206 int ff_eac3_parse_header(AC3DecodeContext *s)
208 int i, blk, ch;
209 int ac3_exponent_strategy, parse_aht_info, parse_spx_atten_data;
210 int parse_transient_proc_info;
211 int num_cpl_blocks;
212 GetBitContext *gbc = &s->gbc;
214 /* An E-AC-3 stream can have multiple independent streams which the
215 application can select from. each independent stream can also contain
216 dependent streams which are used to add or replace channels. */
217 if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
218 av_log_missing_feature(s->avctx, "Dependent substream decoding", 1);
219 return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
220 } else if (s->frame_type == EAC3_FRAME_TYPE_RESERVED) {
221 av_log(s->avctx, AV_LOG_ERROR, "Reserved frame type\n");
222 return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
225 /* The substream id indicates which substream this frame belongs to. each
226 independent stream has its own substream id, and the dependent streams
227 associated to an independent stream have matching substream id's. */
228 if (s->substreamid) {
229 /* only decode substream with id=0. skip any additional substreams. */
230 av_log_missing_feature(s->avctx, "Additional substreams", 1);
231 return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
234 if (s->bit_alloc_params.sr_code == EAC3_SR_CODE_REDUCED) {
235 /* The E-AC-3 specification does not tell how to handle reduced sample
236 rates in bit allocation. The best assumption would be that it is
237 handled like AC-3 DolbyNet, but we cannot be sure until we have a
238 sample which utilizes this feature. */
239 av_log_missing_feature(s->avctx, "Reduced sampling rates", 1);
240 return -1;
242 skip_bits(gbc, 5); // skip bitstream id
244 /* volume control params */
245 for (i = 0; i < (s->channel_mode ? 1 : 2); i++) {
246 skip_bits(gbc, 5); // skip dialog normalization
247 if (get_bits1(gbc)) {
248 skip_bits(gbc, 8); // skip compression gain word
252 /* dependent stream channel map */
253 if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
254 if (get_bits1(gbc)) {
255 skip_bits(gbc, 16); // skip custom channel map
259 /* mixing metadata */
260 if (get_bits1(gbc)) {
261 /* center and surround mix levels */
262 if (s->channel_mode > AC3_CHMODE_STEREO) {
263 skip_bits(gbc, 2); // skip preferred stereo downmix mode
264 if (s->channel_mode & 1) {
265 /* if three front channels exist */
266 skip_bits(gbc, 3); //skip Lt/Rt center mix level
267 s->center_mix_level = get_bits(gbc, 3);
269 if (s->channel_mode & 4) {
270 /* if a surround channel exists */
271 skip_bits(gbc, 3); //skip Lt/Rt surround mix level
272 s->surround_mix_level = get_bits(gbc, 3);
276 /* lfe mix level */
277 if (s->lfe_on && get_bits1(gbc)) {
278 // TODO: use LFE mix level
279 skip_bits(gbc, 5); // skip LFE mix level code
282 /* info for mixing with other streams and substreams */
283 if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT) {
284 for (i = 0; i < (s->channel_mode ? 1 : 2); i++) {
285 // TODO: apply program scale factor
286 if (get_bits1(gbc)) {
287 skip_bits(gbc, 6); // skip program scale factor
290 if (get_bits1(gbc)) {
291 skip_bits(gbc, 6); // skip external program scale factor
293 /* skip mixing parameter data */
294 switch(get_bits(gbc, 2)) {
295 case 1: skip_bits(gbc, 5); break;
296 case 2: skip_bits(gbc, 12); break;
297 case 3: {
298 int mix_data_size = (get_bits(gbc, 5) + 2) << 3;
299 skip_bits_long(gbc, mix_data_size);
300 break;
303 /* skip pan information for mono or dual mono source */
304 if (s->channel_mode < AC3_CHMODE_STEREO) {
305 for (i = 0; i < (s->channel_mode ? 1 : 2); i++) {
306 if (get_bits1(gbc)) {
307 /* note: this is not in the ATSC A/52B specification
308 reference: ETSI TS 102 366 V1.1.1
309 section: E.1.3.1.25 */
310 skip_bits(gbc, 8); // skip pan mean direction index
311 skip_bits(gbc, 6); // skip reserved paninfo bits
315 /* skip mixing configuration information */
316 if (get_bits1(gbc)) {
317 for (blk = 0; blk < s->num_blocks; blk++) {
318 if (s->num_blocks == 1 || get_bits1(gbc)) {
319 skip_bits(gbc, 5);
326 /* informational metadata */
327 if (get_bits1(gbc)) {
328 skip_bits(gbc, 3); // skip bit stream mode
329 skip_bits(gbc, 2); // skip copyright bit and original bitstream bit
330 if (s->channel_mode == AC3_CHMODE_STEREO) {
331 skip_bits(gbc, 4); // skip Dolby surround and headphone mode
333 if (s->channel_mode >= AC3_CHMODE_2F2R) {
334 skip_bits(gbc, 2); // skip Dolby surround EX mode
336 for (i = 0; i < (s->channel_mode ? 1 : 2); i++) {
337 if (get_bits1(gbc)) {
338 skip_bits(gbc, 8); // skip mix level, room type, and A/D converter type
341 if (s->bit_alloc_params.sr_code != EAC3_SR_CODE_REDUCED) {
342 skip_bits1(gbc); // skip source sample rate code
346 /* converter synchronization flag
347 If frames are less than six blocks, this bit should be turned on
348 once every 6 blocks to indicate the start of a frame set.
349 reference: RFC 4598, Section 2.1.3 Frame Sets */
350 if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && s->num_blocks != 6) {
351 skip_bits1(gbc); // skip converter synchronization flag
354 /* original frame size code if this stream was converted from AC-3 */
355 if (s->frame_type == EAC3_FRAME_TYPE_AC3_CONVERT &&
356 (s->num_blocks == 6 || get_bits1(gbc))) {
357 skip_bits(gbc, 6); // skip frame size code
360 /* additional bitstream info */
361 if (get_bits1(gbc)) {
362 int addbsil = get_bits(gbc, 6);
363 for (i = 0; i < addbsil + 1; i++) {
364 skip_bits(gbc, 8); // skip additional bit stream info
368 /* audio frame syntax flags, strategy data, and per-frame data */
370 if (s->num_blocks == 6) {
371 ac3_exponent_strategy = get_bits1(gbc);
372 parse_aht_info = get_bits1(gbc);
373 } else {
374 /* less than 6 blocks, so use AC-3-style exponent strategy syntax, and
375 do not use AHT */
376 ac3_exponent_strategy = 1;
377 parse_aht_info = 0;
380 s->snr_offset_strategy = get_bits(gbc, 2);
381 parse_transient_proc_info = get_bits1(gbc);
383 s->block_switch_syntax = get_bits1(gbc);
384 if (!s->block_switch_syntax)
385 memset(s->block_switch, 0, sizeof(s->block_switch));
387 s->dither_flag_syntax = get_bits1(gbc);
388 if (!s->dither_flag_syntax) {
389 for (ch = 1; ch <= s->fbw_channels; ch++)
390 s->dither_flag[ch] = 1;
392 s->dither_flag[CPL_CH] = s->dither_flag[s->lfe_ch] = 0;
394 s->bit_allocation_syntax = get_bits1(gbc);
395 if (!s->bit_allocation_syntax) {
396 /* set default bit allocation parameters */
397 s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[2];
398 s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[1];
399 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab [1];
400 s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[2];
401 s->bit_alloc_params.floor = ff_ac3_floor_tab [7];
404 s->fast_gain_syntax = get_bits1(gbc);
405 s->dba_syntax = get_bits1(gbc);
406 s->skip_syntax = get_bits1(gbc);
407 parse_spx_atten_data = get_bits1(gbc);
409 /* coupling strategy occurance and coupling use per block */
410 num_cpl_blocks = 0;
411 if (s->channel_mode > 1) {
412 for (blk = 0; blk < s->num_blocks; blk++) {
413 s->cpl_strategy_exists[blk] = (!blk || get_bits1(gbc));
414 if (s->cpl_strategy_exists[blk]) {
415 s->cpl_in_use[blk] = get_bits1(gbc);
416 } else {
417 s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
419 num_cpl_blocks += s->cpl_in_use[blk];
421 } else {
422 memset(s->cpl_in_use, 0, sizeof(s->cpl_in_use));
425 /* exponent strategy data */
426 if (ac3_exponent_strategy) {
427 /* AC-3-style exponent strategy syntax */
428 for (blk = 0; blk < s->num_blocks; blk++) {
429 for (ch = !s->cpl_in_use[blk]; ch <= s->fbw_channels; ch++) {
430 s->exp_strategy[blk][ch] = get_bits(gbc, 2);
433 } else {
434 /* LUT-based exponent strategy syntax */
435 for (ch = !((s->channel_mode > 1) && num_cpl_blocks); ch <= s->fbw_channels; ch++) {
436 int frmchexpstr = get_bits(gbc, 5);
437 for (blk = 0; blk < 6; blk++) {
438 s->exp_strategy[blk][ch] = ff_eac3_frm_expstr[frmchexpstr][blk];
442 /* LFE exponent strategy */
443 if (s->lfe_on) {
444 for (blk = 0; blk < s->num_blocks; blk++) {
445 s->exp_strategy[blk][s->lfe_ch] = get_bits1(gbc);
448 /* original exponent strategies if this stream was converted from AC-3 */
449 if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT &&
450 (s->num_blocks == 6 || get_bits1(gbc))) {
451 skip_bits(gbc, 5 * s->fbw_channels); // skip converter channel exponent strategy
454 /* determine which channels use AHT */
455 if (parse_aht_info) {
456 /* For AHT to be used, all non-zero blocks must reuse exponents from
457 the first block. Furthermore, for AHT to be used in the coupling
458 channel, all blocks must use coupling and use the same coupling
459 strategy. */
460 s->channel_uses_aht[CPL_CH]=0;
461 for (ch = (num_cpl_blocks != 6); ch <= s->channels; ch++) {
462 int use_aht = 1;
463 for (blk = 1; blk < 6; blk++) {
464 if ((s->exp_strategy[blk][ch] != EXP_REUSE) ||
465 (!ch && s->cpl_strategy_exists[blk])) {
466 use_aht = 0;
467 break;
470 s->channel_uses_aht[ch] = use_aht && get_bits1(gbc);
472 } else {
473 memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
476 /* per-frame SNR offset */
477 if (!s->snr_offset_strategy) {
478 int csnroffst = (get_bits(gbc, 6) - 15) << 4;
479 int snroffst = (csnroffst + get_bits(gbc, 4)) << 2;
480 for (ch = 0; ch <= s->channels; ch++)
481 s->snr_offset[ch] = snroffst;
484 /* transient pre-noise processing data */
485 if (parse_transient_proc_info) {
486 for (ch = 1; ch <= s->fbw_channels; ch++) {
487 if (get_bits1(gbc)) { // channel in transient processing
488 skip_bits(gbc, 10); // skip transient processing location
489 skip_bits(gbc, 8); // skip transient processing length
494 /* spectral extension attenuation data */
495 if (parse_spx_atten_data) {
496 av_log_missing_feature(s->avctx, "Spectral extension attenuation", 1);
497 for (ch = 1; ch <= s->fbw_channels; ch++) {
498 if (get_bits1(gbc)) { // channel has spx attenuation
499 skip_bits(gbc, 5); // skip spx attenuation code
504 /* block start information */
505 if (s->num_blocks > 1 && get_bits1(gbc)) {
506 /* reference: Section E2.3.2.27
507 nblkstrtbits = (numblks - 1) * (4 + ceiling(log2(words_per_frame)))
508 The spec does not say what this data is or what it's used for.
509 It is likely the offset of each block within the frame. */
510 int block_start_bits = (s->num_blocks-1) * (4 + av_log2(s->frame_size-2));
511 skip_bits_long(gbc, block_start_bits);
512 av_log_missing_feature(s->avctx, "Block start info", 1);
515 /* syntax state initialization */
516 for (ch = 1; ch <= s->fbw_channels; ch++) {
517 s->first_cpl_coords[ch] = 1;
519 s->first_cpl_leak = 1;
521 return 0;