FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions
ac3.h File Reference

Common code between the AC-3 encoder and decoder. More...

#include "libavutil/opt.h"
#include "avcodec.h"
#include "ac3tab.h"

Go to the source code of this file.

Data Structures

struct  AC3BitAllocParameters
 
struct  AC3HeaderInfo
 Coded AC-3 header values up to the lfeon element, plus derived values. More...
 

Macros

#define AC3_MAX_CODED_FRAME_SIZE   3840 /* in bytes */
 
#define AC3_MAX_CHANNELS   7
 maximum number of channels, including coupling channel
 
#define CPL_CH   0
 coupling channel index
 
#define AC3_MAX_COEFS   256
 
#define AC3_BLOCK_SIZE   256
 
#define AC3_MAX_BLOCKS   6
 
#define AC3_FRAME_SIZE   (AC3_MAX_BLOCKS * 256)
 
#define AC3_WINDOW_SIZE   (AC3_BLOCK_SIZE * 2)
 
#define AC3_CRITICAL_BANDS   50
 
#define AC3_MAX_CPL_BANDS   18
 
#define EXP_REUSE   0
 
#define EXP_NEW   1
 
#define EXP_D15   1
 
#define EXP_D25   2
 
#define EXP_D45   3
 
#define FIXR(x)   ((float)(x))
 
#define FIXR12(x)   ((float)(x))
 
#define FIXR15(x)   ((float)(x))
 
#define ROUND15(x)   (x)
 
#define AC3_RENAME(x)   x
 
#define AC3_NORM(norm)   (1.0f/(norm))
 
#define AC3_MUL(a, b)   ((a) * (b))
 
#define AC3_RANGE(x)   (dynamic_range_tab[(x)])
 
#define AC3_HEAVY_RANGE(x)   (heavy_dynamic_range_tab[(x)])
 
#define AC3_DYNAMIC_RANGE(x)   (powf(x, s->drc_scale))
 
#define AC3_SPX_BLEND(x)   (x)* (1.0f/32)
 
#define AC3_DYNAMIC_RANGE1   1.0f
 
#define INTFLOAT   float
 
#define SHORTFLOAT   float
 
#define AC3_LEVEL(x)   ROUND15((x) * FIXR15(0.7071067811865476))
 
#define LEVEL_PLUS_3DB   1.4142135623730950
 
#define LEVEL_PLUS_1POINT5DB   1.1892071150027209
 
#define LEVEL_MINUS_1POINT5DB   0.8408964152537145
 
#define LEVEL_MINUS_3DB   0.7071067811865476
 
#define LEVEL_MINUS_4POINT5DB   0.5946035575013605
 
#define LEVEL_MINUS_6DB   0.5000000000000000
 
#define LEVEL_MINUS_9DB   0.3535533905932738
 
#define LEVEL_ZERO   0.0000000000000000
 
#define LEVEL_ONE   1.0000000000000000
 

Enumerations

enum  AC3DeltaStrategy { DBA_REUSE = 0, DBA_NEW, DBA_NONE, DBA_RESERVED }
 Delta bit allocation strategy. More...
 
enum  AC3ChannelMode {
  AC3_CHMODE_DUALMONO = 0, AC3_CHMODE_MONO, AC3_CHMODE_STEREO, AC3_CHMODE_3F,
  AC3_CHMODE_2F1R, AC3_CHMODE_3F1R, AC3_CHMODE_2F2R, AC3_CHMODE_3F2R
}
 Channel mode (audio coding mode) More...
 
enum  AC3DolbySurroundMode { AC3_DSURMOD_NOTINDICATED = 0, AC3_DSURMOD_OFF, AC3_DSURMOD_ON, AC3_DSURMOD_RESERVED }
 Dolby Surround mode. More...
 
enum  AC3DolbySurroundEXMode { AC3_DSUREXMOD_NOTINDICATED = 0, AC3_DSUREXMOD_OFF, AC3_DSUREXMOD_ON, AC3_DSUREXMOD_PLIIZ }
 Dolby Surround EX mode. More...
 
enum  AC3DolbyHeadphoneMode { AC3_DHEADPHONMOD_NOTINDICATED = 0, AC3_DHEADPHONMOD_OFF, AC3_DHEADPHONMOD_ON, AC3_DHEADPHONMOD_RESERVED }
 Dolby Headphone mode. More...
 
enum  AC3PreferredStereoDownmixMode { AC3_DMIXMOD_NOTINDICATED = 0, AC3_DMIXMOD_LTRT, AC3_DMIXMOD_LORO, AC3_DMIXMOD_DPLII }
 Preferred Stereo Downmix mode. More...
 
enum  EAC3FrameType { EAC3_FRAME_TYPE_INDEPENDENT = 0, EAC3_FRAME_TYPE_DEPENDENT, EAC3_FRAME_TYPE_AC3_CONVERT, EAC3_FRAME_TYPE_RESERVED }
 

Functions

