FFmpeg  4.0
Data Structures | Macros | Functions | Variables
mpegaudiodec_template.c File Reference

MPEG Audio decoder. More...

#include "libavutil/attributes.h"
#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "libavutil/float_dsp.h"
#include "libavutil/libm.h"
#include "avcodec.h"
#include "get_bits.h"
#include "internal.h"
#include "mathops.h"
#include "mpegaudiodsp.h"
#include "mpegaudio.h"
#include "mpegaudiodecheader.h"
#include "mpegaudiodata.h"
#include "mpegaudiodectab.h"
#include "mpegaudio_tablegen.h"

Go to the source code of this file.

Data Structures

struct  GranuleDef
 
struct  MPADecodeContext
 

Macros

#define BACKSTEP_SIZE   512
 
#define EXTRABYTES   24
 
#define LAST_BUF_SIZE   2 * BACKSTEP_SIZE + EXTRABYTES
 
#define HEADER_SIZE   4
 
#define SCALE_GEN(v)   { FIXR_OLD(1.0 * (v)), FIXR_OLD(0.7937005259 * (v)), FIXR_OLD(0.6299605249 * (v)) }
 
#define C3   FIXHR(0.86602540378443864676/2)
 
#define C4   FIXHR(0.70710678118654752439/2)
 
#define C5   FIXHR(0.51763809020504152469/2)
 
#define C6   FIXHR(1.93185165257813657349/4)
 
#define SPLIT(dst, sf, n)
 
#define READ_FLIP_SIGN(dst, src)
 
#define ISQRT2   FIXR(0.70710678118654752440)
 
#define AA(j)
 

Functions

static void region_offset2size (GranuleDef *g)
 Convert region offsets to region sizes and truncate size to big_values. More...
 
static void init_short_region (MPADecodeContext *s, GranuleDef *g)
 
static void init_long_region (MPADecodeContext *s, GranuleDef *g, int ra1, int ra2)
 
static void compute_band_indexes (MPADecodeContext *s, GranuleDef *g)
 
static int l1_unscale (int n, int mant, int scale_factor)
 
static int l2_unscale_group (int steps, int mant, int scale_factor)
 
static int l3_unscale (int value, int exponent)
 
static av_cold void decode_init_static (void)
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static void imdct12 (INTFLOAT *out, SUINTFLOAT *in)
 
static int mp_decode_layer1 (MPADecodeContext *s)
 
static int mp_decode_layer2 (MPADecodeContext *s)
 
static av_always_inline void lsf_sf_expand (int *slen, int sf, int n1, int n2, int n3)
 
static void exponents_from_scale_factors (MPADecodeContext *s, GranuleDef *g, int16_t *exponents)
 
static void switch_buffer (MPADecodeContext *s, int *pos, int *end_pos, int *end_pos2)
 
static int huffman_decode (MPADecodeContext *s, GranuleDef *g, int16_t *exponents, int end_pos2)
 
static void reorder_block (MPADecodeContext *s, GranuleDef *g)
 
static void compute_stereo (MPADecodeContext *s, GranuleDef *g0, GranuleDef *g1)
 
static void compute_antialias (MPADecodeContext *s, GranuleDef *g)
 
static void compute_imdct (MPADecodeContext *s, GranuleDef *g, INTFLOAT *sb_samples, INTFLOAT *mdct_buf)
 
static int mp_decode_layer3 (MPADecodeContext *s)
 
static int mp_decode_frame (MPADecodeContext *s, OUT_INT **samples, const uint8_t *buf, int buf_size)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 
static void mp_flush (MPADecodeContext *ctx)
 
static void flush (AVCodecContext *avctx)
 

Variables

static VLC huff_vlc [16]
 
static VLC_TYPE huff_vlc_tables [0+128+128+128+130+128+154+166+142+204+190+170+542+460+662+414][2]
 
static const int huff_vlc_tables_sizes [16]
 
static VLC huff_quad_vlc [2]
 
static VLC_TYPE huff_quad_vlc_tables [128+16][2]
 
static const int huff_quad_vlc_tables_sizes [2] = { 128, 16 }
 
static uint16_t band_index_long [9][23]
 
