Mercurial > libavcodec.hg
diff mpegaudio.h @ 11707:eb9e142ea51f libavcodec
float based mp1/mp2/mp3 decoders.
author | michael |
---|---|
date | Tue, 11 May 2010 19:52:42 +0000 |
parents | 7dd2a45249a9 |
children | 0e777af9160a |
line wrap: on
line diff
--- a/mpegaudio.h Tue May 11 18:53:49 2010 +0000 +++ b/mpegaudio.h Tue May 11 19:52:42 2010 +0000 @@ -26,6 +26,10 @@ #ifndef AVCODEC_MPEGAUDIO_H #define AVCODEC_MPEGAUDIO_H +#ifndef CONFIG_FLOAT +# define CONFIG_FLOAT 0 +#endif + #include "avcodec.h" #include "get_bits.h" #include "dsputil.h" @@ -65,7 +69,10 @@ #define FIX(a) ((int)((a) * FRAC_ONE)) -#if CONFIG_MPEGAUDIO_HP && CONFIG_AUDIO_NONSHORT +#if CONFIG_FLOAT +typedef float OUT_INT; +#define OUT_FMT SAMPLE_FMT_FLT +#elif CONFIG_MPEGAUDIO_HP && CONFIG_AUDIO_NONSHORT typedef int32_t OUT_INT; #define OUT_MAX INT32_MAX #define OUT_MIN INT32_MIN @@ -79,9 +86,14 @@ #define OUT_FMT SAMPLE_FMT_S16 #endif -#if FRAC_BITS <= 15 +#if CONFIG_FLOAT +# define INTFLOAT float +typedef float MPA_INT; +#elif FRAC_BITS <= 15 +# define INTFLOAT int typedef int16_t MPA_INT; #else +# define INTFLOAT int typedef int32_t MPA_INT; #endif @@ -105,7 +117,7 @@ int preflag; int short_start, long_end; /* long/short band indexes */ uint8_t scale_factors[40]; - int32_t sb_hybrid[SBLIMIT * 18]; /* 576 samples */ + INTFLOAT sb_hybrid[SBLIMIT * 18]; /* 576 samples */ } GranuleDef; #define MPA_DECODE_HEADER \ @@ -134,13 +146,12 @@ GetBitContext in_gb; DECLARE_ALIGNED(16, MPA_INT, synth_buf)[MPA_MAX_CHANNELS][512 * 2]; int synth_buf_offset[MPA_MAX_CHANNELS]; - DECLARE_ALIGNED(16, int32_t, sb_samples)[MPA_MAX_CHANNELS][36][SBLIMIT]; - int32_t mdct_buf[MPA_MAX_CHANNELS][SBLIMIT * 18]; /* previous samples, for layer 3 MDCT */ + DECLARE_ALIGNED(16, INTFLOAT, sb_samples)[MPA_MAX_CHANNELS][36][SBLIMIT]; + INTFLOAT mdct_buf[MPA_MAX_CHANNELS][SBLIMIT * 18]; /* previous samples, for layer 3 MDCT */ GranuleDef granules[2][2]; /* Used in Layer 3 */ #ifdef DEBUG int frame_count; #endif - void (*compute_antialias)(struct MPADecodeContext *s, struct GranuleDef *g); int adu_mode; ///< 0 for standard mp3, 1 for adu formatted mp3 int dither_state; int error_recognition; @@ -161,7 +172,13 @@ void ff_mpa_synth_filter(MPA_INT *synth_buf_ptr, int *synth_buf_offset, MPA_INT *window, int *dither_state, OUT_INT *samples, int incr, - int32_t sb_samples[SBLIMIT]); + INTFLOAT sb_samples[SBLIMIT]); + +void ff_mpa_synth_init_float(MPA_INT *window); +void ff_mpa_synth_filter_float(MPA_INT *synth_buf_ptr, int *synth_buf_offset, + MPA_INT *window, int *dither_state, + OUT_INT *samples, int incr, + INTFLOAT sb_samples[SBLIMIT]); /* fast header check for resync */ static inline int ff_mpa_check_header(uint32_t header){