libavcodec/mpegaudiodec.c File Reference

MPEG Audio decoder. More...

#include "libavutil/audioconvert.h"
#include "avcodec.h"
#include "get_bits.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

Defines

#define BACKSTEP_SIZE   512
#define EXTRABYTES   24
#define SHR(a, b)   ((a)>>(b))
#define FIXR_OLD(a)   ((int)((a) * FRAC_ONE + 0.5))
#define FIXR(a)   ((int)((a) * FRAC_ONE + 0.5))
#define FIXHR(a)   ((int)((a) * (1LL<<32) + 0.5))
#define MULH3(x, y, s)   MULH((s)*(x), y)
#define MULLx(x, y, s)   MULL(x,y,s)
#define RENAME(a)   a ## _fixed
#define OUT_FMT   AV_SAMPLE_FMT_S16
#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 C1   FIXHR(0.98480775301220805936/2)
#define C2   FIXHR(0.93969262078590838405/2)
#define C3   FIXHR(0.86602540378443864676/2)
#define C4   FIXHR(0.76604444311897803520/2)
#define C5   FIXHR(0.64278760968653932632/2)
#define C6   FIXHR(0.5/2)
#define C7   FIXHR(0.34202014332566873304/2)
#define C8   FIXHR(0.17364817766693034885/2)
#define SPLIT(dst, sf, n)
#define READ_FLIP_SIGN(dst, src)
#define ISQRT2   FIXR(0.70710678118654752440)
#define AA(j)

Functions

static void ff_region_offset2size (GranuleDef *g)
 Convert region offsets to region sizes and truncate size to big_values.
static void ff_init_short_region (MPADecodeContext *s, GranuleDef *g)
static void ff_init_long_region (MPADecodeContext *s, GranuleDef *g, int ra1, int ra2)
static void ff_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 int decode_init (AVCodecContext *avctx)
static void imdct12 (INTFLOAT *out, INTFLOAT *in)
static void imdct36 (INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in, INTFLOAT *win)
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 int get_bitsz (GetBitContext *s, int n)
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 *data_size, AVPacket *avpkt)
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]
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 INTFLOAT mdct_win [8][36]
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]
static const INTFLOAT icos36 [9]
static const INTFLOAT icos36h [9]


Detailed Description

MPEG Audio decoder.

Definition in file mpegaudiodec.c.


Define Documentation

#define AA (  ) 

Value:

do {                                              \
        int tmp0 = ptr[-1-j];                                   \
        int tmp1 = ptr[   j];                                   \
        int 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)

Definition at line 1325 of file mpegaudiodec.c.

Referenced by compute_antialias().

#define BACKSTEP_SIZE   512

Definition at line 41 of file mpegaudiodec.c.

Referenced by mp_decode_frame().

#define C1   FIXHR(0.98480775301220805936/2)

Definition at line 550 of file mpegaudiodec.c.

Referenced by DECLARE_ASM_CONST(), idct4col_add(), idct4col_put(), and imdct36().

#define C2   FIXHR(0.93969262078590838405/2)

Definition at line 551 of file mpegaudiodec.c.

Referenced by DECLARE_ASM_CONST(), idct4col_add(), idct4col_put(), and imdct36().

#define C3   FIXHR(0.86602540378443864676/2)

Definition at line 552 of file mpegaudiodec.c.

#define C3   FIXHR(0.86602540378443864676/2)

Definition at line 552 of file mpegaudiodec.c.

Referenced by DECLARE_ASM_CONST(), idct4col_add(), imdct12(), and imdct36().

#define C4   FIXHR(0.76604444311897803520/2)

Definition at line 553 of file mpegaudiodec.c.

Referenced by DECLARE_ASM_CONST(), idct_col(), and imdct36().

#define C5   FIXHR(0.64278760968653932632/2)

Definition at line 554 of file mpegaudiodec.c.

Referenced by DECLARE_ASM_CONST(), and imdct36().

#define C6   FIXHR(0.5/2)

Definition at line 555 of file mpegaudiodec.c.

Referenced by DECLARE_ASM_CONST().

#define C7   FIXHR(0.34202014332566873304/2)

Definition at line 556 of file mpegaudiodec.c.

Referenced by DECLARE_ASM_CONST(), and imdct36().

#define C8   FIXHR(0.17364817766693034885/2)

Definition at line 557 of file mpegaudiodec.c.

Referenced by imdct36().