static INTFLOAT is_table [2][16]
 
static INTFLOAT is_table_lsf [2][2][16]
 
static INTFLOAT csa_table [8][4]
 
static int16_t division_tab3 [1<< 6]
 
static int16_t division_tab5 [1<< 8]
 
static int16_t division_tab9 [1<< 11]
 
static int16_t *const division_tabs [4]
 
static uint16_t scale_factor_modshift [64]
 
static int32_t scale_factor_mult [15][3]
 
static const int32_t scale_factor_mult2 [3][3]
 

Detailed Description

MPEG Audio decoder.

Definition in file mpegaudiodec_template.c.

Macro Definition Documentation

◆ BACKSTEP_SIZE

#define BACKSTEP_SIZE   512

Definition at line 46 of file mpegaudiodec_template.c.

Referenced by mp_decode_frame().

◆ EXTRABYTES

#define EXTRABYTES   24

Definition at line 47 of file mpegaudiodec_template.c.

◆ LAST_BUF_SIZE

#define LAST_BUF_SIZE   2 * BACKSTEP_SIZE + EXTRABYTES

Definition at line 48 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ HEADER_SIZE

#define HEADER_SIZE   4

Definition at line 93 of file mpegaudiodec_template.c.

Referenced by decode_frame(), flush(), and mp_decode_frame().

◆ SCALE_GEN

#define SCALE_GEN (   v)    { FIXR_OLD(1.0 * (v)), FIXR_OLD(0.7937005259 * (v)), FIXR_OLD(0.6299605249 * (v)) }

Definition at line 133 of file mpegaudiodec_template.c.

◆ C3

#define C3   FIXHR(0.86602540378443864676/2)

Definition at line 454 of file mpegaudiodec_template.c.

Referenced by imdct12().

◆ C4

#define C4   FIXHR(0.70710678118654752439/2)

Definition at line 455 of file mpegaudiodec_template.c.

Referenced by imdct12().

◆ C5

#define C5   FIXHR(0.51763809020504152469/2)

Definition at line 456 of file mpegaudiodec_template.c.

Referenced by imdct12().

◆ C6

#define C6   FIXHR(1.93185165257813657349/4)

Definition at line 457 of file mpegaudiodec_template.c.

Referenced by imdct12().

◆ SPLIT

#define SPLIT (   dst,
  sf,
  n 
)
Value:
if (n == 3) { \
int m = (sf * 171) >> 9; \
dst = sf - 3 * m; \
sf = m; \
} else if (n == 4) { \
dst = sf & 3; \
sf >>= 2; \
} else if (n == 5) { \
int m = (sf * 205) >> 10; \
dst = sf - 5 * m; \
sf = m; \
} else if (n == 6) { \
int m = (sf * 171) >> 10; \
dst = sf - 6 * m; \
sf = m; \
} else { \
dst = 0; \
}
int n
Definition: avisynth_c.h:684

Definition at line 755 of file mpegaudiodec_template.c.

Referenced by lsf_sf_expand().

◆ READ_FLIP_SIGN

#define READ_FLIP_SIGN (   dst,
  src 
)
Value:
v = -get_bits1(&s->gb); \
*(dst) = (*(src) ^ v) - v;
const char * s
Definition: avisynth_c.h:768
#define src
Definition: vp8dsp.c:254
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:321

Definition at line 847 of file mpegaudiodec_template.c.

Referenced by huffman_decode().

◆ ISQRT2

#define ISQRT2   FIXR(0.70710678118654752440)

Definition at line 1036 of file mpegaudiodec_template.c.

Referenced by compute_stereo().

◆ AA

#define AA (   j)
Value:
do { \
SUINT tmp0 = ptr[-1-j]; \
SUINT tmp1 = ptr[ j]; \
SUINT tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]); \
ptr[-1-j] = 4 * (tmp2 - MULH(tmp1, csa_table[j][2])); \
ptr[ j] = 4 * (tmp2 + MULH(tmp0, csa_table[j][3])); \
} while (0)
static INTFLOAT csa_table[8][4]
#define MULH
Definition: mathops.h:42

