📄 mpegaudiodec.h
字号:
asm volatile ("msub %0, %1"::"r"((w32)[6 * 64]), "r"(pp[6 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[7 * 64]), "r"(pp[7 * 64])); \ asm volatile ("mfhi %0":"=r"(sum));\ asm volatile ("sll %0, %1, 8":"=r"(sum):"r"(sum));\ asm volatile ("mflo %0":"=r"(tmp));\ asm volatile ("srl %0, %1, 24":"=r"(tmp):"r"(tmp));\ asm volatile ("or %0, %1, %2":"=r"(sum):"r"(sum), "r"(tmp));\ } #define SUM16B(w32) \ { \ int tmp;\ pp = synth_buf + 16 + j; \ tmp = -pp[0 * 64]; \ asm volatile ("mult %0, %1"::"r"((w2)[0 * 64]), "r"(tmp)); \ asm volatile ("msub %0, %1"::"r"((w2)[1 * 64]), "r"(pp[1 * 64])); \ asm volatile ("msub %0, %1"::"r"((w2)[2 * 64]), "r"(pp[2 * 64])); \ asm volatile ("msub %0, %1"::"r"((w2)[3 * 64]), "r"(pp[3 * 64])); \ asm volatile ("msub %0, %1"::"r"((w2)[4 * 64]), "r"(pp[4 * 64])); \ asm volatile ("msub %0, %1"::"r"((w2)[5 * 64]), "r"(pp[5 * 64])); \ asm volatile ("msub %0, %1"::"r"((w2)[6 * 64]), "r"(pp[6 * 64])); \ asm volatile ("msub %0, %1"::"r"((w2)[7 * 64]), "r"(pp[7 * 64])); \ pp = synth_buf + 48 - j; \ asm volatile ("msub %0, %1"::"r"((w32)[0 * 64]), "r"(pp[0 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[1 * 64]), "r"(pp[1 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[2 * 64]), "r"(pp[2 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[3 * 64]), "r"(pp[3 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[4 * 64]), "r"(pp[4 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[5 * 64]), "r"(pp[5 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[6 * 64]), "r"(pp[6 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[7 * 64]), "r"(pp[7 * 64])); \ asm volatile ("mfhi %0":"=r"(sum2));\ asm volatile ("sll %0, %1, 8":"=r"(sum2):"r"(sum2));\ asm volatile ("mflo %0":"=r"(tmp));\ asm volatile ("srl %0, %1, 24":"=r"(tmp):"r"(tmp));\ asm volatile ("or %0, %1, %2":"=r"(sum2):"r"(sum2), "r"(tmp));\ } #define SUM8M(w32) \ { \ int tmp;\ pp = synth_buf + 32; \ tmp = -pp[0 * 64]; \ asm volatile ("mult %0, %1"::"r"((w32)[0 * 64]), "r"(tmp)); \ asm volatile ("msub %0, %1"::"r"((w32)[1 * 64]), "r"(pp[1 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[2 * 64]), "r"(pp[2 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[3 * 64]), "r"(pp[3 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[4 * 64]), "r"(pp[4 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[5 * 64]), "r"(pp[5 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[6 * 64]), "r"(pp[6 * 64])); \ asm volatile ("msub %0, %1"::"r"((w32)[7 * 64]), "r"(pp[7 * 64])); \ asm volatile ("mfhi %0":"=r"(sum));\ asm volatile ("sll %0, %1, 8":"=r"(sum):"r"(sum));\ asm volatile ("mflo %0":"=r"(tmp));\ asm volatile ("srl %0, %1, 24":"=r"(tmp):"r"(tmp));\ asm volatile ("or %0, %1, %2":"=r"(sum):"r"(sum), "r"(tmp));\ } #define INT_MULTC4P(rr,aa,bb,cc,dd,ee,ff,gg,hh) \ {\ asm volatile ("mult %0, %1"::"r"(aa), "r"(bb));\ asm volatile ("madd %0, %1"::"r"(cc), "r"(dd));\ asm volatile ("madd %0, %1"::"r"(ee), "r"(ff));\ asm volatile ("madd %0, %1"::"r"(gg), "r"(hh));\ asm volatile ("mfhi %0":"=r"(rr));\ asm volatile ("sll %0, %1, 9":"=r"(rr):"r"(rr));\ } #define CINT_MULTC4P(rr,aa,bb,cc,dd,ee,ff,gg,hh) \ {\ int tmp;\ asm volatile ("mult %0, %1"::"r"(aa), "r"(bb));\ asm volatile ("madd %0, %1"::"r"(cc), "r"(dd));\ asm volatile ("madd %0, %1"::"r"(ee), "r"(ff));\ asm volatile ("madd %0, %1"::"r"(gg), "r"(hh));\ asm volatile ("mfhi %0":"=r"(rr));\ asm volatile ("sll %0, %1, 9":"=r"(rr):"r"(rr));\ asm volatile ("mflo %0":"=r"(tmp));\ asm volatile ("srl %0, %1, 23":"=r"(tmp):"r"(tmp));\ asm volatile ("or %0, %1, %2":"=r"(rr):"r"(rr), "r"(tmp));\ } #define INT_MULTC6P(rr,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll) \ {\ asm volatile ("mult %0, %1"::"r"(aa), "r"(bb));\ asm volatile ("madd %0, %1"::"r"(cc), "r"(dd));\ asm volatile ("madd %0, %1"::"r"(ee), "r"(ff));\ asm volatile ("madd %0, %1"::"r"(gg), "r"(hh));\ asm volatile ("madd %0, %1"::"r"(ii), "r"(jj));\ asm volatile ("madd %0, %1"::"r"(kk), "r"(ll));\ asm volatile ("mfhi %0":"=r"(rr));\ asm volatile ("sll %0, %1, 9":"=r"(rr):"r"(rr));\ } #define CINT_MULTC6P(rr,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll) \ {\ int tmpi;\ asm volatile ("mult %0, %1"::"r"(aa), "r"(bb));\ asm volatile ("madd %0, %1"::"r"(cc), "r"(dd));\ asm volatile ("madd %0, %1"::"r"(ee), "r"(ff));\ asm volatile ("madd %0, %1"::"r"(gg), "r"(hh));\ asm volatile ("madd %0, %1"::"r"(ii), "r"(jj));\ asm volatile ("madd %0, %1"::"r"(kk), "r"(ll));\ asm volatile ("mfhi %0":"=r"(rr));\ asm volatile ("sll %0, %1, 9":"=r"(rr):"r"(rr));\ asm volatile ("mflo %0":"=r"(tmpi));\ asm volatile ("srl %0, %1, 23":"=r"(tmpi):"r"(tmpi));\ asm volatile ("or %0, %1, %2":"=r"(rr):"r"(rr), "r"(tmpi));\ }#endif#if FRAC_BITS <= 15 typedef int16_t MPA_INT;#else typedef int32_t MPA_INT;#endif/****************/#define HEADER_SIZE 4#define BACKSTEP_SIZE 512typedef struct MPEG_codecContext { struct MPEG_codec *codec; void *priv_data; int parse_only; /* - decoding only: if true, only parsing is done (function avcodec_parse_frame()). The frame data is returned. Only MPEG codecs support this now. */} MPEG_codecContext;typedef struct MPADecodeContext { uint8_t inbuf1[2][MPA_MAX_CODED_FRAME_SIZE + BACKSTEP_SIZE]; /* input buffer */ int inbuf_index; uint8_t *inbuf_ptr; uint8_t *inbuf; uint8_t *outbuf; int frame_size; int keep_frame_size; int old_frame_size; int frame_count; int free_format_frame_size; /* frame size in case of free format (zero if currently unknown) */ /* next header (used in free format parsing) */ uint32_t free_format_next_header; int error_protection; int layer; int sample_rate; int sample_rate_index; /* between 0 and 8 */ int bit_rate; int bit_rate_counter; GetBitContext gb; int nb_channels; int mode; int mode_ext; int lsf; int emphasis; int sbr; int vbr; int mpeg25; MPA_INT synth_buf[MPA_MAX_CHANNELS][512 * 2]; int synth_buf_offset[MPA_MAX_CHANNELS]; int32_t sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]; int32_t mdct_buf[MPA_MAX_CHANNELS][SBLIMIT * 18]; /* previous samples, for layer 3 MDCT */} MPADecodeContext;typedef struct MPEG_codec { MPEG_codecContext context; MPADecodeContext decode_context;} MPEG_codec;/* layer 3 "granule" */typedef struct GranuleDef { int part2_3_length; int big_values; int global_gain; int scalefac_compress; int table_select[3]; int subblock_gain[3]; int region_size[3]; /* number of huffman codes in each region */ int preflag; int short_start, long_end; /* long/short band indexes */ uint32_t scfsi; uint32_t block_type; uint32_t switch_point; uint32_t scalefac_scale; uint32_t count1table_select; uint32_t scale_factors[40]; int32_t sb_hybrid[SBLIMIT * 18]; /* 576 samples */} GranuleDef;#define MODE_EXT_MS_STEREO 2#define MODE_EXT_I_STEREO 1/* layer 3 huffman tables */typedef struct HuffTable { int xsize; const uint8_t *bits; const uint16_t *codes;} HuffTable;/* from mpegaudalloc.c */extern int avcodec_close(MPEG_codecContext *avctx);extern int avcodec_open(MPEG_codecContext *avctx, MPEG_codec *codec);/* from mpegaudgentab.c *//* all integer n^(4/3) computation code */#define DEV_ORDER 13#define TABLE_4_3_SIZE (8191 + 16)extern uint32_t scale_factor_modshift[64];extern int32_t scale_factor_mult[15][3];extern int window[512];extern uint32_t band_index_long[9][23];extern int8_t table_4_3_exp[TABLE_4_3_SIZE];extern unsigned int table_4_3_value[TABLE_4_3_SIZE];extern int32_t is_table[2][16];extern int32_t is_table_lsf[2][2][16];extern int32_t csa_table[8][2];extern int32_t mdct_win[8][36];/* from mpegaudtab.c */extern int32_t scale_factor_mult2[3][3];extern const uint16_t mpa_freq_tab[3];extern const uint16_t mpa_bitrate_tab[2][3][15];extern const int sblimit_table[5];extern const unsigned char *alloc_tables[5];extern const int quant_bits[17];extern const int quant_steps[17];extern const uint8_t band_size_long[9][22];extern const uint8_t mpa_pretab[2][22];extern const uint8_t band_size_short[9][13];extern const uint8_t mpa_huff_data[32][2];extern const uint8_t slen_table[2][16];extern const uint8_t lsf_nsf_table[6][3][4];extern uint32_t scale_factor_mult3[4];#define MAX_HUFF_STATIC_SIZE (260)extern uint8_t huff_code_table[16][MAX_HUFF_STATIC_SIZE];extern VLC huff_vlc[16]; extern VLC huff_quad_vlc[2];extern uint8_t mpa_quad_bits[2][16];extern uint8_t mpa_quad_codes[2][16];extern const HuffTable mpa_huff_tables[16];extern MPEG_codec mpeg_decoder;extern int frame_number; extern int avcodec_decode_audio(MPEG_codecContext *avctx, int16_t *samples, int *frame_size_ptr, uint8_t *buf, int buf_size);/* mpegbits.c */extern void init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size);extern unsigned int get_bits(GetBitContext *s, int n);extern void skip_bits(GetBitContext *s, int n);extern int get_vlc(GetBitContext *s, VLC *vlc);extern unsigned int get_bits1(GetBitContext *s);extern int get_bitsz(GetBitContext *s, int n);/* mpegdct.c */extern int l3_unscale(int value, int exponent);extern int l2_unscale_group(int steps, int mant, int scale_factor);extern int l1_unscale(int n, int mant, int scale_factor);extern void dct32(int32_t *out, int32_t *tab);extern void imdct36(int *out, int *in);extern void imdct12(int *out, int *in);extern void compute_imdct(MPADecodeContext *s, GranuleDef *g, int32_t *sb_samples, int32_t *mdct_buf);/* mpegsynth.c */extern void synth_filter(int *synth_buf, int *offset, int16_t *samples, int incr, int *tmp);extern void init_ignore_buffer_count(int rate, int channels, int absolute);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -