annotate ffmpeg/libavcodec/ac3dec.c @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents 6840f77b83aa
children
rev   line source
yading@10 1 /*
yading@10 2 * AC-3 Audio Decoder
yading@10 3 * This code was developed as part of Google Summer of Code 2006.
yading@10 4 * E-AC-3 support was added as part of Google Summer of Code 2007.
yading@10 5 *
yading@10 6 * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com)
yading@10 7 * Copyright (c) 2007-2008 Bartlomiej Wolowiec <bartek.wolowiec@gmail.com>
yading@10 8 * Copyright (c) 2007 Justin Ruggles <justin.ruggles@gmail.com>
yading@10 9 *
yading@10 10 * This file is part of FFmpeg.
yading@10 11 *
yading@10 12 * FFmpeg is free software; you can redistribute it and/or
yading@10 13 * modify it under the terms of the GNU Lesser General Public
yading@10 14 * License as published by the Free Software Foundation; either
yading@10 15 * version 2.1 of the License, or (at your option) any later version.
yading@10 16 *
yading@10 17 * FFmpeg is distributed in the hope that it will be useful,
yading@10 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@10 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@10 20 * Lesser General Public License for more details.
yading@10 21 *
yading@10 22 * You should have received a copy of the GNU Lesser General Public
yading@10 23 * License along with FFmpeg; if not, write to the Free Software
yading@10 24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@10 25 */
yading@10 26
yading@10 27 #include <stdio.h>
yading@10 28 #include <stddef.h>
yading@10 29 #include <math.h>
yading@10 30 #include <string.h>
yading@10 31
yading@10 32 #include "libavutil/crc.h"
yading@10 33 #include "libavutil/opt.h"
yading@10 34 #include "internal.h"
yading@10 35 #include "aac_ac3_parser.h"
yading@10 36 #include "ac3_parser.h"
yading@10 37 #include "ac3dec.h"
yading@10 38 #include "ac3dec_data.h"
yading@10 39 #include "kbdwin.h"
yading@10 40
yading@10 41 /**
yading@10 42 * table for ungrouping 3 values in 7 bits.
yading@10 43 * used for exponents and bap=2 mantissas
yading@10 44 */
yading@10 45 static uint8_t ungroup_3_in_7_bits_tab[128][3];
yading@10 46
yading@10 47 /** tables for ungrouping mantissas */
yading@10 48 static int b1_mantissas[32][3];
yading@10 49 static int b2_mantissas[128][3];
yading@10 50 static int b3_mantissas[8];
yading@10 51 static int b4_mantissas[128][2];
yading@10 52 static int b5_mantissas[16];
yading@10 53
yading@10 54 /**
yading@10 55 * Quantization table: levels for symmetric. bits for asymmetric.
yading@10 56 * reference: Table 7.18 Mapping of bap to Quantizer
yading@10 57 */
yading@10 58 static const uint8_t quantization_tab[16] = {
yading@10 59 0, 3, 5, 7, 11, 15,
yading@10 60 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
yading@10 61 };
yading@10 62
yading@10 63 /** dynamic range table. converts codes to scale factors. */
yading@10 64 static float dynamic_range_tab[256];
yading@10 65
yading@10 66 /** Adjustments in dB gain */
yading@10 67 static const float gain_levels[9] = {
yading@10 68 LEVEL_PLUS_3DB,
yading@10 69 LEVEL_PLUS_1POINT5DB,
yading@10 70 LEVEL_ONE,
yading@10 71 LEVEL_MINUS_1POINT5DB,
yading@10 72 LEVEL_MINUS_3DB,
yading@10 73 LEVEL_MINUS_4POINT5DB,
yading@10 74 LEVEL_MINUS_6DB,
yading@10 75 LEVEL_ZERO,
yading@10 76 LEVEL_MINUS_9DB
yading@10 77 };
yading@10 78
yading@10 79 /**
yading@10 80 * Table for default stereo downmixing coefficients
yading@10 81 * reference: Section 7.8.2 Downmixing Into Two Channels
yading@10 82 */
yading@10 83 static const uint8_t ac3_default_coeffs[8][5][2] = {
yading@10 84 { { 2, 7 }, { 7, 2 }, },
yading@10 85 { { 4, 4 }, },
yading@10 86 { { 2, 7 }, { 7, 2 }, },
yading@10 87 { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
yading@10 88 { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
yading@10 89 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
yading@10 90 { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
yading@10 91 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
yading@10 92 };
yading@10 93
yading@10 94 /**
yading@10 95 * Symmetrical Dequantization
yading@10 96 * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
yading@10 97 * Tables 7.19 to 7.23
yading@10 98 */
yading@10 99 static inline int
yading@10 100 symmetric_dequant(int code, int levels)
yading@10 101 {
yading@10 102 return ((code - (levels >> 1)) << 24) / levels;
yading@10 103 }
yading@10 104
yading@10 105 /*
yading@10 106 * Initialize tables at runtime.
yading@10 107 */
yading@10 108 static av_cold void ac3_tables_init(void)
yading@10 109 {
yading@10 110 int i;
yading@10 111
yading@10 112 /* generate table for ungrouping 3 values in 7 bits
yading@10 113 reference: Section 7.1.3 Exponent Decoding */
yading@10 114 for (i = 0; i < 128; i++) {
yading@10 115 ungroup_3_in_7_bits_tab[i][0] = i / 25;
yading@10 116 ungroup_3_in_7_bits_tab[i][1] = (i % 25) / 5;
yading@10 117 ungroup_3_in_7_bits_tab[i][2] = (i % 25) % 5;
yading@10 118 }
yading@10 119
yading@10 120 /* generate grouped mantissa tables
yading@10 121 reference: Section 7.3.5 Ungrouping of Mantissas */
yading@10 122 for (i = 0; i < 32; i++) {
yading@10 123 /* bap=1 mantissas */
yading@10 124 b1_mantissas[i][0] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][0], 3);
yading@10 125 b1_mantissas[i][1] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][1], 3);
yading@10 126 b1_mantissas[i][2] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][2], 3);
yading@10 127 }
yading@10 128 for (i = 0; i < 128; i++) {
yading@10 129 /* bap=2 mantissas */
yading@10 130 b2_mantissas[i][0] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][0], 5);
yading@10 131 b2_mantissas[i][1] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][1], 5);
yading@10 132 b2_mantissas[i][2] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][2], 5);
yading@10 133
yading@10 134 /* bap=4 mantissas */
yading@10 135 b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
yading@10 136 b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
yading@10 137 }
yading@10 138 /* generate ungrouped mantissa tables
yading@10 139 reference: Tables 7.21 and 7.23 */
yading@10 140 for (i = 0; i < 7; i++) {
yading@10 141 /* bap=3 mantissas */
yading@10 142 b3_mantissas[i] = symmetric_dequant(i, 7);
yading@10 143 }
yading@10 144 for (i = 0; i < 15; i++) {
yading@10 145 /* bap=5 mantissas */
yading@10 146 b5_mantissas[i] = symmetric_dequant(i, 15);
yading@10 147 }
yading@10 148
yading@10 149 /* generate dynamic range table
yading@10 150 reference: Section 7.7.1 Dynamic Range Control */
yading@10 151 for (i = 0; i < 256; i++) {
yading@10 152 int v = (i >> 5) - ((i >> 7) << 3) - 5;
yading@10 153 dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
yading@10 154 }
yading@10 155 }
yading@10 156
yading@10 157 /**
yading@10 158 * AVCodec initialization
yading@10 159 */
yading@10 160 static av_cold int ac3_decode_init(AVCodecContext *avctx)
yading@10 161 {
yading@10 162 AC3DecodeContext *s = avctx->priv_data;
yading@10 163 int i;
yading@10 164
yading@10 165 s->avctx = avctx;
yading@10 166
yading@10 167 ff_ac3_common_init();
yading@10 168 ac3_tables_init();
yading@10 169 ff_mdct_init(&s->imdct_256, 8, 1, 1.0);
yading@10 170 ff_mdct_init(&s->imdct_512, 9, 1, 1.0);
yading@10 171 ff_kbd_window_init(s->window, 5.0, 256);
yading@10 172 ff_dsputil_init(&s->dsp, avctx);
yading@10 173 avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
yading@10 174 ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT);
yading@10 175 ff_fmt_convert_init(&s->fmt_conv, avctx);
yading@10 176 av_lfg_init(&s->dith_state, 0);
yading@10 177
yading@10 178 avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
yading@10 179
yading@10 180 /* allow downmixing to stereo or mono */
yading@10 181 if (avctx->channels > 0 && avctx->request_channels > 0 &&
yading@10 182 avctx->request_channels < avctx->channels &&
yading@10 183 avctx->request_channels <= 2) {
yading@10 184 avctx->channels = avctx->request_channels;
yading@10 185 }
yading@10 186 s->downmixed = 1;
yading@10 187
yading@10 188 for (i = 0; i < AC3_MAX_CHANNELS; i++) {
yading@10 189 s->xcfptr[i] = s->transform_coeffs[i];
yading@10 190 s->dlyptr[i] = s->delay[i];
yading@10 191 }
yading@10 192
yading@10 193 return 0;
yading@10 194 }
yading@10 195
yading@10 196 /**
yading@10 197 * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
yading@10 198 * GetBitContext within AC3DecodeContext must point to
yading@10 199 * the start of the synchronized AC-3 bitstream.
yading@10 200 */
yading@10 201 static int ac3_parse_header(AC3DecodeContext *s)
yading@10 202 {
yading@10 203 GetBitContext *gbc = &s->gbc;
yading@10 204 int i;
yading@10 205
yading@10 206 /* read the rest of the bsi. read twice for dual mono mode. */
yading@10 207 i = !s->channel_mode;
yading@10 208 do {
yading@10 209 skip_bits(gbc, 5); // skip dialog normalization
yading@10 210 if (get_bits1(gbc))
yading@10 211 skip_bits(gbc, 8); //skip compression
yading@10 212 if (get_bits1(gbc))
yading@10 213 skip_bits(gbc, 8); //skip language code
yading@10 214 if (get_bits1(gbc))
yading@10 215 skip_bits(gbc, 7); //skip audio production information
yading@10 216 } while (i--);
yading@10 217
yading@10 218 skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
yading@10 219
yading@10 220 /* skip the timecodes (or extra bitstream information for Alternate Syntax)
yading@10 221 TODO: read & use the xbsi1 downmix levels */
yading@10 222 if (get_bits1(gbc))
yading@10 223 skip_bits(gbc, 14); //skip timecode1 / xbsi1
yading@10 224 if (get_bits1(gbc))
yading@10 225 skip_bits(gbc, 14); //skip timecode2 / xbsi2
yading@10 226
yading@10 227 /* skip additional bitstream info */
yading@10 228 if (get_bits1(gbc)) {
yading@10 229 i = get_bits(gbc, 6);
yading@10 230 do {
yading@10 231 skip_bits(gbc, 8);
yading@10 232 } while (i--);
yading@10 233 }
yading@10 234
yading@10 235 return 0;
yading@10 236 }
yading@10 237
yading@10 238 /**
yading@10 239 * Common function to parse AC-3 or E-AC-3 frame header
yading@10 240 */
yading@10 241 static int parse_frame_header(AC3DecodeContext *s)
yading@10 242 {
yading@10 243 AC3HeaderInfo hdr;
yading@10 244 int err;
yading@10 245
yading@10 246 err = avpriv_ac3_parse_header(&s->gbc, &hdr);
yading@10 247 if (err)
yading@10 248 return err;
yading@10 249
yading@10 250 /* get decoding parameters from header info */
yading@10 251 s->bit_alloc_params.sr_code = hdr.sr_code;
yading@10 252 s->bitstream_mode = hdr.bitstream_mode;
yading@10 253 s->channel_mode = hdr.channel_mode;
yading@10 254 s->channel_layout = hdr.channel_layout;
yading@10 255 s->lfe_on = hdr.lfe_on;
yading@10 256 s->bit_alloc_params.sr_shift = hdr.sr_shift;
yading@10 257 s->sample_rate = hdr.sample_rate;
yading@10 258 s->bit_rate = hdr.bit_rate;
yading@10 259 s->channels = hdr.channels;
yading@10 260 s->fbw_channels = s->channels - s->lfe_on;
yading@10 261 s->lfe_ch = s->fbw_channels + 1;
yading@10 262 s->frame_size = hdr.frame_size;
yading@10 263 s->center_mix_level = hdr.center_mix_level;
yading@10 264 s->surround_mix_level = hdr.surround_mix_level;
yading@10 265 s->num_blocks = hdr.num_blocks;
yading@10 266 s->frame_type = hdr.frame_type;
yading@10 267 s->substreamid = hdr.substreamid;
yading@10 268
yading@10 269 if (s->lfe_on) {
yading@10 270 s->start_freq[s->lfe_ch] = 0;
yading@10 271 s->end_freq[s->lfe_ch] = 7;
yading@10 272 s->num_exp_groups[s->lfe_ch] = 2;
yading@10 273 s->channel_in_cpl[s->lfe_ch] = 0;
yading@10 274 }
yading@10 275
yading@10 276 if (hdr.bitstream_id <= 10) {
yading@10 277 s->eac3 = 0;
yading@10 278 s->snr_offset_strategy = 2;
yading@10 279 s->block_switch_syntax = 1;
yading@10 280 s->dither_flag_syntax = 1;
yading@10 281 s->bit_allocation_syntax = 1;
yading@10 282 s->fast_gain_syntax = 0;
yading@10 283 s->first_cpl_leak = 0;
yading@10 284 s->dba_syntax = 1;
yading@10 285 s->skip_syntax = 1;
yading@10 286 memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
yading@10 287 return ac3_parse_header(s);
yading@10 288 } else if (CONFIG_EAC3_DECODER) {
yading@10 289 s->eac3 = 1;
yading@10 290 return ff_eac3_parse_header(s);
yading@10 291 } else {
yading@10 292 av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
yading@10 293 return -1;
yading@10 294 }
yading@10 295 }
yading@10 296
yading@10 297 /**
yading@10 298 * Set stereo downmixing coefficients based on frame header info.
yading@10 299 * reference: Section 7.8.2 Downmixing Into Two Channels
yading@10 300 */
yading@10 301 static void set_downmix_coeffs(AC3DecodeContext *s)
yading@10 302 {
yading@10 303 int i;
yading@10 304 float cmix = gain_levels[s-> center_mix_level];
yading@10 305 float smix = gain_levels[s->surround_mix_level];
yading@10 306 float norm0, norm1;
yading@10 307
yading@10 308 for (i = 0; i < s->fbw_channels; i++) {
yading@10 309 s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
yading@10 310 s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
yading@10 311 }
yading@10 312 if (s->channel_mode > 1 && s->channel_mode & 1) {
yading@10 313 s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
yading@10 314 }
yading@10 315 if (s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
yading@10 316 int nf = s->channel_mode - 2;
yading@10 317 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
yading@10 318 }
yading@10 319 if (s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
yading@10 320 int nf = s->channel_mode - 4;
yading@10 321 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
yading@10 322 }
yading@10 323
yading@10 324 /* renormalize */
yading@10 325 norm0 = norm1 = 0.0;
yading@10 326 for (i = 0; i < s->fbw_channels; i++) {
yading@10 327 norm0 += s->downmix_coeffs[i][0];
yading@10 328 norm1 += s->downmix_coeffs[i][1];
yading@10 329 }
yading@10 330 norm0 = 1.0f / norm0;
yading@10 331 norm1 = 1.0f / norm1;
yading@10 332 for (i = 0; i < s->fbw_channels; i++) {
yading@10 333 s->downmix_coeffs[i][0] *= norm0;
yading@10 334 s->downmix_coeffs[i][1] *= norm1;
yading@10 335 }
yading@10 336
yading@10 337 if (s->output_mode == AC3_CHMODE_MONO) {
yading@10 338 for (i = 0; i < s->fbw_channels; i++)
yading@10 339 s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] +
yading@10 340 s->downmix_coeffs[i][1]) * LEVEL_MINUS_3DB;
yading@10 341 }
yading@10 342 }
yading@10 343
yading@10 344 /**
yading@10 345 * Decode the grouped exponents according to exponent strategy.
yading@10 346 * reference: Section 7.1.3 Exponent Decoding
yading@10 347 */
yading@10 348 static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
yading@10 349 uint8_t absexp, int8_t *dexps)
yading@10 350 {
yading@10 351 int i, j, grp, group_size;
yading@10 352 int dexp[256];
yading@10 353 int expacc, prevexp;
yading@10 354
yading@10 355 /* unpack groups */
yading@10 356 group_size = exp_strategy + (exp_strategy == EXP_D45);
yading@10 357 for (grp = 0, i = 0; grp < ngrps; grp++) {
yading@10 358 expacc = get_bits(gbc, 7);
yading@10 359 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][0];
yading@10 360 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][1];
yading@10 361 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][2];
yading@10 362 }
yading@10 363
yading@10 364 /* convert to absolute exps and expand groups */
yading@10 365 prevexp = absexp;
yading@10 366 for (i = 0, j = 0; i < ngrps * 3; i++) {
yading@10 367 prevexp += dexp[i] - 2;
yading@10 368 if (prevexp > 24U)
yading@10 369 return -1;
yading@10 370 switch (group_size) {
yading@10 371 case 4: dexps[j++] = prevexp;
yading@10 372 dexps[j++] = prevexp;
yading@10 373 case 2: dexps[j++] = prevexp;
yading@10 374 case 1: dexps[j++] = prevexp;
yading@10 375 }
yading@10 376 }
yading@10 377 return 0;
yading@10 378 }
yading@10 379
yading@10 380 /**
yading@10 381 * Generate transform coefficients for each coupled channel in the coupling
yading@10 382 * range using the coupling coefficients and coupling coordinates.
yading@10 383 * reference: Section 7.4.3 Coupling Coordinate Format
yading@10 384 */
yading@10 385 static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
yading@10 386 {
yading@10 387 int bin, band, ch;
yading@10 388
yading@10 389 bin = s->start_freq[CPL_CH];
yading@10 390 for (band = 0; band < s->num_cpl_bands; band++) {
yading@10 391 int band_start = bin;
yading@10 392 int band_end = bin + s->cpl_band_sizes[band];
yading@10 393 for (ch = 1; ch <= s->fbw_channels; ch++) {
yading@10 394 if (s->channel_in_cpl[ch]) {
yading@10 395 int cpl_coord = s->cpl_coords[ch][band] << 5;
yading@10 396 for (bin = band_start; bin < band_end; bin++) {
yading@10 397 s->fixed_coeffs[ch][bin] =
yading@10 398 MULH(s->fixed_coeffs[CPL_CH][bin] << 4, cpl_coord);
yading@10 399 }
yading@10 400 if (ch == 2 && s->phase_flags[band]) {
yading@10 401 for (bin = band_start; bin < band_end; bin++)
yading@10 402 s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
yading@10 403 }
yading@10 404 }
yading@10 405 }
yading@10 406 bin = band_end;
yading@10 407 }
yading@10 408 }
yading@10 409
yading@10 410 /**
yading@10 411 * Grouped mantissas for 3-level 5-level and 11-level quantization
yading@10 412 */
yading@10 413 typedef struct {
yading@10 414 int b1_mant[2];
yading@10 415 int b2_mant[2];
yading@10 416 int b4_mant;
yading@10 417 int b1;
yading@10 418 int b2;
yading@10 419 int b4;
yading@10 420 } mant_groups;
yading@10 421
yading@10 422 /**
yading@10 423 * Decode the transform coefficients for a particular channel
yading@10 424 * reference: Section 7.3 Quantization and Decoding of Mantissas
yading@10 425 */
yading@10 426 static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
yading@10 427 {
yading@10 428 int start_freq = s->start_freq[ch_index];
yading@10 429 int end_freq = s->end_freq[ch_index];
yading@10 430 uint8_t *baps = s->bap[ch_index];
yading@10 431 int8_t *exps = s->dexps[ch_index];
yading@10 432 int *coeffs = s->fixed_coeffs[ch_index];
yading@10 433 int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
yading@10 434 GetBitContext *gbc = &s->gbc;
yading@10 435 int freq;
yading@10 436
yading@10 437 for (freq = start_freq; freq < end_freq; freq++) {
yading@10 438 int bap = baps[freq];
yading@10 439 int mantissa;
yading@10 440 switch (bap) {
yading@10 441 case 0:
yading@10 442 /* random noise with approximate range of -0.707 to 0.707 */
yading@10 443 if (dither)
yading@10 444 mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
yading@10 445 else
yading@10 446 mantissa = 0;
yading@10 447 break;
yading@10 448 case 1:
yading@10 449 if (m->b1) {
yading@10 450 m->b1--;
yading@10 451 mantissa = m->b1_mant[m->b1];
yading@10 452 } else {
yading@10 453 int bits = get_bits(gbc, 5);
yading@10 454 mantissa = b1_mantissas[bits][0];
yading@10 455 m->b1_mant[1] = b1_mantissas[bits][1];
yading@10 456 m->b1_mant[0] = b1_mantissas[bits][2];
yading@10 457 m->b1 = 2;
yading@10 458 }
yading@10 459 break;
yading@10 460 case 2:
yading@10 461 if (m->b2) {
yading@10 462 m->b2--;
yading@10 463 mantissa = m->b2_mant[m->b2];
yading@10 464 } else {
yading@10 465 int bits = get_bits(gbc, 7);
yading@10 466 mantissa = b2_mantissas[bits][0];
yading@10 467 m->b2_mant[1] = b2_mantissas[bits][1];
yading@10 468 m->b2_mant[0] = b2_mantissas[bits][2];
yading@10 469 m->b2 = 2;
yading@10 470 }
yading@10 471 break;
yading@10 472 case 3:
yading@10 473 mantissa = b3_mantissas[get_bits(gbc, 3)];
yading@10 474 break;
yading@10 475 case 4:
yading@10 476 if (m->b4) {
yading@10 477 m->b4 = 0;
yading@10 478 mantissa = m->b4_mant;
yading@10 479 } else {
yading@10 480 int bits = get_bits(gbc, 7);
yading@10 481 mantissa = b4_mantissas[bits][0];
yading@10 482 m->b4_mant = b4_mantissas[bits][1];
yading@10 483 m->b4 = 1;
yading@10 484 }
yading@10 485 break;
yading@10 486 case 5:
yading@10 487 mantissa = b5_mantissas[get_bits(gbc, 4)];
yading@10 488 break;
yading@10 489 default: /* 6 to 15 */
yading@10 490 /* Shift mantissa and sign-extend it. */
yading@10 491 mantissa = get_sbits(gbc, quantization_tab[bap]);
yading@10 492 mantissa <<= 24 - quantization_tab[bap];
yading@10 493 break;
yading@10 494 }
yading@10 495 coeffs[freq] = mantissa >> exps[freq];
yading@10 496 }
yading@10 497 }
yading@10 498
yading@10 499 /**
yading@10 500 * Remove random dithering from coupling range coefficients with zero-bit
yading@10 501 * mantissas for coupled channels which do not use dithering.
yading@10 502 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
yading@10 503 */
yading@10 504 static void remove_dithering(AC3DecodeContext *s) {
yading@10 505 int ch, i;
yading@10 506
yading@10 507 for (ch = 1; ch <= s->fbw_channels; ch++) {
yading@10 508 if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
yading@10 509 for (i = s->start_freq[CPL_CH]; i < s->end_freq[CPL_CH]; i++) {
yading@10 510 if (!s->bap[CPL_CH][i])
yading@10 511 s->fixed_coeffs[ch][i] = 0;
yading@10 512 }
yading@10 513 }
yading@10 514 }
yading@10 515 }
yading@10 516
yading@10 517 static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch,
yading@10 518 mant_groups *m)
yading@10 519 {
yading@10 520 if (!s->channel_uses_aht[ch]) {
yading@10 521 ac3_decode_transform_coeffs_ch(s, ch, m);
yading@10 522 } else {
yading@10 523 /* if AHT is used, mantissas for all blocks are encoded in the first
yading@10 524 block of the frame. */
yading@10 525 int bin;
yading@10 526 if (!blk && CONFIG_EAC3_DECODER)
yading@10 527 ff_eac3_decode_transform_coeffs_aht_ch(s, ch);
yading@10 528 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
yading@10 529 s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
yading@10 530 }
yading@10 531 }
yading@10 532 }
yading@10 533
yading@10 534 /**
yading@10 535 * Decode the transform coefficients.
yading@10 536 */
yading@10 537 static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
yading@10 538 {
yading@10 539 int ch, end;
yading@10 540 int got_cplchan = 0;
yading@10 541 mant_groups m;
yading@10 542
yading@10 543 m.b1 = m.b2 = m.b4 = 0;
yading@10 544
yading@10 545 for (ch = 1; ch <= s->channels; ch++) {
yading@10 546 /* transform coefficients for full-bandwidth channel */
yading@10 547 decode_transform_coeffs_ch(s, blk, ch, &m);
yading@10 548 /* transform coefficients for coupling channel come right after the
yading@10 549 coefficients for the first coupled channel*/
yading@10 550 if (s->channel_in_cpl[ch]) {
yading@10 551 if (!got_cplchan) {
yading@10 552 decode_transform_coeffs_ch(s, blk, CPL_CH, &m);
yading@10 553 calc_transform_coeffs_cpl(s);
yading@10 554 got_cplchan = 1;
yading@10 555 }
yading@10 556 end = s->end_freq[CPL_CH];
yading@10 557 } else {
yading@10 558 end = s->end_freq[ch];
yading@10 559 }
yading@10 560 do
yading@10 561 s->fixed_coeffs[ch][end] = 0;
yading@10 562 while (++end < 256);
yading@10 563 }
yading@10 564
yading@10 565 /* zero the dithered coefficients for appropriate channels */
yading@10 566 remove_dithering(s);
yading@10 567 }
yading@10 568
yading@10 569 /**
yading@10 570 * Stereo rematrixing.
yading@10 571 * reference: Section 7.5.4 Rematrixing : Decoding Technique
yading@10 572 */
yading@10 573 static void do_rematrixing(AC3DecodeContext *s)
yading@10 574 {
yading@10 575 int bnd, i;
yading@10 576 int end, bndend;
yading@10 577
yading@10 578 end = FFMIN(s->end_freq[1], s->end_freq[2]);
yading@10 579
yading@10 580 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
yading@10 581 if (s->rematrixing_flags[bnd]) {
yading@10 582 bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd + 1]);
yading@10 583 for (i = ff_ac3_rematrix_band_tab[bnd]; i < bndend; i++) {
yading@10 584 int tmp0 = s->fixed_coeffs[1][i];
yading@10 585 s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
yading@10 586 s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
yading@10 587 }
yading@10 588 }
yading@10 589 }
yading@10 590 }
yading@10 591
yading@10 592 /**
yading@10 593 * Inverse MDCT Transform.
yading@10 594 * Convert frequency domain coefficients to time-domain audio samples.
yading@10 595 * reference: Section 7.9.4 Transformation Equations
yading@10 596 */
yading@10 597 static inline void do_imdct(AC3DecodeContext *s, int channels)
yading@10 598 {
yading@10 599 int ch;
yading@10 600
yading@10 601 for (ch = 1; ch <= channels; ch++) {
yading@10 602 if (s->block_switch[ch]) {
yading@10 603 int i;
yading@10 604 float *x = s->tmp_output + 128;
yading@10 605 for (i = 0; i < 128; i++)
yading@10 606 x[i] = s->transform_coeffs[ch][2 * i];
yading@10 607 s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x);
yading@10 608 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
yading@10 609 s->tmp_output, s->window, 128);
yading@10 610 for (i = 0; i < 128; i++)
yading@10 611 x[i] = s->transform_coeffs[ch][2 * i + 1];
yading@10 612 s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch - 1], x);
yading@10 613 } else {
yading@10 614 s->imdct_512.imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
yading@10 615 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
yading@10 616 s->tmp_output, s->window, 128);
yading@10 617 memcpy(s->delay[ch - 1], s->tmp_output + 128, 128 * sizeof(float));
yading@10 618 }
yading@10 619 }
yading@10 620 }
yading@10 621
yading@10 622 /**
yading@10 623 * Upmix delay samples from stereo to original channel layout.
yading@10 624 */
yading@10 625 static void ac3_upmix_delay(AC3DecodeContext *s)
yading@10 626 {
yading@10 627 int channel_data_size = sizeof(s->delay[0]);
yading@10 628 switch (s->channel_mode) {
yading@10 629 case AC3_CHMODE_DUALMONO:
yading@10 630 case AC3_CHMODE_STEREO:
yading@10 631 /* upmix mono to stereo */
yading@10 632 memcpy(s->delay[1], s->delay[0], channel_data_size);
yading@10 633 break;
yading@10 634 case AC3_CHMODE_2F2R:
yading@10 635 memset(s->delay[3], 0, channel_data_size);
yading@10 636 case AC3_CHMODE_2F1R:
yading@10 637 memset(s->delay[2], 0, channel_data_size);
yading@10 638 break;
yading@10 639 case AC3_CHMODE_3F2R:
yading@10 640 memset(s->delay[4], 0, channel_data_size);
yading@10 641 case AC3_CHMODE_3F1R:
yading@10 642 memset(s->delay[3], 0, channel_data_size);
yading@10 643 case AC3_CHMODE_3F:
yading@10 644 memcpy(s->delay[2], s->delay[1], channel_data_size);
yading@10 645 memset(s->delay[1], 0, channel_data_size);
yading@10 646 break;
yading@10 647 }
yading@10 648 }
yading@10 649
yading@10 650 /**
yading@10 651 * Decode band structure for coupling, spectral extension, or enhanced coupling.
yading@10 652 * The band structure defines how many subbands are in each band. For each
yading@10 653 * subband in the range, 1 means it is combined with the previous band, and 0
yading@10 654 * means that it starts a new band.
yading@10 655 *
yading@10 656 * @param[in] gbc bit reader context
yading@10 657 * @param[in] blk block number
yading@10 658 * @param[in] eac3 flag to indicate E-AC-3
yading@10 659 * @param[in] ecpl flag to indicate enhanced coupling
yading@10 660 * @param[in] start_subband subband number for start of range
yading@10 661 * @param[in] end_subband subband number for end of range
yading@10 662 * @param[in] default_band_struct default band structure table
yading@10 663 * @param[out] num_bands number of bands (optionally NULL)
yading@10 664 * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
yading@10 665 */
yading@10 666 static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
yading@10 667 int ecpl, int start_subband, int end_subband,
yading@10 668 const uint8_t *default_band_struct,
yading@10 669 int *num_bands, uint8_t *band_sizes)
yading@10 670 {
yading@10 671 int subbnd, bnd, n_subbands, n_bands=0;
yading@10 672 uint8_t bnd_sz[22];
yading@10 673 uint8_t coded_band_struct[22];
yading@10 674 const uint8_t *band_struct;
yading@10 675
yading@10 676 n_subbands = end_subband - start_subband;
yading@10 677
yading@10 678 /* decode band structure from bitstream or use default */
yading@10 679 if (!eac3 || get_bits1(gbc)) {
yading@10 680 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
yading@10 681 coded_band_struct[subbnd] = get_bits1(gbc);
yading@10 682 }
yading@10 683 band_struct = coded_band_struct;
yading@10 684 } else if (!blk) {
yading@10 685 band_struct = &default_band_struct[start_subband+1];
yading@10 686 } else {
yading@10 687 /* no change in band structure */
yading@10 688 return;
yading@10 689 }
yading@10 690
yading@10 691 /* calculate number of bands and band sizes based on band structure.
yading@10 692 note that the first 4 subbands in enhanced coupling span only 6 bins
yading@10 693 instead of 12. */
yading@10 694 if (num_bands || band_sizes ) {
yading@10 695 n_bands = n_subbands;
yading@10 696 bnd_sz[0] = ecpl ? 6 : 12;
yading@10 697 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
yading@10 698 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
yading@10 699 if (band_struct[subbnd - 1]) {
yading@10 700 n_bands--;
yading@10 701 bnd_sz[bnd] += subbnd_size;
yading@10 702 } else {
yading@10 703 bnd_sz[++bnd] = subbnd_size;
yading@10 704 }
yading@10 705 }
yading@10 706 }
yading@10 707
yading@10 708 /* set optional output params */
yading@10 709 if (num_bands)
yading@10 710 *num_bands = n_bands;
yading@10 711 if (band_sizes)
yading@10 712 memcpy(band_sizes, bnd_sz, n_bands);
yading@10 713 }
yading@10 714
yading@10 715 /**
yading@10 716 * Decode a single audio block from the AC-3 bitstream.
yading@10 717 */
yading@10 718 static int decode_audio_block(AC3DecodeContext *s, int blk)
yading@10 719 {
yading@10 720 int fbw_channels = s->fbw_channels;
yading@10 721 int channel_mode = s->channel_mode;
yading@10 722 int i, bnd, seg, ch;
yading@10 723 int different_transforms;
yading@10 724 int downmix_output;
yading@10 725 int cpl_in_use;
yading@10 726 GetBitContext *gbc = &s->gbc;
yading@10 727 uint8_t bit_alloc_stages[AC3_MAX_CHANNELS] = { 0 };
yading@10 728
yading@10 729 /* block switch flags */
yading@10 730 different_transforms = 0;
yading@10 731 if (s->block_switch_syntax) {
yading@10 732 for (ch = 1; ch <= fbw_channels; ch++) {
yading@10 733 s->block_switch[ch] = get_bits1(gbc);
yading@10 734 if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
yading@10 735 different_transforms = 1;
yading@10 736 }
yading@10 737 }
yading@10 738
yading@10 739 /* dithering flags */
yading@10 740 if (s->dither_flag_syntax) {
yading@10 741 for (ch = 1; ch <= fbw_channels; ch++) {
yading@10 742 s->dither_flag[ch] = get_bits1(gbc);
yading@10 743 }
yading@10 744 }
yading@10 745
yading@10 746 /* dynamic range */
yading@10 747 i = !s->channel_mode;
yading@10 748 do {
yading@10 749 if (get_bits1(gbc)) {
yading@10 750 s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)] - 1.0) *
yading@10 751 s->drc_scale) + 1.0;
yading@10 752 } else if (blk == 0) {
yading@10 753 s->dynamic_range[i] = 1.0f;
yading@10 754 }
yading@10 755 } while (i--);
yading@10 756
yading@10 757 /* spectral extension strategy */
yading@10 758 if (s->eac3 && (!blk || get_bits1(gbc))) {
yading@10 759 s->spx_in_use = get_bits1(gbc);
yading@10 760 if (s->spx_in_use) {
yading@10 761 int dst_start_freq, dst_end_freq, src_start_freq,
yading@10 762 start_subband, end_subband;
yading@10 763
yading@10 764 /* determine which channels use spx */
yading@10 765 if (s->channel_mode == AC3_CHMODE_MONO) {
yading@10 766 s->channel_uses_spx[1] = 1;
yading@10 767 } else {
yading@10 768 for (ch = 1; ch <= fbw_channels; ch++)
yading@10 769 s->channel_uses_spx[ch] = get_bits1(gbc);
yading@10 770 }
yading@10 771
yading@10 772 /* get the frequency bins of the spx copy region and the spx start
yading@10 773 and end subbands */
yading@10 774 dst_start_freq = get_bits(gbc, 2);
yading@10 775 start_subband = get_bits(gbc, 3) + 2;
yading@10 776 if (start_subband > 7)
yading@10 777 start_subband += start_subband - 7;
yading@10 778 end_subband = get_bits(gbc, 3) + 5;
yading@10 779 if (end_subband > 7)
yading@10 780 end_subband += end_subband - 7;
yading@10 781 dst_start_freq = dst_start_freq * 12 + 25;
yading@10 782 src_start_freq = start_subband * 12 + 25;
yading@10 783 dst_end_freq = end_subband * 12 + 25;
yading@10 784
yading@10 785 /* check validity of spx ranges */
yading@10 786 if (start_subband >= end_subband) {
yading@10 787 av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
yading@10 788 "range (%d >= %d)\n", start_subband, end_subband);
yading@10 789 return -1;
yading@10 790 }
yading@10 791 if (dst_start_freq >= src_start_freq) {
yading@10 792 av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
yading@10 793 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
yading@10 794 return -1;
yading@10 795 }
yading@10 796
yading@10 797 s->spx_dst_start_freq = dst_start_freq;
yading@10 798 s->spx_src_start_freq = src_start_freq;
yading@10 799 s->spx_dst_end_freq = dst_end_freq;
yading@10 800
yading@10 801 decode_band_structure(gbc, blk, s->eac3, 0,
yading@10 802 start_subband, end_subband,
yading@10 803 ff_eac3_default_spx_band_struct,
yading@10 804 &s->num_spx_bands,
yading@10 805 s->spx_band_sizes);
yading@10 806 } else {
yading@10 807 for (ch = 1; ch <= fbw_channels; ch++) {
yading@10 808 s->channel_uses_spx[ch] = 0;
yading@10 809 s->first_spx_coords[ch] = 1;
yading@10 810 }
yading@10 811 }
yading@10 812 }
yading@10 813
yading@10 814 /* spectral extension coordinates */
yading@10 815 if (s->spx_in_use) {
yading@10 816 for (ch = 1; ch <= fbw_channels; ch++) {
yading@10 817 if (s->channel_uses_spx[ch]) {
yading@10 818 if (s->first_spx_coords[ch] || get_bits1(gbc)) {
yading@10 819 float spx_blend;
yading@10 820 int bin, master_spx_coord;
yading@10 821
yading@10 822 s->first_spx_coords[ch] = 0;
yading@10 823 spx_blend = get_bits(gbc, 5) * (1.0f/32);
yading@10 824 master_spx_coord = get_bits(gbc, 2) * 3;
yading@10 825
yading@10 826 bin = s->spx_src_start_freq;
yading@10 827 for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
yading@10 828 int bandsize;
yading@10 829 int spx_coord_exp, spx_coord_mant;
yading@10 830 float nratio, sblend, nblend, spx_coord;
yading@10 831
yading@10 832 /* calculate blending factors */
yading@10 833 bandsize = s->spx_band_sizes[bnd];
yading@10 834 nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
yading@10 835 nratio = av_clipf(nratio, 0.0f, 1.0f);
yading@10 836 nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3)
yading@10 837 // to give unity variance
yading@10 838 sblend = sqrtf(1.0f - nratio);
yading@10 839 bin += bandsize;
yading@10 840
yading@10 841 /* decode spx coordinates */
yading@10 842 spx_coord_exp = get_bits(gbc, 4);
yading@10 843 spx_coord_mant = get_bits(gbc, 2);
yading@10 844 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
yading@10 845 else spx_coord_mant += 4;
yading@10 846 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
yading@10 847 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
yading@10 848
yading@10 849 /* multiply noise and signal blending factors by spx coordinate */
yading@10 850 s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
yading@10 851 s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
yading@10 852 }
yading@10 853 }
yading@10 854 } else {
yading@10 855 s->first_spx_coords[ch] = 1;
yading@10 856 }
yading@10 857 }
yading@10 858 }
yading@10 859
yading@10 860 /* coupling strategy */
yading@10 861 if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
yading@10 862 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
yading@10 863 if (!s->eac3)
yading@10 864 s->cpl_in_use[blk] = get_bits1(gbc);
yading@10 865 if (s->cpl_in_use[blk]) {
yading@10 866 /* coupling in use */
yading@10 867 int cpl_start_subband, cpl_end_subband;
yading@10 868
yading@10 869 if (channel_mode < AC3_CHMODE_STEREO) {
yading@10 870 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
yading@10 871 return -1;
yading@10 872 }
yading@10 873
yading@10 874 /* check for enhanced coupling */
yading@10 875 if (s->eac3 && get_bits1(gbc)) {
yading@10 876 /* TODO: parse enhanced coupling strategy info */
yading@10 877 avpriv_request_sample(s->avctx, "Enhanced coupling");
yading@10 878 return AVERROR_PATCHWELCOME;
yading@10 879 }
yading@10 880
yading@10 881 /* determine which channels are coupled */
yading@10 882 if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
yading@10 883 s->channel_in_cpl[1] = 1;
yading@10 884 s->channel_in_cpl[2] = 1;
yading@10 885 } else {
yading@10 886 for (ch = 1; ch <= fbw_channels; ch++)
yading@10 887 s->channel_in_cpl[ch] = get_bits1(gbc);
yading@10 888 }
yading@10 889
yading@10 890 /* phase flags in use */
yading@10 891 if (channel_mode == AC3_CHMODE_STEREO)
yading@10 892 s->phase_flags_in_use = get_bits1(gbc);
yading@10 893
yading@10 894 /* coupling frequency range */
yading@10 895 cpl_start_subband = get_bits(gbc, 4);
yading@10 896 cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
yading@10 897 get_bits(gbc, 4) + 3;
yading@10 898 if (cpl_start_subband >= cpl_end_subband) {
yading@10 899 av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
yading@10 900 cpl_start_subband, cpl_end_subband);
yading@10 901 return -1;
yading@10 902 }
yading@10 903 s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
yading@10 904 s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
yading@10 905
yading@10 906 decode_band_structure(gbc, blk, s->eac3, 0, cpl_start_subband,
yading@10 907 cpl_end_subband,
yading@10 908 ff_eac3_default_cpl_band_struct,
yading@10 909 &s->num_cpl_bands, s->cpl_band_sizes);
yading@10 910 } else {
yading@10 911 /* coupling not in use */
yading@10 912 for (ch = 1; ch <= fbw_channels; ch++) {
yading@10 913 s->channel_in_cpl[ch] = 0;
yading@10 914 s->first_cpl_coords[ch] = 1;
yading@10 915 }
yading@10 916 s->first_cpl_leak = s->eac3;
yading@10 917 s->phase_flags_in_use = 0;
yading@10 918 }
yading@10 919 } else if (!s->eac3) {
yading@10 920 if (!blk) {
yading@10 921 av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must "
yading@10 922 "be present in block 0\n");
yading@10 923 return -1;
yading@10 924 } else {
yading@10 925 s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
yading@10 926 }
yading@10 927 }
yading@10 928 cpl_in_use = s->cpl_in_use[blk];
yading@10 929
yading@10 930 /* coupling coordinates */
yading@10 931 if (cpl_in_use) {
yading@10 932 int cpl_coords_exist = 0;
yading@10 933
yading@10 934 for (ch = 1; ch <= fbw_channels; ch++) {
yading@10 935 if (s->channel_in_cpl[ch]) {
yading@10 936 if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(gbc)) {
yading@10 937 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
yading@10 938 s->first_cpl_coords[ch] = 0;
yading@10 939 cpl_coords_exist = 1;
yading@10 940 master_cpl_coord = 3 * get_bits(gbc, 2);
yading@10 941 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
yading@10 942 cpl_coord_exp = get_bits(gbc, 4);
yading@10 943 cpl_coord_mant = get_bits(gbc, 4);
yading@10 944 if (cpl_coord_exp == 15)
yading@10 945 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
yading@10 946 else
yading@10 947 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
yading@10 948 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
yading@10 949 }
yading@10 950 } else if (!blk) {
yading@10 951 av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must "
yading@10 952 "be present in block 0\n");
yading@10 953 return -1;
yading@10 954 }
yading@10 955 } else {
yading@10 956 /* channel not in coupling */
yading@10 957 s->first_cpl_coords[ch] = 1;
yading@10 958 }
yading@10 959 }
yading@10 960 /* phase flags */
yading@10 961 if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
yading@10 962 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
yading@10 963 s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
yading@10 964 }
yading@10 965 }
yading@10 966 }
yading@10 967
yading@10 968 /* stereo rematrixing strategy and band structure */
yading@10 969 if (channel_mode == AC3_CHMODE_STEREO) {
yading@10 970 if ((s->eac3 && !blk) || get_bits1(gbc)) {
yading@10 971 s->num_rematrixing_bands = 4;
yading@10 972 if (cpl_in_use && s->start_freq[CPL_CH] <= 61) {
yading@10 973 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
yading@10 974 } else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
yading@10 975 s->num_rematrixing_bands--;
yading@10 976 }
yading@10 977 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
yading@10 978 s->rematrixing_flags[bnd] = get_bits1(gbc);
yading@10 979 } else if (!blk) {
yading@10 980 av_log(s->avctx, AV_LOG_WARNING, "Warning: "
yading@10 981 "new rematrixing strategy not present in block 0\n");
yading@10 982 s->num_rematrixing_bands = 0;
yading@10 983 }
yading@10 984 }
yading@10 985
yading@10 986 /* exponent strategies for each channel */
yading@10 987 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
yading@10 988 if (!s->eac3)
yading@10 989 s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
yading@10 990 if (s->exp_strategy[blk][ch] != EXP_REUSE)
yading@10 991 bit_alloc_stages[ch] = 3;
yading@10 992 }
yading@10 993
yading@10 994 /* channel bandwidth */
yading@10 995 for (ch = 1; ch <= fbw_channels; ch++) {
yading@10 996 s->start_freq[ch] = 0;
yading@10 997 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
yading@10 998 int group_size;
yading@10 999 int prev = s->end_freq[ch];
yading@10 1000 if (s->channel_in_cpl[ch])
yading@10 1001 s->end_freq[ch] = s->start_freq[CPL_CH];
yading@10 1002 else if (s->channel_uses_spx[ch])
yading@10 1003 s->end_freq[ch] = s->spx_src_start_freq;
yading@10 1004 else {
yading@10 1005 int bandwidth_code = get_bits(gbc, 6);
yading@10 1006 if (bandwidth_code > 60) {
yading@10 1007 av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
yading@10 1008 return -1;
yading@10 1009 }
yading@10 1010 s->end_freq[ch] = bandwidth_code * 3 + 73;
yading@10 1011 }
yading@10 1012 group_size = 3 << (s->exp_strategy[blk][ch] - 1);
yading@10 1013 s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
yading@10 1014 if (blk > 0 && s->end_freq[ch] != prev)
yading@10 1015 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
yading@10 1016 }
yading@10 1017 }
yading@10 1018 if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
yading@10 1019 s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
yading@10 1020 (3 << (s->exp_strategy[blk][CPL_CH] - 1));
yading@10 1021 }
yading@10 1022
yading@10 1023 /* decode exponents for each channel */
yading@10 1024 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
yading@10 1025 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
yading@10 1026 s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
yading@10 1027 if (decode_exponents(gbc, s->exp_strategy[blk][ch],
yading@10 1028 s->num_exp_groups[ch], s->dexps[ch][0],
yading@10 1029 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
yading@10 1030 av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n");
yading@10 1031 return -1;
yading@10 1032 }
yading@10 1033 if (ch != CPL_CH && ch != s->lfe_ch)
yading@10 1034 skip_bits(gbc, 2); /* skip gainrng */
yading@10 1035 }
yading@10 1036 }
yading@10 1037
yading@10 1038 /* bit allocation information */
yading@10 1039 if (s->bit_allocation_syntax) {
yading@10 1040 if (get_bits1(gbc)) {
yading@10 1041 s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
yading@10 1042 s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
yading@10 1043 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
yading@10 1044 s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
yading@10 1045 s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
yading@10 1046 for (ch = !cpl_in_use; ch <= s->channels; ch++)
yading@10 1047 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
yading@10 1048 } else if (!blk) {
yading@10 1049 av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must "
yading@10 1050 "be present in block 0\n");
yading@10 1051 return -1;
yading@10 1052 }
yading@10 1053 }
yading@10 1054
yading@10 1055 /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
yading@10 1056 if (!s->eac3 || !blk) {
yading@10 1057 if (s->snr_offset_strategy && get_bits1(gbc)) {
yading@10 1058 int snr = 0;
yading@10 1059 int csnr;
yading@10 1060 csnr = (get_bits(gbc, 6) - 15) << 4;
yading@10 1061 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
yading@10 1062 /* snr offset */
yading@10 1063 if (ch == i || s->snr_offset_strategy == 2)
yading@10 1064 snr = (csnr + get_bits(gbc, 4)) << 2;
yading@10 1065 /* run at least last bit allocation stage if snr offset changes */
yading@10 1066 if (blk && s->snr_offset[ch] != snr) {
yading@10 1067 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
yading@10 1068 }
yading@10 1069 s->snr_offset[ch] = snr;
yading@10 1070
yading@10 1071 /* fast gain (normal AC-3 only) */
yading@10 1072 if (!s->eac3) {
yading@10 1073 int prev = s->fast_gain[ch];
yading@10 1074 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
yading@10 1075 /* run last 2 bit allocation stages if fast gain changes */
yading@10 1076 if (blk && prev != s->fast_gain[ch])
yading@10 1077 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
yading@10 1078 }
yading@10 1079 }
yading@10 1080 } else if (!s->eac3 && !blk) {
yading@10 1081 av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
yading@10 1082 return -1;
yading@10 1083 }
yading@10 1084 }
yading@10 1085
yading@10 1086 /* fast gain (E-AC-3 only) */
yading@10 1087 if (s->fast_gain_syntax && get_bits1(gbc)) {
yading@10 1088 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
yading@10 1089 int prev = s->fast_gain[ch];
yading@10 1090 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
yading@10 1091 /* run last 2 bit allocation stages if fast gain changes */
yading@10 1092 if (blk && prev != s->fast_gain[ch])
yading@10 1093 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
yading@10 1094 }
yading@10 1095 } else if (s->eac3 && !blk) {
yading@10 1096 for (ch = !cpl_in_use; ch <= s->channels; ch++)
yading@10 1097 s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
yading@10 1098 }
yading@10 1099
yading@10 1100 /* E-AC-3 to AC-3 converter SNR offset */
yading@10 1101 if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
yading@10 1102 skip_bits(gbc, 10); // skip converter snr offset
yading@10 1103 }
yading@10 1104
yading@10 1105 /* coupling leak information */
yading@10 1106 if (cpl_in_use) {
yading@10 1107 if (s->first_cpl_leak || get_bits1(gbc)) {
yading@10 1108 int fl = get_bits(gbc, 3);
yading@10 1109 int sl = get_bits(gbc, 3);
yading@10 1110 /* run last 2 bit allocation stages for coupling channel if
yading@10 1111 coupling leak changes */
yading@10 1112 if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
yading@10 1113 sl != s->bit_alloc_params.cpl_slow_leak)) {
yading@10 1114 bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
yading@10 1115 }
yading@10 1116 s->bit_alloc_params.cpl_fast_leak = fl;
yading@10 1117 s->bit_alloc_params.cpl_slow_leak = sl;
yading@10 1118 } else if (!s->eac3 && !blk) {
yading@10 1119 av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must "
yading@10 1120 "be present in block 0\n");
yading@10 1121 return -1;
yading@10 1122 }
yading@10 1123 s->first_cpl_leak = 0;
yading@10 1124 }
yading@10 1125
yading@10 1126 /* delta bit allocation information */
yading@10 1127 if (s->dba_syntax && get_bits1(gbc)) {
yading@10 1128 /* delta bit allocation exists (strategy) */
yading@10 1129 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
yading@10 1130 s->dba_mode[ch] = get_bits(gbc, 2);
yading@10 1131 if (s->dba_mode[ch] == DBA_RESERVED) {
yading@10 1132 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
yading@10 1133 return -1;
yading@10 1134 }
yading@10 1135 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
yading@10 1136 }
yading@10 1137 /* channel delta offset, len and bit allocation */
yading@10 1138 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
yading@10 1139 if (s->dba_mode[ch] == DBA_NEW) {
yading@10 1140 s->dba_nsegs[ch] = get_bits(gbc, 3) + 1;
yading@10 1141 for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
yading@10 1142 s->dba_offsets[ch][seg] = get_bits(gbc, 5);
yading@10 1143 s->dba_lengths[ch][seg] = get_bits(gbc, 4);
yading@10 1144 s->dba_values[ch][seg] = get_bits(gbc, 3);
yading@10 1145 }
yading@10 1146 /* run last 2 bit allocation stages if new dba values */
yading@10 1147 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
yading@10 1148 }
yading@10 1149 }
yading@10 1150 } else if (blk == 0) {
yading@10 1151 for (ch = 0; ch <= s->channels; ch++) {
yading@10 1152 s->dba_mode[ch] = DBA_NONE;
yading@10 1153 }
yading@10 1154 }
yading@10 1155
yading@10 1156 /* Bit allocation */
yading@10 1157 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
yading@10 1158 if (bit_alloc_stages[ch] > 2) {
yading@10 1159 /* Exponent mapping into PSD and PSD integration */
yading@10 1160 ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
yading@10 1161 s->start_freq[ch], s->end_freq[ch],
yading@10 1162 s->psd[ch], s->band_psd[ch]);
yading@10 1163 }
yading@10 1164 if (bit_alloc_stages[ch] > 1) {
yading@10 1165 /* Compute excitation function, Compute masking curve, and
yading@10 1166 Apply delta bit allocation */
yading@10 1167 if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
yading@10 1168 s->start_freq[ch], s->end_freq[ch],
yading@10 1169 s->fast_gain[ch], (ch == s->lfe_ch),
yading@10 1170 s->dba_mode[ch], s->dba_nsegs[ch],
yading@10 1171 s->dba_offsets[ch], s->dba_lengths[ch],
yading@10 1172 s->dba_values[ch], s->mask[ch])) {
yading@10 1173 av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
yading@10 1174 return -1;
yading@10 1175 }
yading@10 1176 }
yading@10 1177 if (bit_alloc_stages[ch] > 0) {
yading@10 1178 /* Compute bit allocation */
yading@10 1179 const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
yading@10 1180 ff_eac3_hebap_tab : ff_ac3_bap_tab;
yading@10 1181 s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
yading@10 1182 s->start_freq[ch], s->end_freq[ch],
yading@10 1183 s->snr_offset[ch],
yading@10 1184 s->bit_alloc_params.floor,
yading@10 1185 bap_tab, s->bap[ch]);
yading@10 1186 }
yading@10 1187 }
yading@10 1188
yading@10 1189 /* unused dummy data */
yading@10 1190 if (s->skip_syntax && get_bits1(gbc)) {
yading@10 1191 int skipl = get_bits(gbc, 9);
yading@10 1192 while (skipl--)
yading@10 1193 skip_bits(gbc, 8);
yading@10 1194 }
yading@10 1195
yading@10 1196 /* unpack the transform coefficients
yading@10 1197 this also uncouples channels if coupling is in use. */
yading@10 1198 decode_transform_coeffs(s, blk);
yading@10 1199
yading@10 1200 /* TODO: generate enhanced coupling coordinates and uncouple */
yading@10 1201
yading@10 1202 /* recover coefficients if rematrixing is in use */
yading@10 1203 if (s->channel_mode == AC3_CHMODE_STEREO)
yading@10 1204 do_rematrixing(s);
yading@10 1205
yading@10 1206 /* apply scaling to coefficients (headroom, dynrng) */
yading@10 1207 for (ch = 1; ch <= s->channels; ch++) {
yading@10 1208 float gain = 1.0 / 4194304.0f;
yading@10 1209 if (s->channel_mode == AC3_CHMODE_DUALMONO) {
yading@10 1210 gain *= s->dynamic_range[2 - ch];
yading@10 1211 } else {
yading@10 1212 gain *= s->dynamic_range[0];
yading@10 1213 }
yading@10 1214 s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
yading@10 1215 s->fixed_coeffs[ch], gain, 256);
yading@10 1216 }
yading@10 1217
yading@10 1218 /* apply spectral extension to high frequency bins */
yading@10 1219 if (s->spx_in_use && CONFIG_EAC3_DECODER) {
yading@10 1220 ff_eac3_apply_spectral_extension(s);
yading@10 1221 }
yading@10 1222
yading@10 1223 /* downmix and MDCT. order depends on whether block switching is used for
yading@10 1224 any channel in this block. this is because coefficients for the long
yading@10 1225 and short transforms cannot be mixed. */
yading@10 1226 downmix_output = s->channels != s->out_channels &&
yading@10 1227 !((s->output_mode & AC3_OUTPUT_LFEON) &&
yading@10 1228 s->fbw_channels == s->out_channels);
yading@10 1229 if (different_transforms) {
yading@10 1230 /* the delay samples have already been downmixed, so we upmix the delay
yading@10 1231 samples in order to reconstruct all channels before downmixing. */
yading@10 1232 if (s->downmixed) {
yading@10 1233 s->downmixed = 0;
yading@10 1234 ac3_upmix_delay(s);
yading@10 1235 }
yading@10 1236
yading@10 1237 do_imdct(s, s->channels);
yading@10 1238
yading@10 1239 if (downmix_output) {
yading@10 1240 s->ac3dsp.downmix(s->outptr, s->downmix_coeffs,
yading@10 1241 s->out_channels, s->fbw_channels, 256);
yading@10 1242 }
yading@10 1243 } else {
yading@10 1244 if (downmix_output) {
yading@10 1245 s->ac3dsp.downmix(s->xcfptr + 1, s->downmix_coeffs,
yading@10 1246 s->out_channels, s->fbw_channels, 256);
yading@10 1247 }
yading@10 1248
yading@10 1249 if (downmix_output && !s->downmixed) {
yading@10 1250 s->downmixed = 1;
yading@10 1251 s->ac3dsp.downmix(s->dlyptr, s->downmix_coeffs, s->out_channels,
yading@10 1252 s->fbw_channels, 128);
yading@10 1253 }
yading@10 1254
yading@10 1255 do_imdct(s, s->out_channels);
yading@10 1256 }
yading@10 1257
yading@10 1258 return 0;
yading@10 1259 }
yading@10 1260
yading@10 1261 /**
yading@10 1262 * Decode a single AC-3 frame.
yading@10 1263 */
yading@10 1264 static int ac3_decode_frame(AVCodecContext * avctx, void *data,
yading@10 1265 int *got_frame_ptr, AVPacket *avpkt)
yading@10 1266 {
yading@10 1267 AVFrame *frame = data;
yading@10 1268 const uint8_t *buf = avpkt->data;
yading@10 1269 int buf_size = avpkt->size;
yading@10 1270 AC3DecodeContext *s = avctx->priv_data;
yading@10 1271 int blk, ch, err, ret;
yading@10 1272 const uint8_t *channel_map;
yading@10 1273 const float *output[AC3_MAX_CHANNELS];
yading@10 1274
yading@10 1275 /* copy input buffer to decoder context to avoid reading past the end
yading@10 1276 of the buffer, which can be caused by a damaged input stream. */
yading@10 1277 if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
yading@10 1278 // seems to be byte-swapped AC-3
yading@10 1279 int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
yading@10 1280 s->dsp.bswap16_buf((uint16_t *)s->input_buffer, (const uint16_t *)buf, cnt);
yading@10 1281 } else
yading@10 1282 memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
yading@10 1283 buf = s->input_buffer;
yading@10 1284 /* initialize the GetBitContext with the start of valid AC-3 Frame */
yading@10 1285 init_get_bits(&s->gbc, buf, buf_size * 8);
yading@10 1286
yading@10 1287 /* parse the syncinfo */
yading@10 1288 err = parse_frame_header(s);
yading@10 1289
yading@10 1290 if (err) {
yading@10 1291 switch (err) {
yading@10 1292 case AAC_AC3_PARSE_ERROR_SYNC:
yading@10 1293 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
yading@10 1294 return -1;
yading@10 1295 case AAC_AC3_PARSE_ERROR_BSID:
yading@10 1296 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
yading@10 1297 break;
yading@10 1298 case AAC_AC3_PARSE_ERROR_SAMPLE_RATE:
yading@10 1299 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
yading@10 1300 break;
yading@10 1301 case AAC_AC3_PARSE_ERROR_FRAME_SIZE:
yading@10 1302 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
yading@10 1303 break;
yading@10 1304 case AAC_AC3_PARSE_ERROR_FRAME_TYPE:
yading@10 1305 /* skip frame if CRC is ok. otherwise use error concealment. */
yading@10 1306 /* TODO: add support for substreams and dependent frames */
yading@10 1307 if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) {
yading@10 1308 av_log(avctx, AV_LOG_ERROR, "unsupported frame type : "
yading@10 1309 "skipping frame\n");
yading@10 1310 *got_frame_ptr = 0;
yading@10 1311 return s->frame_size;
yading@10 1312 } else {
yading@10 1313 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
yading@10 1314 }
yading@10 1315 break;
yading@10 1316 default:
yading@10 1317 av_log(avctx, AV_LOG_ERROR, "invalid header\n");
yading@10 1318 break;
yading@10 1319 }
yading@10 1320 } else {
yading@10 1321 /* check that reported frame size fits in input buffer */
yading@10 1322 if (s->frame_size > buf_size) {
yading@10 1323 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
yading@10 1324 err = AAC_AC3_PARSE_ERROR_FRAME_SIZE;
yading@10 1325 } else if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) {
yading@10 1326 /* check for crc mismatch */
yading@10 1327 if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2],
yading@10 1328 s->frame_size - 2)) {
yading@10 1329 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
yading@10 1330 err = AAC_AC3_PARSE_ERROR_CRC;
yading@10 1331 }
yading@10 1332 }
yading@10 1333 }
yading@10 1334
yading@10 1335 /* if frame is ok, set audio parameters */
yading@10 1336 if (!err) {
yading@10 1337 avctx->sample_rate = s->sample_rate;
yading@10 1338 avctx->bit_rate = s->bit_rate;
yading@10 1339 }
yading@10 1340
yading@10 1341 /* channel config */
yading@10 1342 if (!err || (s->channels && s->out_channels != s->channels)) {
yading@10 1343 s->out_channels = s->channels;
yading@10 1344 s->output_mode = s->channel_mode;
yading@10 1345 if (s->lfe_on)
yading@10 1346 s->output_mode |= AC3_OUTPUT_LFEON;
yading@10 1347 if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
yading@10 1348 avctx->request_channels < s->channels) {
yading@10 1349 s->out_channels = avctx->request_channels;
yading@10 1350 s->output_mode = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
yading@10 1351 s->channel_layout = avpriv_ac3_channel_layout_tab[s->output_mode];
yading@10 1352 }
yading@10 1353 avctx->channels = s->out_channels;
yading@10 1354 avctx->channel_layout = s->channel_layout;
yading@10 1355
yading@10 1356 s->loro_center_mix_level = gain_levels[s-> center_mix_level];
yading@10 1357 s->loro_surround_mix_level = gain_levels[s->surround_mix_level];
yading@10 1358 s->ltrt_center_mix_level = LEVEL_MINUS_3DB;
yading@10 1359 s->ltrt_surround_mix_level = LEVEL_MINUS_3DB;
yading@10 1360 /* set downmixing coefficients if needed */
yading@10 1361 if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
yading@10 1362 s->fbw_channels == s->out_channels)) {
yading@10 1363 set_downmix_coeffs(s);
yading@10 1364 }
yading@10 1365 } else if (!s->channels) {
yading@10 1366 av_log(avctx, AV_LOG_ERROR, "unable to determine channel mode\n");
yading@10 1367 return AVERROR_INVALIDDATA;
yading@10 1368 }
yading@10 1369 avctx->channels = s->out_channels;
yading@10 1370
yading@10 1371 /* set audio service type based on bitstream mode for AC-3 */
yading@10 1372 avctx->audio_service_type = s->bitstream_mode;
yading@10 1373 if (s->bitstream_mode == 0x7 && s->channels > 1)
yading@10 1374 avctx->audio_service_type = AV_AUDIO_SERVICE_TYPE_KARAOKE;
yading@10 1375
yading@10 1376 /* get output buffer */
yading@10 1377 frame->nb_samples = s->num_blocks * 256;
yading@10 1378 if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
yading@10 1379 return ret;
yading@10 1380
yading@10 1381 /* decode the audio blocks */
yading@10 1382 channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
yading@10 1383 for (ch = 0; ch < AC3_MAX_CHANNELS; ch++) {
yading@10 1384 output[ch] = s->output[ch];
yading@10 1385 s->outptr[ch] = s->output[ch];
yading@10 1386 }
yading@10 1387 for (ch = 0; ch < s->channels; ch++) {
yading@10 1388 if (ch < s->out_channels)
yading@10 1389 s->outptr[channel_map[ch]] = (float *)frame->data[ch];
yading@10 1390 }
yading@10 1391 for (blk = 0; blk < s->num_blocks; blk++) {
yading@10 1392 if (!err && decode_audio_block(s, blk)) {
yading@10 1393 av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
yading@10 1394 err = 1;
yading@10 1395 }
yading@10 1396 if (err)
yading@10 1397 for (ch = 0; ch < s->out_channels; ch++)
yading@10 1398 memcpy(((float*)frame->data[ch]) + AC3_BLOCK_SIZE*blk, output[ch], 1024);
yading@10 1399 for (ch = 0; ch < s->out_channels; ch++)
yading@10 1400 output[ch] = s->outptr[channel_map[ch]];
yading@10 1401 for (ch = 0; ch < s->out_channels; ch++) {
yading@10 1402 if (!ch || channel_map[ch])
yading@10 1403 s->outptr[channel_map[ch]] += AC3_BLOCK_SIZE;
yading@10 1404 }
yading@10 1405 }
yading@10 1406
yading@10 1407 av_frame_set_decode_error_flags(frame, err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0);
yading@10 1408
yading@10 1409 /* keep last block for error concealment in next frame */
yading@10 1410 for (ch = 0; ch < s->out_channels; ch++)
yading@10 1411 memcpy(s->output[ch], output[ch], 1024);
yading@10 1412
yading@10 1413 *got_frame_ptr = 1;
yading@10 1414
yading@10 1415 return FFMIN(buf_size, s->frame_size);
yading@10 1416 }
yading@10 1417
yading@10 1418 /**
yading@10 1419 * Uninitialize the AC-3 decoder.
yading@10 1420 */
yading@10 1421 static av_cold int ac3_decode_end(AVCodecContext *avctx)
yading@10 1422 {
yading@10 1423 AC3DecodeContext *s = avctx->priv_data;
yading@10 1424 ff_mdct_end(&s->imdct_512);
yading@10 1425 ff_mdct_end(&s->imdct_256);
yading@10 1426
yading@10 1427 return 0;
yading@10 1428 }
yading@10 1429
yading@10 1430 #define OFFSET(x) offsetof(AC3DecodeContext, x)
yading@10 1431 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
yading@10 1432 static const AVOption options[] = {
yading@10 1433 { "drc_scale", "percentage of dynamic range compression to apply", OFFSET(drc_scale), AV_OPT_TYPE_FLOAT, {.dbl = 1.0}, 0.0, 1.0, PAR },
yading@10 1434
yading@10 1435 {"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 2, 0, "dmix_mode"},
yading@10 1436 {"ltrt_cmixlev", "Lt/Rt Center Mix Level", OFFSET(ltrt_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
yading@10 1437 {"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
yading@10 1438 {"loro_cmixlev", "Lo/Ro Center Mix Level", OFFSET(loro_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
yading@10 1439 {"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
yading@10 1440
yading@10 1441 { NULL},
yading@10 1442 };
yading@10 1443
yading@10 1444 static const AVClass ac3_decoder_class = {
yading@10 1445 .class_name = "AC3 decoder",
yading@10 1446 .item_name = av_default_item_name,
yading@10 1447 .option = options,
yading@10 1448 .version = LIBAVUTIL_VERSION_INT,
yading@10 1449 };
yading@10 1450
yading@10 1451 AVCodec ff_ac3_decoder = {
yading@10 1452 .name = "ac3",
yading@10 1453 .type = AVMEDIA_TYPE_AUDIO,
yading@10 1454 .id = AV_CODEC_ID_AC3,
yading@10 1455 .priv_data_size = sizeof (AC3DecodeContext),
yading@10 1456 .init = ac3_decode_init,
yading@10 1457 .close = ac3_decode_end,
yading@10 1458 .decode = ac3_decode_frame,
yading@10 1459 .capabilities = CODEC_CAP_DR1,
yading@10 1460 .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
yading@10 1461 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
yading@10 1462 AV_SAMPLE_FMT_NONE },
yading@10 1463 .priv_class = &ac3_decoder_class,
yading@10 1464 };
yading@10 1465
yading@10 1466 #if CONFIG_EAC3_DECODER
yading@10 1467 static const AVClass eac3_decoder_class = {
yading@10 1468 .class_name = "E-AC3 decoder",
yading@10 1469 .item_name = av_default_item_name,
yading@10 1470 .option = options,
yading@10 1471 .version = LIBAVUTIL_VERSION_INT,
yading@10 1472 };
yading@10 1473
yading@10 1474 AVCodec ff_eac3_decoder = {
yading@10 1475 .name = "eac3",
yading@10 1476 .type = AVMEDIA_TYPE_AUDIO,
yading@10 1477 .id = AV_CODEC_ID_EAC3,
yading@10 1478 .priv_data_size = sizeof (AC3DecodeContext),
yading@10 1479 .init = ac3_decode_init,
yading@10 1480 .close = ac3_decode_end,
yading@10 1481 .decode = ac3_decode_frame,
yading@10 1482 .capabilities = CODEC_CAP_DR1,
yading@10 1483 .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52B (AC-3, E-AC-3)"),
yading@10 1484 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
yading@10 1485 AV_SAMPLE_FMT_NONE },
yading@10 1486 .priv_class = &eac3_decoder_class,
yading@10 1487 };
yading@10 1488 #endif