Definition at line 1186 of file mpegaudiodec_template.c.

Referenced by compute_antialias().

Function Documentation

◆ region_offset2size()

static void region_offset2size ( GranuleDef g)
static

Convert region offsets to region sizes and truncate size to big_values.

Definition at line 146 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ init_short_region()

static void init_short_region ( MPADecodeContext s,
GranuleDef g 
)
static

Definition at line 157 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ init_long_region()

static void init_long_region ( MPADecodeContext s,
GranuleDef g,
int  ra1,
int  ra2 
)
static

Definition at line 175 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ compute_band_indexes()

static void compute_band_indexes ( MPADecodeContext s,
GranuleDef g 
)
static

Definition at line 185 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ l1_unscale()

static int l1_unscale ( int  n,
int  mant,
int  scale_factor 
)
inlinestatic

Definition at line 212 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer1(), and mp_decode_layer2().

◆ l2_unscale_group()

static int l2_unscale_group ( int  steps,
int  mant,
int  scale_factor 
)
inlinestatic

Definition at line 226 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer2().

◆ l3_unscale()

static int l3_unscale ( int  value,
int  exponent 
)
inlinestatic

Definition at line 242 of file mpegaudiodec_template.c.

Referenced by huffman_decode().

◆ decode_init_static()

static av_cold void decode_init_static ( void  )
static

Definition at line 261 of file mpegaudiodec_template.c.

Referenced by decode_init().

◆ decode_init()

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 421 of file mpegaudiodec_template.c.

Referenced by flush().

◆ imdct12()

static void imdct12 ( INTFLOAT out,
SUINTFLOAT in 
)
static

Definition at line 461 of file mpegaudiodec_template.c.

Referenced by compute_imdct().

◆ mp_decode_layer1()

static int mp_decode_layer1 ( MPADecodeContext s)
static

Definition at line 503 of file mpegaudiodec_template.c.

Referenced by mp_decode_frame().

◆ mp_decode_layer2()

static int mp_decode_layer2 ( MPADecodeContext s)
static

Definition at line 568 of file mpegaudiodec_template.c.

Referenced by mp_decode_frame().

◆ lsf_sf_expand()

static av_always_inline void lsf_sf_expand ( int slen,
int  sf,
int  n1,
int  n2,
int  n3 
)
static

Definition at line 775 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ exponents_from_scale_factors()

static void exponents_from_scale_factors ( MPADecodeContext s,
GranuleDef g,
int16_t *  exponents 
)
static

Definition at line 784 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ switch_buffer()

static void switch_buffer ( MPADecodeContext s,
int pos,
int end_pos,
int end_pos2 
)
static

Definition at line 821 of file mpegaudiodec_template.c.

Referenced by huffman_decode().

◆ huffman_decode()

static int huffman_decode ( MPADecodeContext s,
GranuleDef g,
int16_t *  exponents,
int  end_pos2 
)
static

Definition at line 852 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ reorder_block()

static void reorder_block ( MPADecodeContext s,
GranuleDef g 
)
static

Definition at line 1003 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ compute_stereo()

static void compute_stereo ( MPADecodeContext s,
GranuleDef g0,
GranuleDef g1 
)
static

Definition at line 1038 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ compute_antialias()

static void compute_antialias ( MPADecodeContext s,
GranuleDef g 
)
static

Definition at line 1195 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ compute_imdct()

static void compute_imdct ( MPADecodeContext s,
GranuleDef g,
INTFLOAT sb_samples,
INTFLOAT mdct_buf 
)
static

Definition at line 1226 of file mpegaudiodec_template.c.

Referenced by mp_decode_layer3().

◆ mp_decode_layer3()

static int mp_decode_layer3 ( MPADecodeContext s)
static

Definition at line 1306 of file mpegaudiodec_template.c.

Referenced by mp_decode_frame().

◆ mp_decode_frame()

static int mp_decode_frame ( MPADecodeContext s,
OUT_INT **  samples,
const uint8_t buf,
int  buf_size 
)
static

Definition at line 1560 of file mpegaudiodec_template.c.

Referenced by decode_frame(), and flush().

◆ decode_frame()

