50#ifndef AVCODEC_AC3DEC_H
51#define AVCODEC_AC3DEC_H
65#define AC3_OUTPUT_LFEON 8
67#define SPX_MAX_BANDS 17
70#define AC3_FRAME_BUFFER_SIZE 32768
Common code between the AC-3 encoder and decoder.
static av_unused void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
Apply spectral extension to each channel by copying lower frequency coefficients to higher frequency ...
static av_unused void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
Decode mantissas in a single channel for the entire frame.
static av_unused int ff_eac3_parse_header(AC3DecodeContext *s, const struct AC3HeaderInfo *hdr)
Parse the E-AC-3 frame header.
#define EAC3_MAX_CHANNELS
maximum number of channels in EAC3
#define AC3_MAX_CHANNELS
maximum number of channels, including coupling channel
#define AC3_CRITICAL_BANDS
#define AC3_MAX_CPL_BANDS
Libavcodec external API header.
static SDL_Window * window
bitstream reader API header.
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
float ff_ac3_heavy_dynamic_range_tab[256]
int preferred_stereo_downmix
AC3BitAllocParameters bit_alloc_params
bit allocation parameters
int dba_mode[AC3_MAX_CHANNELS]
delta bit allocation mode
int dolby_surround_mode
dolby surround mode (dsurmod)
uint8_t cpl_band_struct[AC3_MAX_CPL_BANDS]
int num_rematrixing_bands
number of rematrixing bands (nrematbnd)
int phase_flags[AC3_MAX_CPL_BANDS]
phase flags (phsflg)
int dialog_normalization[2]
dialog level in dBFS (dialnorm)
int superframe_size
current superframe size, in bytes
int center_mix_level_ltrt
Center mix level index for Lt/Rt (ltrtcmixlev).
int out_channels
number of output channels
int first_cpl_leak
first coupling leak state (firstcplleak)
int8_t spx_atten_code[AC3_MAX_CHANNELS]
spx attenuation code (spxattencod)
DECLARE_ALIGNED(32, INTFLOAT, transform_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]
transform coefficients
float ltrt_surround_mix_level
int fbw_channels
number of full-bandwidth channels
int cpl_coords[AC3_MAX_CHANNELS][AC3_MAX_CPL_BANDS]
coupling coordinates (cplco)
GetBitContext gbc
bitstream reader
uint8_t dba_offsets[AC3_MAX_CHANNELS][8]
delta segment offsets
int output_mode
output channel configuration
int num_exp_groups[AC3_MAX_CHANNELS]
Number of exponent groups (nexpgrp).
AVCodecContext * avctx
parent context
int start_freq[AC3_MAX_CHANNELS]
start frequency bin (strtmant)
INTFLOAT spx_signal_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS]
spx signal blending factor (sblendfact)
int dolby_surround_ex_mode
dolby surround ex mode (dsurexmod)
DECLARE_ALIGNED(32, INTFLOAT, coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]
decoded transform coefficients
int surround_mix_level_ltrt
Surround mix level index for Lt/Rt (ltrtsurmixlev).
float loro_surround_mix_level
int dba_syntax
delta bit allocation syntax enabled (dbaflde)
int snr_offset_strategy
SNR offset strategy (snroffststr).
DECLARE_ALIGNED(32, INTFLOAT, tmp_output)[AC3_BLOCK_SIZE]
temporary storage for output before windowing
int cpl_in_use[AC3_MAX_BLOCKS]
coupling in use (cplinu)
int consistent_noise_generation
seed noise generation with AC-3 frame on decode
int bitstream_id
bitstream id (bsid)
int bit_allocation_syntax
bit allocation model syntax enabled (bamode)
int downmixed
indicates if coeffs are currently downmixed
int prev_output_mode
output channel configuration for previous frame
int target_level
target level in dBFS
uint8_t dba_values[AC3_MAX_CHANNELS][8]
delta values for each segment
DECLARE_ALIGNED(32, INTFLOAT, delay)[EAC3_MAX_CHANNELS][AC3_BLOCK_SIZE]
delay - added to the next block
int snr_offset[AC3_MAX_CHANNELS]
signal-to-noise ratio offsets (snroffst)
INTFLOAT * xcfptr[AC3_MAX_CHANNELS]
int preferred_downmix
Preferred 2-channel downmix mode (dmixmod).
int16_t mask[AC3_MAX_CHANNELS][AC3_CRITICAL_BANDS]
masking curve values
int dolby_headphone_mode
dolby headphone mode (dheadphonmod)
int cpl_strategy_exists[AC3_MAX_BLOCKS]
coupling strategy exists (cplstre)
int channels
number of total channels
int dither_flag_syntax
dither flag syntax enabled (dithflage)
INTFLOAT drc_scale
percentage of dynamic range compression to be applied
int eac3_subsbtreamid_found
bitstream has E-AC-3 additional substream(s)
int first_cpl_coords[AC3_MAX_CHANNELS]
first coupling coordinates states (firstcplcos)
uint8_t dba_lengths[AC3_MAX_CHANNELS][8]
delta segment lengths
INTFLOAT spx_noise_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS]
spx noise blending factor (nblendfact)
int substreamid
substream identification
DECLARE_ALIGNED(32, INTFLOAT, window)[AC3_BLOCK_SIZE]
window coefficients
int exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS]
exponent strategies (expstr)
int frame_size
current frame size, in bytes
INTFLOAT heavy_dynamic_range[2]
heavy dynamic range compression
int firstchincpl
first channel in coupling
DECLARE_ALIGNED(32, uint8_t, input_buffer)[AC3_FRAME_BUFFER_SIZE+AV_INPUT_BUFFER_PADDING_SIZE]
temp buffer to prevent overread
int spx_dst_end_freq
spx end frequency bin
int frame_type
frame type (strmtyp)
int phase_flags_in_use
phase flags in use (phsflginu)
int lfe_mix_level
LFE mix level index (lfemixlevcod).
int fast_gain_syntax
fast gain codes enabled (frmfgaincode)
int lfe_on
lfe channel in use
int sample_rate
sample frequency, in Hz
int center_mix_level
Center mix level index.
int fast_gain[AC3_MAX_CHANNELS]
fast gain values/SMR's (fgain)
uint8_t channel_uses_spx[AC3_MAX_CHANNELS]
channel uses spectral extension (chinspx)
int spx_dst_start_freq
spx starting frequency bin for copying (copystartmant) the copy region ends at the start of the spx r...
int surround_mix_level
Surround mix level index.
int prev_bit_rate
stream bit rate, in bits-per-second for previous frame
DECLARE_ALIGNED(32, SHORTFLOAT, output_buffer)[EAC3_MAX_CHANNELS][AC3_BLOCK_SIZE *6]
final output buffer
int spx_in_use
spectral extension in use (spxinu)
int lfe_mix_level_exists
indicates if lfemixlevcod is specified (lfemixlevcode)
float loro_center_mix_level
int channel_map
custom channel map (chanmap)
uint8_t spx_band_struct[SPX_MAX_BANDS]
int bitstream_mode
bitstream mode (bsmod)
int rematrixing_flags[4]
rematrixing flags (rematflg)
AVLFG dith_state
for dither generation
SHORTFLOAT * outptr[AC3_MAX_CHANNELS]
int bit_rate
stream bit rate, in bits-per-second
uint8_t spx_band_sizes[SPX_MAX_BANDS]
number of bins in each spx band
int num_spx_bands
number of spx bands (nspxbnds)
int channel_in_cpl[AC3_MAX_CHANNELS]
channel in coupling (chincpl)
float ltrt_center_mix_level
int heavy_compression
apply heavy compression
int eac3
indicates if current frame is E-AC-3
int pre_mantissa[AC3_MAX_CHANNELS][AC3_MAX_COEFS][AC3_MAX_BLOCKS]
pre-IDCT mantissas
int channel_uses_aht[AC3_MAX_CHANNELS]
channel AHT in use (chahtinu)
int eac3_extension_type_a
bitstream has E-AC-3 extension type A enabled frame(s)
uint8_t first_spx_coords[AC3_MAX_CHANNELS]
first spx coordinates states (firstspxcos)
int spx_src_start_freq
spx start frequency bin
int skip_syntax
skip field syntax enabled (skipflde)
int dba_nsegs[AC3_MAX_CHANNELS]
number of delta segments
int16_t band_psd[AC3_MAX_CHANNELS][AC3_CRITICAL_BANDS]
interpolated exponents
int channel_mode
channel mode (acmod)
int16_t psd[AC3_MAX_CHANNELS][AC3_MAX_COEFS]
scaled exponents
DECLARE_ALIGNED(32, SHORTFLOAT, output)[EAC3_MAX_CHANNELS][AC3_BLOCK_SIZE]
output after imdct transform and windowing
uint8_t cpl_band_sizes[AC3_MAX_CPL_BANDS]
number of coeffs in each coupling band
SHORTFLOAT * downmix_coeffs[2]
stereo downmix coefficients
int num_cpl_bands
number of coupling bands (ncplbnd)
AVChannelLayout downmix_layout
INTFLOAT * dlyptr[AC3_MAX_CHANNELS]
int block_switch_syntax
block switch syntax enabled (blkswe)
int block_switch[AC3_MAX_CHANNELS]
block switch flags (blksw)
int dither_flag[AC3_MAX_CHANNELS]
dither flags (dithflg)
int lfe_ch
index of LFE channel
INTFLOAT dynamic_range[2]
dynamic range
uint8_t bap[AC3_MAX_CHANNELS][AC3_MAX_COEFS]
bit allocation pointers
int end_freq[AC3_MAX_CHANNELS]
end frequency bin (endmant)
int delay_coeff_bits[2]
coefficient format of delay[], per substream
int8_t dexps[AC3_MAX_CHANNELS][AC3_MAX_COEFS]
decoded exponents
int num_blocks
number of audio blocks
int compression_exists[2]
compression field is valid for frame (compre)
An AVChannelLayout holds information about the channel layout of audio data.
Describe the class of an AVClass context structure.
main external API structure.
Context structure for the Lagged Fibonacci PRNG.
void(* av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride)
Function pointer to a function to perform the transform.