diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2010-05-11 19:52:42 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2010-05-11 19:52:42 +0000 |
commit | b91d46614df189e7905538e7f5c4ed9c7ed0d274 (patch) | |
tree | 003eba00b838e5773d657dd802fecf18b08101c8 /libavcodec/mpegaudio.h | |
parent | 495af353dbb0f0f4792baecc63a45ef563f80e44 (diff) | |
download | ffmpeg-b91d46614df189e7905538e7f5c4ed9c7ed0d274.tar.gz |
float based mp1/mp2/mp3 decoders.
Originally committed as revision 23095 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/mpegaudio.h')
-rw-r--r-- | libavcodec/mpegaudio.h | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/libavcodec/mpegaudio.h b/libavcodec/mpegaudio.h index 26ec2bebc1..53d82da4e3 100644 --- a/libavcodec/mpegaudio.h +++ b/libavcodec/mpegaudio.h @@ -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 @@ typedef int16_t OUT_INT; #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 @@ typedef struct GranuleDef { 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 @@ typedef struct MPADecodeContext { 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_init(MPA_INT *window); 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){ |