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


#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))
#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


typedef float INTFLOAT
typedef float UINTFLOAT
typedef float SHORTFLOAT


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


#define USE_FIXED   0

Definition at line 36 of file ac3.h.


#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.


#define ROUND15 (   x)    (x)

Definition at line 65 of file ac3.h.


#define AC3_RENAME (   x)    x

Definition at line 67 of file ac3.h.


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

Definition at line 68 of file ac3.h.


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

Definition at line 69 of file ac3.h.


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

Definition at line 70 of file ac3.h.


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

Definition at line 71 of file ac3.h.


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

Definition at line 72 of file ac3.h.


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

Definition at line 73 of file ac3.h.


#define AC3_DYNAMIC_RANGE1   1.0f

Definition at line 74 of file ac3.h.


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

Definition at line 82 of file ac3.h.


#define LEVEL_PLUS_3DB   M_SQRT2

Definition at line 85 of file ac3.h.


#define LEVEL_PLUS_1POINT5DB   1.1892071150027209

Definition at line 86 of file ac3.h.


#define LEVEL_MINUS_1POINT5DB   0.8408964152537145

Definition at line 87 of file ac3.h.


#define LEVEL_MINUS_3DB   M_SQRT1_2

Definition at line 88 of file ac3.h.


#define LEVEL_MINUS_4POINT5DB   0.5946035575013605

Definition at line 89 of file ac3.h.


#define LEVEL_MINUS_6DB   0.5000000000000000

Definition at line 90 of file ac3.h.


#define LEVEL_MINUS_9DB   0.3535533905932738

Definition at line 91 of file ac3.h.


#define LEVEL_ZERO   0.0000000000000000

Definition at line 92 of file ac3.h.


#define LEVEL_ONE   1.0000000000000000

Definition at line 93 of file ac3.h.

Typedef Documentation


typedef float INTFLOAT

Definition at line 76 of file ac3.h.


typedef float UINTFLOAT

Definition at line 77 of file ac3.h.


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.

[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.

[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 0 for success, non-zero for error

Definition at line 201 of file ac3.c.

Referenced by bit_alloc_masking(), and decode_audio_block().