static int decode_frame ( AVCodecContext avctx,
void data,
int got_frame_ptr,
AVPacket avpkt 
)
static

Definition at line 1648 of file mpegaudiodec_template.c.

◆ mp_flush()

static void mp_flush ( MPADecodeContext ctx)
static

Definition at line 1718 of file mpegaudiodec_template.c.

Referenced by flush().

◆ flush()

static void flush ( AVCodecContext avctx)
static

Definition at line 1726 of file mpegaudiodec_template.c.

Variable Documentation

◆ huff_vlc

VLC huff_vlc[16]
static

Definition at line 99 of file mpegaudiodec_template.c.

◆ huff_vlc_tables

VLC_TYPE huff_vlc_tables[ 0+128+128+128+130+128+154+166+ 142+204+190+170+542+460+662+414][2]
static

Definition at line 103 of file mpegaudiodec_template.c.

Referenced by decode_init_static().

◆ huff_vlc_tables_sizes

const int huff_vlc_tables_sizes[16]
static
Initial value:
= {
0, 128, 128, 128, 130, 128, 154, 166,
142, 204, 190, 170, 542, 460, 662, 414
}

Definition at line 104 of file mpegaudiodec_template.c.

Referenced by decode_init_static().

◆ huff_quad_vlc

VLC huff_quad_vlc[2]
static

Definition at line 108 of file mpegaudiodec_template.c.

◆ huff_quad_vlc_tables

VLC_TYPE huff_quad_vlc_tables[128+16][2]
static

Definition at line 109 of file mpegaudiodec_template.c.

Referenced by decode_init_static().

◆ huff_quad_vlc_tables_sizes

const int huff_quad_vlc_tables_sizes[2] = { 128, 16 }
static

Definition at line 110 of file mpegaudiodec_template.c.

Referenced by decode_init_static().

◆ band_index_long

uint16_t band_index_long[9][23]
static

Definition at line 112 of file mpegaudiodec_template.c.

Referenced by decode_init_static(), and init_long_region().

◆ is_table

INTFLOAT is_table[2][16]
static

Definition at line 115 of file mpegaudiodec_template.c.

Referenced by compute_stereo(), and decode_init_static().

◆ is_table_lsf

INTFLOAT is_table_lsf[2][2][16]
static

Definition at line 116 of file mpegaudiodec_template.c.

Referenced by compute_stereo(), and decode_init_static().

◆ csa_table

INTFLOAT csa_table[8][4]
static

Definition at line 117 of file mpegaudiodec_template.c.

Referenced by decode_init_static().

◆ division_tab3

int16_t division_tab3[1<< 6]
static

Definition at line 119 of file mpegaudiodec_template.c.

◆ division_tab5

int16_t division_tab5[1<< 8]
static

Definition at line 120 of file mpegaudiodec_template.c.

◆ division_tab9

int16_t division_tab9[1<< 11]
static

Definition at line 121 of file mpegaudiodec_template.c.

◆ division_tabs

int16_t* const division_tabs[4]
static
Initial value:
= {
}
#define NULL
Definition: coverity.c:32
static int16_t division_tab9[1<< 11]
static int16_t division_tab5[1<< 8]
static int16_t division_tab3[1<< 6]

Definition at line 123 of file mpegaudiodec_template.c.

Referenced by decode_init_static(), and mp_decode_layer2().

◆ scale_factor_modshift

uint16_t scale_factor_modshift[64]
static

Definition at line 128 of file mpegaudiodec_template.c.

Referenced by decode_init_static(), l1_unscale(), and l2_unscale_group().

◆ scale_factor_mult

int32_t scale_factor_mult[15][3]
static

Definition at line 130 of file mpegaudiodec_template.c.

Referenced by decode_init_static(), and l1_unscale().

◆ scale_factor_mult2

const int32_t scale_factor_mult2[3][3]
static
Initial value:
= {
SCALE_GEN(4.0 / 3.0),
SCALE_GEN(4.0 / 5.0),
SCALE_GEN(4.0 / 9.0),
}
#define SCALE_GEN(v)

Definition at line 136 of file mpegaudiodec_template.c.

Referenced by l2_unscale_group().