#define EXTRABYTES   24

Definition at line 42 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

#define FIXHR (  )     ((int)((a) * (1LL<<32) + 0.5))

Definition at line 101 of file mpegaudiodec.c.

#define FIXR (  )     ((int)((a) * FRAC_ONE + 0.5))

Definition at line 100 of file mpegaudiodec.c.

Referenced by decode_init().

#define FIXR_OLD (  )     ((int)((a) * FRAC_ONE + 0.5))

Definition at line 99 of file mpegaudiodec.c.

#define HEADER_SIZE   4

Definition at line 110 of file mpegaudiodec.c.

#define ISQRT2   FIXR(0.70710678118654752440)

Definition at line 1190 of file mpegaudiodec.c.

Referenced by compute_stereo().

#define MULH3 ( x,
y,
 )     MULH((s)*(x), y)

Definition at line 102 of file mpegaudiodec.c.

#define MULLx ( x,
y,
 )     MULL(x,y,s)

Definition at line 103 of file mpegaudiodec.c.

Referenced by compute_stereo(), decode_init(), and imdct36().

#define OUT_FMT   AV_SAMPLE_FMT_S16

Definition at line 105 of file mpegaudiodec.c.

Referenced by decode_init().

#define READ_FLIP_SIGN ( dst,
src   ) 

Value:

v= -get_bits1(&s->gb);\
            *(dst) = (*(src) ^ v) - v;

Definition at line 995 of file mpegaudiodec.c.

Referenced by huffman_decode().

#define RENAME (  )     a ## _fixed

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

Definition at line 153 of file mpegaudiodec.c.

#define SHR ( a,
 )     ((a)>>(b))

Definition at line 97 of file mpegaudiodec.c.

Referenced by imdct12(), and imdct36().

#define SPLIT ( dst,
sf,
 ) 

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;\
    }

Definition at line 895 of file mpegaudiodec.c.

Referenced by avfilter_register_all(), and lsf_sf_expand().


Function Documentation

static void compute_antialias ( MPADecodeContext s,
GranuleDef g 
) [static]

Definition at line 1334 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

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

Definition at line 1364 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

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

Definition at line 1192 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

static int decode_frame ( AVCodecContext avctx,
void *  data,
int *  data_size,
AVPacket avpkt 
) [static]

Definition at line 1772 of file mpegaudiodec.c.

static av_cold int decode_init ( AVCodecContext avctx  )  [static]

Definition at line 272 of file mpegaudiodec.c.

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

Definition at line 924 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

static void ff_compute_band_indexes ( MPADecodeContext s,
GranuleDef g 
) [static]

Definition at line 200 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

static void ff_init_long_region ( MPADecodeContext s,
GranuleDef g,
int  ra1,
int  ra2 
) [static]

Definition at line 190 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

static void ff_init_short_region ( MPADecodeContext s,
GranuleDef g 
) [static]

Definition at line 176 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

static void ff_region_offset2size ( GranuleDef g  )  [static]

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

Definition at line 166 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

static void flush ( AVCodecContext avctx  )  [static]

Definition at line 1827 of file mpegaudiodec.c.

static int get_bitsz ( GetBitContext s,
int  n 
) [inline, static]

Definition at line 963 of file mpegaudiodec.c.

Referenced by huffman_decode().

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

Definition at line 1000 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

static void imdct12 ( INTFLOAT *  out,
INTFLOAT *  in 
) [static]

Definition at line 508 of file mpegaudiodec.c.

Referenced by compute_imdct().

static void imdct36 ( INTFLOAT *  out,
INTFLOAT *  buf,
INTFLOAT *  in,
INTFLOAT *  win 
) [static]

Definition at line 561 of file mpegaudiodec.c.

Referenced by compute_imdct().

static int l1_unscale ( int  n,
int  mant,
int  scale_factor 
) [inline, static]

Definition at line 226 of file mpegaudiodec.c.

Referenced by mp_decode_layer1(), and mp_decode_layer2().

static int l2_unscale_group ( int  steps,
int  mant,
int  scale_factor 
) [inline, static]

Definition at line 240 of file mpegaudiodec.c.

Referenced by mp_decode_layer2().

static int l3_unscale ( int  value,
int  exponent 
) [inline, static]

Definition at line 256 of file mpegaudiodec.c.

Referenced by huffman_decode().

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

Definition at line 915 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

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

Definition at line 1700 of file mpegaudiodec.c.

