FFmpeg
Classes | Macros | Typedefs | 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.

Classes

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 EAC3_MAX_CHANNELS   16
 maximum number of channels in EAC3
 
#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)   (ff_ac3_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 AC3_LEVEL(x)   ROUND15((x) * FIXR15(M_SQRT1_2))
 
#define LEVEL_PLUS_3DB   M_SQRT2
 
#define LEVEL_PLUS_1POINT5DB   1.1892071150027209
 
#define LEVEL_MINUS_1POINT5DB   0.8408964152537145
 
#define LEVEL_MINUS_3DB   M_SQRT1_2
 
#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
 

Typedefs

typedef float INTFLOAT
 
typedef float SHORTFLOAT
 
typedef enum AC3DolbySurroundMode AC3DolbySurroundMode
 Dolby Surround mode.
 
typedef enum AC3DolbySurroundEXMode AC3DolbySurroundEXMode
 Dolby Surround EX mode.
 
typedef enum AC3DolbyHeadphoneMode AC3DolbyHeadphoneMode
 Dolby Headphone mode.
 
typedef enum AC3PreferredStereoDownmixMode AC3PreferredStereoDownmixMode
 Preferred Stereo Downmix mode.
 
typedef struct AC3BitAllocParameters AC3BitAllocParameters
 
typedef struct AC3HeaderInfo AC3HeaderInfo
 

Enumerations

enum  AC3DeltaStrategy { DBA_REUSE = 0, DBA_NEW, DBA_NONE, DBA_RESERVED }
 Delta bit allocation strategy.
 
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)
 
enum  AC3DolbySurroundMode { AC3_DSURMOD_NOTINDICATED = 0, AC3_DSURMOD_OFF, AC3_DSURMOD_ON, AC3_DSURMOD_RESERVED }
 Dolby Surround mode.
 
enum  AC3DolbySurroundEXMode { AC3_DSUREXMOD_NOTINDICATED = 0, AC3_DSUREXMOD_OFF, AC3_DSUREXMOD_ON, AC3_DSUREXMOD_PLIIZ }
 Dolby Surround EX mode.
 
enum  AC3DolbyHeadphoneMode { AC3_DHEADPHONMOD_NOTINDICATED = 0, AC3_DHEADPHONMOD_OFF, AC3_DHEADPHONMOD_ON, AC3_DHEADPHONMOD_RESERVED }
 Dolby Headphone mode.
 
enum  AC3PreferredStereoDownmixMode { AC3_DMIXMOD_NOTINDICATED = 0, AC3_DMIXMOD_LTRT, AC3_DMIXMOD_LORO, AC3_DMIXMOD_DPLII }
 Preferred Stereo Downmix mode.
 
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)
 
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. More...
 
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. More...
 

Detailed Description

Common code between the AC-3 encoder and decoder.

Function Documentation

§ ff_ac3_bit_alloc_calc_mask()

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

§ ff_ac3_bit_alloc_calc_psd()

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