FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Data Structures | Macros | Typedefs | Functions
ac3.h File Reference
#include <math.h>
#include <stdint.h>
#include "ac3tab.h"
#include "libavutil/libm.h"

Go to the source code of this file.

Data Structures

struct  AC3BitAllocParameters
 

Macros

#define USE_FIXED   0
 
#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))
 

Typedefs

typedef float INTFLOAT
 
typedef float UINTFLOAT
 
typedef float SHORTFLOAT
 

Functions

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.

Definition in file ac3.h.

Macro Definition Documentation

◆ USE_FIXED

#define USE_FIXED   0

Definition at line 36 of file ac3.h.

◆ FIXR

#define FIXR (   x)    ((float)(x))

Definition at line 62 of file ac3.h.

◆ FIXR12

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

Definition at line 63 of file ac3.h.

◆ FIXR15

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

Definition at line 64 of file ac3.h.

◆ ROUND15

#define ROUND15 (   x)    (x)

Definition at line 65 of file ac3.h.

◆ AC3_RENAME

#define AC3_RENAME (   x)    x

Definition at line 67 of file ac3.h.

◆ AC3_NORM

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

Definition at line 68 of file ac3.h.

◆ AC3_MUL

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

Definition at line 69 of file ac3.h.

◆ AC3_RANGE

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

Definition at line 70 of file ac3.h.

◆ AC3_HEAVY_RANGE

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

Definition at line 71 of file ac3.h.

◆ AC3_DYNAMIC_RANGE

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

Definition at line 72 of file ac3.h.

◆ AC3_SPX_BLEND

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

Definition at line 73 of file ac3.h.

◆ AC3_DYNAMIC_RANGE1

#define AC3_DYNAMIC_RANGE1   1.0f

Definition at line 74 of file ac3.h.

◆ AC3_LEVEL

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

Definition at line 82 of file ac3.h.

Typedef Documentation

◆ INTFLOAT

typedef float INTFLOAT

Definition at line 76 of file ac3.h.

◆ UINTFLOAT

typedef float UINTFLOAT

Definition at line 77 of file ac3.h.

◆ SHORTFLOAT

typedef float SHORTFLOAT

Definition at line 78 of file ac3.h.

Function Documentation

◆ 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

Definition at line 175 of file ac3.c.

Referenced by bit_alloc_masking(), and decode_audio_block().

◆ 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

Definition at line 201 of file ac3.c.

Referenced by bit_alloc_masking(), and decode_audio_block().