static int mp_decode_layer1 ( MPADecodeContext s  )  [static]

Definition at line 642 of file mpegaudiodec.c.

Referenced by mp_decode_frame().

static int mp_decode_layer2 ( MPADecodeContext s  )  [static]

Definition at line 708 of file mpegaudiodec.c.

Referenced by mp_decode_frame().

static int mp_decode_layer3 ( MPADecodeContext s  )  [static]

Definition at line 1456 of file mpegaudiodec.c.

Referenced by mp_decode_frame().

static void reorder_block ( MPADecodeContext s,
GranuleDef g 
) [static]

Definition at line 1156 of file mpegaudiodec.c.

Referenced by mp_decode_layer3().

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

Definition at line 972 of file mpegaudiodec.c.

Referenced by huffman_decode().


Variable Documentation

uint16_t band_index_long[9][23] [static]

Definition at line 131 of file mpegaudiodec.c.

Referenced by decode_init(), and ff_init_long_region().

INTFLOAT csa_table[8][4] [static]

Definition at line 136 of file mpegaudiodec.c.

Referenced by decode_init().

int16_t division_tab3[1<< 6] [static]

Definition at line 139 of file mpegaudiodec.c.

int16_t division_tab5[1<< 8] [static]

Definition at line 140 of file mpegaudiodec.c.

int16_t division_tab9[1<< 11] [static]

Definition at line 141 of file mpegaudiodec.c.

int16_t* const division_tabs[4] [static]

Initial value:

Definition at line 143 of file mpegaudiodec.c.

Referenced by decode_init(), and mp_decode_layer2().

VLC huff_quad_vlc[2] [static]

Definition at line 125 of file mpegaudiodec.c.

VLC_TYPE huff_quad_vlc_tables[128+16][2] [static]

Definition at line 126 of file mpegaudiodec.c.

Referenced by decode_init().

const int huff_quad_vlc_tables_sizes[2] [static]

Initial value:

 {
  128, 16
}

Definition at line 127 of file mpegaudiodec.c.

Referenced by decode_init().

VLC huff_vlc[16] [static]

Definition at line 116 of file mpegaudiodec.c.

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 120 of file mpegaudiodec.c.

Referenced by decode_init().

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 121 of file mpegaudiodec.c.

Referenced by decode_init().

const INTFLOAT icos36[9] [static]

Initial value:

 {
    FIXR(0.50190991877167369479),
    FIXR(0.51763809020504152469), 
    FIXR(0.55168895948124587824),
    FIXR(0.61038729438072803416),
    FIXR(0.70710678118654752439), 
    FIXR(0.87172339781054900991),
    FIXR(1.18310079157624925896),
    FIXR(1.93185165257813657349), 
    FIXR(5.73685662283492756461),
}

Definition at line 481 of file mpegaudiodec.c.

Referenced by imdct36().

const INTFLOAT icos36h[9] [static]

Initial value:

 {
    FIXHR(0.50190991877167369479/2),
    FIXHR(0.51763809020504152469/2), 
    FIXHR(0.55168895948124587824/2),
    FIXHR(0.61038729438072803416/2),
    FIXHR(0.70710678118654752439/2), 
    FIXHR(0.87172339781054900991/2),
    FIXHR(1.18310079157624925896/4),
    FIXHR(1.93185165257813657349/4), 

}

Definition at line 494 of file mpegaudiodec.c.

Referenced by imdct12(), and imdct36().

INTFLOAT is_table[2][16] [static]

Definition at line 134 of file mpegaudiodec.c.

Referenced by compute_stereo(), and decode_init().

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

Definition at line 135 of file mpegaudiodec.c.

Referenced by compute_stereo(), and decode_init().

INTFLOAT mdct_win[8][36] [static]

Definition at line 137 of file mpegaudiodec.c.

Referenced by compute_imdct(), and decode_init().

uint16_t scale_factor_modshift[64] [static]

Definition at line 148 of file mpegaudiodec.c.

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

int32_t scale_factor_mult[15][3] [static]

Definition at line 150 of file mpegaudiodec.c.

Referenced by decode_init(), encode_frame(), l1_unscale(), and MPA_encode_init().

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), 
}

Definition at line 156 of file mpegaudiodec.c.

Referenced by l2_unscale_group().


Generated on Fri Oct 26 02:38:17 2012 for FFmpeg by  doxygen 1.5.8