#include <stdio.h>
#include <stddef.h>
#include <math.h>
#include <string.h>
#include "libavutil/crc.h"
#include "libavutil/opt.h"
#include "internal.h"
#include "aac_ac3_parser.h"
#include "ac3_parser.h"
#include "ac3dec.h"
#include "ac3dec_data.h"
#include "kbdwin.h"
Go to the source code of this file.
Data Structures | |
struct | mant_groups |
Grouped mantissas for 3-level 5-level and 11-level quantization. More... | |
Defines | |
#define | OFFSET(x) offsetof(AC3DecodeContext, x) |
#define | PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM) |
Functions | |
static int | symmetric_dequant (int code, int levels) |
Symmetrical Dequantization reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization Tables 7.19 to 7.23. | |
static av_cold void | ac3_tables_init (void) |
static av_cold int | ac3_decode_init (AVCodecContext *avctx) |
AVCodec initialization. | |
static int | ac3_parse_header (AC3DecodeContext *s) |
Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream. | |
static int | parse_frame_header (AC3DecodeContext *s) |
Common function to parse AC-3 or E-AC-3 frame header. | |
static void | set_downmix_coeffs (AC3DecodeContext *s) |
Set stereo downmixing coefficients based on frame header info. | |
static int | decode_exponents (GetBitContext *gbc, int exp_strategy, int ngrps, uint8_t absexp, int8_t *dexps) |
Decode the grouped exponents according to exponent strategy. | |
static void | calc_transform_coeffs_cpl (AC3DecodeContext *s) |
Generate transform coefficients for each coupled channel in the coupling range using the coupling coefficients and coupling coordinates. | |
static void | ac3_decode_transform_coeffs_ch (AC3DecodeContext *s, int ch_index, mant_groups *m) |
Decode the transform coefficients for a particular channel reference: Section 7.3 Quantization and Decoding of Mantissas. | |
static void | remove_dithering (AC3DecodeContext *s) |
Remove random dithering from coupling range coefficients with zero-bit mantissas for coupled channels which do not use dithering. | |
static void | decode_transform_coeffs_ch (AC3DecodeContext *s, int blk, int ch, mant_groups *m) |
static void | decode_transform_coeffs (AC3DecodeContext *s, int blk) |
Decode the transform coefficients. | |
static void | do_rematrixing (AC3DecodeContext *s) |
Stereo rematrixing. | |
static void | do_imdct (AC3DecodeContext *s, int channels) |
Inverse MDCT Transform. | |
static void | ac3_upmix_delay (AC3DecodeContext *s) |
Upmix delay samples from stereo to original channel layout. | |
static void | decode_band_structure (GetBitContext *gbc, int blk, int eac3, int ecpl, int start_subband, int end_subband, const uint8_t *default_band_struct, int *num_bands, uint8_t *band_sizes) |
Decode band structure for coupling, spectral extension, or enhanced coupling. | |
static int | decode_audio_block (AC3DecodeContext *s, int blk) |
Decode a single audio block from the AC-3 bitstream. | |
static int | ac3_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) |
Decode a single AC-3 frame. | |
static av_cold int | ac3_decode_end (AVCodecContext *avctx) |
Uninitialize the AC-3 decoder. | |
Variables | |
static uint8_t | ungroup_3_in_7_bits_tab [128][3] |
table for ungrouping 3 values in 7 bits. | |
static int | b1_mantissas [32][3] |
tables for ungrouping mantissas | |
static int | b2_mantissas [128][3] |
static int | b3_mantissas [8] |
static int | b4_mantissas [128][2] |
static int | b5_mantissas [16] |
static const uint8_t | quantization_tab [16] |
Quantization table: levels for symmetric. | |
static float | dynamic_range_tab [256] |
dynamic range table. | |
static const float | gain_levels [9] |
Adjustments in dB gain. | |
static const uint8_t | ac3_default_coeffs [8][5][2] |
Table for default stereo downmixing coefficients reference: Section 7.8.2 Downmixing Into Two Channels. | |
static const AVOption | options [] |
static const AVClass | ac3_decoder_class |
AVCodec | ff_ac3_decoder |
#define OFFSET | ( | x | ) | offsetof(AC3DecodeContext, x) |
#define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM) |
static av_cold int ac3_decode_end | ( | AVCodecContext * | avctx | ) | [static] |
static int ac3_decode_frame | ( | AVCodecContext * | avctx, | |
void * | data, | |||
int * | got_frame_ptr, | |||
AVPacket * | avpkt | |||
) | [static] |
static av_cold int ac3_decode_init | ( | AVCodecContext * | avctx | ) | [static] |
static void ac3_decode_transform_coeffs_ch | ( | AC3DecodeContext * | s, | |
int | ch_index, | |||
mant_groups * | m | |||
) | [static] |
Decode the transform coefficients for a particular channel reference: Section 7.3 Quantization and Decoding of Mantissas.
Definition at line 428 of file ac3dec.c.
Referenced by decode_transform_coeffs_ch().
static int ac3_parse_header | ( | AC3DecodeContext * | s | ) | [static] |
Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
GetBitContext within AC3DecodeContext must point to the start of the synchronized AC-3 bitstream.
Definition at line 203 of file ac3dec.c.
Referenced by parse_frame_header().
static av_cold void ac3_tables_init | ( | void | ) | [static] |
static void ac3_upmix_delay | ( | AC3DecodeContext * | s | ) | [static] |
Upmix delay samples from stereo to original channel layout.
Definition at line 626 of file ac3dec.c.
Referenced by decode_audio_block().
static void calc_transform_coeffs_cpl | ( | AC3DecodeContext * | s | ) | [static] |
Generate transform coefficients for each coupled channel in the coupling range using the coupling coefficients and coupling coordinates.
reference: Section 7.4.3 Coupling Coordinate Format
Definition at line 387 of file ac3dec.c.
Referenced by decode_transform_coeffs().
static int decode_audio_block | ( | AC3DecodeContext * | s, | |
int | blk | |||
) | [static] |
Decode a single audio block from the AC-3 bitstream.
Definition at line 719 of file ac3dec.c.
Referenced by ac3_decode_frame().
static void decode_band_structure | ( | GetBitContext * | gbc, | |
int | blk, | |||
int | eac3, | |||
int | ecpl, | |||
int | start_subband, | |||
int | end_subband, | |||
const uint8_t * | default_band_struct, | |||
int * | num_bands, | |||
uint8_t * | band_sizes | |||
) | [static] |
Decode band structure for coupling, spectral extension, or enhanced coupling.
The band structure defines how many subbands are in each band. For each subband in the range, 1 means it is combined with the previous band, and 0 means that it starts a new band.
[in] | gbc | bit reader context |
[in] | blk | block number |
[in] | eac3 | flag to indicate E-AC-3 |
[in] | ecpl | flag to indicate enhanced coupling |
[in] | start_subband | subband number for start of range |
[in] | end_subband | subband number for end of range |
[in] | default_band_struct | default band structure table |
[out] | num_bands | number of bands (optionally NULL) |
[out] | band_sizes | array containing the number of bins in each band (optionally NULL) |
Definition at line 667 of file ac3dec.c.
Referenced by decode_audio_block().
static int decode_exponents | ( | GetBitContext * | gbc, | |
int | exp_strategy, | |||
int | ngrps, | |||
uint8_t | absexp, | |||
int8_t * | dexps | |||
) | [static] |
Decode the grouped exponents according to exponent strategy.
reference: Section 7.1.3 Exponent Decoding
Definition at line 350 of file ac3dec.c.
Referenced by decode_audio_block().
static void decode_transform_coeffs | ( | AC3DecodeContext * | s, | |
int | blk | |||
) | [static] |
Decode the transform coefficients.
Definition at line 538 of file ac3dec.c.
Referenced by decode_audio_block().
static void decode_transform_coeffs_ch | ( | AC3DecodeContext * | s, | |
int | blk, | |||
int | ch, | |||
mant_groups * | m | |||
) | [static] |
static void do_imdct | ( | AC3DecodeContext * | s, | |
int | channels | |||
) | [inline, static] |
Inverse MDCT Transform.
Convert frequency domain coefficients to time-domain audio samples. reference: Section 7.9.4 Transformation Equations
Definition at line 598 of file ac3dec.c.
Referenced by decode_audio_block().
static void do_rematrixing | ( | AC3DecodeContext * | s | ) | [static] |
Stereo rematrixing.
reference: Section 7.5.4 Rematrixing : Decoding Technique
Definition at line 574 of file ac3dec.c.
Referenced by decode_audio_block().
static int parse_frame_header | ( | AC3DecodeContext * | s | ) | [static] |
Common function to parse AC-3 or E-AC-3 frame header.
Definition at line 243 of file ac3dec.c.
Referenced by ac3_decode_frame().
static void remove_dithering | ( | AC3DecodeContext * | s | ) | [static] |
Remove random dithering from coupling range coefficients with zero-bit mantissas for coupled channels which do not use dithering.
reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
Definition at line 505 of file ac3dec.c.
Referenced by decode_transform_coeffs().
static void set_downmix_coeffs | ( | AC3DecodeContext * | s | ) | [static] |
Set stereo downmixing coefficients based on frame header info.
reference: Section 7.8.2 Downmixing Into Two Channels
Definition at line 303 of file ac3dec.c.
Referenced by ac3_decode_frame().
Symmetrical Dequantization reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization Tables 7.19 to 7.23.
Definition at line 100 of file ac3dec.c.
Referenced by ac3_tables_init().
const AVClass ac3_decoder_class [static] |
Initial value:
{ .class_name = "AC3 decoder", .item_name = av_default_item_name, .option = options, .version = LIBAVUTIL_VERSION_INT, }
const uint8_t ac3_default_coeffs[8][5][2] [static] |
Initial value:
{ { { 2, 7 }, { 7, 2 }, }, { { 4, 4 }, }, { { 2, 7 }, { 7, 2 }, }, { { 2, 7 }, { 5, 5 }, { 7, 2 }, }, { { 2, 7 }, { 7, 2 }, { 6, 6 }, }, { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, }, { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, }, { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, }, }
Definition at line 83 of file ac3dec.c.
Referenced by set_downmix_coeffs().
int b1_mantissas[32][3] [static] |
tables for ungrouping mantissas
Definition at line 48 of file ac3dec.c.
Referenced by ac3_decode_transform_coeffs_ch(), and ac3_tables_init().
int b2_mantissas[128][3] [static] |
Definition at line 49 of file ac3dec.c.
Referenced by ac3_decode_transform_coeffs_ch(), and ac3_tables_init().
int b3_mantissas[8] [static] |
Definition at line 50 of file ac3dec.c.
Referenced by ac3_decode_transform_coeffs_ch(), and ac3_tables_init().
int b4_mantissas[128][2] [static] |
Definition at line 51 of file ac3dec.c.
Referenced by ac3_decode_transform_coeffs_ch(), and ac3_tables_init().
int b5_mantissas[16] [static] |
Definition at line 52 of file ac3dec.c.
Referenced by ac3_decode_transform_coeffs_ch(), and ac3_tables_init().
float dynamic_range_tab[256] [static] |
dynamic range table.
converts codes to scale factors.
Definition at line 64 of file ac3dec.c.
Referenced by ac3_tables_init(), and decode_audio_block().
Initial value:
{ .name = "ac3", .type = AVMEDIA_TYPE_AUDIO, .id = AV_CODEC_ID_AC3, .priv_data_size = sizeof (AC3DecodeContext), .init = ac3_decode_init, .close = ac3_decode_end, .decode = ac3_decode_frame, .capabilities = CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"), .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .priv_class = &ac3_decoder_class, }
const float gain_levels[9] [static] |
Initial value:
{ LEVEL_PLUS_3DB, LEVEL_PLUS_1POINT5DB, LEVEL_ONE, LEVEL_MINUS_1POINT5DB, LEVEL_MINUS_3DB, LEVEL_MINUS_4POINT5DB, LEVEL_MINUS_6DB, LEVEL_ZERO, LEVEL_MINUS_9DB }
Definition at line 67 of file ac3dec.c.
Referenced by ac3_decode_frame(), and set_downmix_coeffs().
Initial value:
{ { "drc_scale", "percentage of dynamic range compression to apply", OFFSET(drc_scale), AV_OPT_TYPE_FLOAT, {.dbl = 1.0}, 0.0, 1.0, PAR }, {"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 2, 0, "dmix_mode"}, {"ltrt_cmixlev", "Lt/Rt Center Mix Level", OFFSET(ltrt_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, {"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, {"loro_cmixlev", "Lo/Ro Center Mix Level", OFFSET(loro_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, {"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, { NULL}, }
const uint8_t quantization_tab[16] [static] |
Initial value:
{ 0, 3, 5, 7, 11, 15, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 }
bits for asymmetric. reference: Table 7.18 Mapping of bap to Quantizer
Definition at line 58 of file ac3dec.c.
Referenced by ac3_decode_transform_coeffs_ch().
uint8_t ungroup_3_in_7_bits_tab[128][3] [static] |
table for ungrouping 3 values in 7 bits.
used for exponents and bap=2 mantissas
Definition at line 45 of file ac3dec.c.
Referenced by ac3_tables_init(), and decode_exponents().