void ff_ac3_common_init (void)
 Initialize some tables.
 
void ff_ac3_bit_alloc_calc_psd (int8_t *exp, int start, int end, int16_t *psd, int16_t *band_psd)
 Calculate the log power-spectral density of the input signal.
 
int ff_ac3_bit_alloc_calc_mask (AC3BitAllocParameters *s, int16_t *band_psd, int start, int end, int fast_gain, int is_lfe, int dba_mode, int dba_nsegs, uint8_t *dba_offsets, uint8_t *dba_lengths, uint8_t *dba_values, int16_t *mask)
 Calculate the masking curve.
 

Detailed Description

Common code between the AC-3 encoder and decoder.

Definition in file ac3.h.

Macro Definition Documentation

#define AC3_MAX_CODED_FRAME_SIZE   3840 /* in bytes */

Definition at line 30 of file ac3.h.

Referenced by ff_ac3_output_frame().

#define AC3_MAX_CHANNELS   7

maximum number of channels, including coupling channel

Definition at line 31 of file ac3.h.

Referenced by ac3_decode_frame(), ac3_decode_init(), apply_channel_coupling(), decode_audio_block(), ff_eac3_set_cpl_states(), set_channel_info(), and set_downmix_coeffs().

#define CPL_CH   0
#define AC3_MAX_COEFS   256
#define AC3_BLOCK_SIZE   256
#define AC3_MAX_BLOCKS   6
#define AC3_FRAME_SIZE   (AC3_MAX_BLOCKS * 256)
#define AC3_WINDOW_SIZE   (AC3_BLOCK_SIZE * 2)

Definition at line 38 of file ac3.h.

Referenced by allocate_sample_buffers(), apply_mdct(), and normalize_samples().

#define AC3_CRITICAL_BANDS   50

Definition at line 39 of file ac3.h.

Referenced by ff_ac3_bit_alloc_calc_mask(), and ff_ac3_common_init().

#define AC3_MAX_CPL_BANDS   18

Definition at line 40 of file ac3.h.

#define EXP_REUSE   0
#define EXP_NEW   1

Definition at line 48 of file ac3.h.

Referenced by compute_exp_strategy().

#define EXP_D15   1

Definition at line 50 of file ac3.h.

Referenced by compute_exp_strategy(), and exponent_init().

#define EXP_D25   2

Definition at line 51 of file ac3.h.

Referenced by encode_exponents_blk_ch().

#define EXP_D45   3
#define FIXR (   x)    ((float)(x))

Definition at line 81 of file ac3.h.

Referenced by decode_init_static().

#define FIXR12 (   x)    ((float)(x))

Definition at line 82 of file ac3.h.

Referenced by set_downmix_coeffs().

#define FIXR15 (   x)    ((float)(x))

Definition at line 83 of file ac3.h.

#define ROUND15 (   x)    (x)

Definition at line 84 of file ac3.h.

#define AC3_RENAME (   x)    x

Definition at line 86 of file ac3.h.

Referenced by ac3_decode_init().

#define AC3_NORM (   norm)    (1.0f/(norm))

Definition at line 87 of file ac3.h.

#define AC3_MUL (   a,
  b 
)    ((a) * (b))

Definition at line 88 of file ac3.h.

#define AC3_RANGE (   x)    (dynamic_range_tab[(x)])

Definition at line 89 of file ac3.h.

Referenced by decode_audio_block().

#define AC3_HEAVY_RANGE (   x)    (heavy_dynamic_range_tab[(x)])

Definition at line 90 of file ac3.h.

Referenced by ac3_parse_header().

#define AC3_DYNAMIC_RANGE (   x)    (powf(x, s->drc_scale))

Definition at line 91 of file ac3.h.

Referenced by decode_audio_block().

#define AC3_SPX_BLEND (   x)    (x)* (1.0f/32)

Definition at line 92 of file ac3.h.

Referenced by decode_audio_block().

#define AC3_DYNAMIC_RANGE1   1.0f

Definition at line 93 of file ac3.h.

Referenced by decode_audio_block().

#define INTFLOAT   float
#define SHORTFLOAT   float

Definition at line 96 of file ac3.h.

Referenced by ac3_decode_frame().

#define AC3_LEVEL (   x)    ROUND15((x) * FIXR15(0.7071067811865476))

Definition at line 100 of file ac3.h.

#define LEVEL_PLUS_3DB   1.4142135623730950

Definition at line 103 of file ac3.h.

#define LEVEL_PLUS_1POINT5DB   1.1892071150027209

Definition at line 104 of file ac3.h.

#define LEVEL_MINUS_1POINT5DB   0.8408964152537145

Definition at line 105 of file ac3.h.

#define LEVEL_MINUS_3DB   0.7071067811865476

Definition at line 106 of file ac3.h.

Referenced by ac3_decode_frame(), and set_downmix_coeffs().

#define LEVEL_MINUS_4POINT5DB   0.5946035575013605

