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 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  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(), and set_channel_info().

#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 LEVEL_PLUS_3DB   1.4142135623730950

Definition at line 55 of file ac3.h.

#define LEVEL_PLUS_1POINT5DB   1.1892071150027209

Definition at line 56 of file ac3.h.

#define LEVEL_MINUS_1POINT5DB   0.8408964152537145

Definition at line 57 of file ac3.h.

#define LEVEL_MINUS_3DB   0.7071067811865476

Definition at line 58 of file ac3.h.

Referenced by ac3_decode_frame(), and set_downmix_coeffs().

#define LEVEL_MINUS_4POINT5DB   0.5946035575013605

Definition at line 59 of file ac3.h.

#define LEVEL_MINUS_6DB   0.5000000000000000

Definition at line 60 of file ac3.h.

#define LEVEL_MINUS_9DB   0.3535533905932738

Definition at line 61 of file ac3.h.

#define LEVEL_ZERO   0.0000000000000000

Definition at line 62 of file ac3.h.

#define LEVEL_ONE   1.0000000000000000

Definition at line 63 of file ac3.h.

Enumeration Type Documentation

Delta bit allocation strategy.

Enumerator:
DBA_REUSE 
DBA_NEW 
DBA_NONE 
DBA_RESERVED 

Definition at line 66 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 74 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 127 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().