Definition at line 107 of file ac3.h.

#define LEVEL_MINUS_6DB   0.5000000000000000

Definition at line 108 of file ac3.h.

#define LEVEL_MINUS_9DB   0.3535533905932738

Definition at line 109 of file ac3.h.

#define LEVEL_ZERO   0.0000000000000000

Definition at line 110 of file ac3.h.

#define LEVEL_ONE   1.0000000000000000

Definition at line 111 of file ac3.h.

Enumeration Type Documentation

Delta bit allocation strategy.

Enumerator:
DBA_REUSE 
DBA_NEW 
DBA_NONE 
DBA_RESERVED 

Definition at line 114 of file ac3.h.

Channel mode (audio coding mode)

Enumerator:
AC3_CHMODE_DUALMONO 
AC3_CHMODE_MONO 
AC3_CHMODE_STEREO 
AC3_CHMODE_3F 
AC3_CHMODE_2F1R 
AC3_CHMODE_3F1R 
AC3_CHMODE_2F2R 
AC3_CHMODE_3F2R 

Definition at line 122 of file ac3.h.

Dolby Surround mode.

Enumerator:
AC3_DSURMOD_NOTINDICATED 
AC3_DSURMOD_OFF 
AC3_DSURMOD_ON 
AC3_DSURMOD_RESERVED 

Definition at line 134 of file ac3.h.

Dolby Surround EX mode.

Enumerator:
AC3_DSUREXMOD_NOTINDICATED 
AC3_DSUREXMOD_OFF 
AC3_DSUREXMOD_ON 
AC3_DSUREXMOD_PLIIZ 

Definition at line 142 of file ac3.h.

Dolby Headphone mode.

Enumerator:
AC3_DHEADPHONMOD_NOTINDICATED 
AC3_DHEADPHONMOD_OFF 
AC3_DHEADPHONMOD_ON 
AC3_DHEADPHONMOD_RESERVED 

Definition at line 150 of file ac3.h.

Preferred Stereo Downmix mode.

Enumerator:
AC3_DMIXMOD_NOTINDICATED 
AC3_DMIXMOD_LTRT 
AC3_DMIXMOD_LORO 
AC3_DMIXMOD_DPLII 

Definition at line 158 of file ac3.h.

Enumerator:
EAC3_FRAME_TYPE_INDEPENDENT 
EAC3_FRAME_TYPE_DEPENDENT 
EAC3_FRAME_TYPE_AC3_CONVERT 
EAC3_FRAME_TYPE_RESERVED 

Definition at line 213 of file ac3.h.

Function Documentation

void ff_ac3_common_init ( void  )

Initialize some tables.

note: This function must remain thread safe because it is called by the AVParser init code.

Definition at line 220 of file ac3.c.

Referenced by ac3_decode_init(), and ff_ac3_encode_init().

void ff_ac3_bit_alloc_calc_psd ( int8_t *  exp,
int  start,
int  end,
int16_t *  psd,
int16_t *  band_psd 
)

Calculate the log power-spectral density of the input signal.

This gives a rough estimate of signal power in the frequency domain by using the spectral envelope (exponents). The psd is also separately grouped into critical bands for use in the calculating the masking curve. 128 units in psd = -6 dB. The dbknee parameter in AC3BitAllocParameters determines the reference level.

Parameters
[in]expfrequency coefficient exponents
[in]startstarting bin location
[in]endending bin location
[out]psdsignal power for each frequency bin
[out]band_psdsignal power for each critical band

Definition at line 97 of file ac3.c.

Referenced by bit_alloc_masking(), and decode_audio_block().

int ff_ac3_bit_alloc_calc_mask ( AC3BitAllocParameters s,
int16_t *  band_psd,
int  start,
int  end,
int  fast_gain,
int  is_lfe,
int  dba_mode,
int  dba_nsegs,
uint8_t dba_offsets,
uint8_t dba_lengths,
uint8_t dba_values,
int16_t *  mask 
)

Calculate the masking curve.

First, the excitation is calculated using parameters in s and the signal power in each critical band. The excitation is compared with a predefined hearing threshold table to produce the masking curve. If delta bit allocation information is provided, it is used for adjusting the masking curve, usually to give a closer match to a better psychoacoustic model.

Parameters
[in]sadjustable bit allocation parameters
[in]band_psdsignal power for each critical band
[in]startstarting bin location
[in]endending bin location
[in]fast_gainfast gain (estimated signal-to-mask ratio)
[in]is_lfewhether or not the channel being processed is the LFE
[in]dba_modedelta bit allocation mode (none, reuse, or new)
[in]dba_nsegsnumber of delta segments
[in]dba_offsetslocation offsets for each segment
[in]dba_lengthslength of each segment
[in]dba_valuesdelta bit allocation for each segment
[out]maskcalculated masking curve
Returns
returns 0 for success, non-zero for error

Definition at line 123 of file ac3.c.

Referenced by bit_alloc_masking(), and decode_audio_block().