summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorRoberto Togni <r_togni@tiscali.it>2005-10-18 20:16:43 +0000
committerRoberto Togni <r_togni@tiscali.it>2005-10-18 20:16:43 +0000
commitd9b1c197e5f99655328b713b7100e3125139546a (patch)
tree341d43d7b40c5533c6f35db90c13050a2ff8200b /libavcodec
parentea7e68b1e2e3983198cac5814720d6f7655299bc (diff)
QDM2 compatible decoder
Originally committed as revision 4649 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/Makefile2
-rw-r--r--libavcodec/allcodecs.c3
-rw-r--r--libavcodec/avcodec.h2
-rw-r--r--libavcodec/mpegaudio.c2
-rw-r--r--libavcodec/mpegaudio.h34
-rw-r--r--libavcodec/mpegaudiodec.c27
6 files changed, 41 insertions, 29 deletions
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 63b696708d..2b4fdd226c 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -18,7 +18,7 @@ OBJS= bitstream.o utils.o mem.o allcodecs.o \
fft.o mdct.o raw.o golomb.o cabac.o\
dpcm.o adx.o faandct.o parser.o g726.o \
vp3dsp.o h264idct.o rangecoder.o pnm.o h263.o msmpeg4.o h263dec.o dvdsub.o dvbsub.o dvbsubdec.o\
- opt.o truemotion2.o
+ opt.o qdm2.o truemotion2.o
ifeq ($(CONFIG_AASC_DECODER),yes)
OBJS+= aasc.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 5dd771b1b4..5aa2564d00 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -491,6 +491,9 @@ void avcodec_register_all(void)
#ifdef CONFIG_LIBGSM
register_avcodec(&libgsm_decoder);
#endif //CONFIG_LIBGSM
+#ifdef CONFIG_QDM2_DECODER
+ register_avcodec(&qdm2_decoder);
+#endif //CONFIG_QDM2_DECODER
#endif /* CONFIG_DECODERS */
#ifdef AMR_NB
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 7ca36f5771..10c26c47b5 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -185,6 +185,7 @@ enum CodecID {
CODEC_ID_ALAC,
CODEC_ID_WESTWOOD_SND1,
CODEC_ID_GSM,
+ CODEC_ID_QDM2,
CODEC_ID_OGGTHEORA= 0x16000,
@@ -2000,6 +2001,7 @@ extern AVCodec mp2_decoder;
extern AVCodec mp3_decoder;
extern AVCodec mp3adu_decoder;
extern AVCodec mp3on4_decoder;
+extern AVCodec qdm2_decoder;
extern AVCodec mace3_decoder;
extern AVCodec mace6_decoder;
extern AVCodec huffyuv_decoder;
diff --git a/libavcodec/mpegaudio.c b/libavcodec/mpegaudio.c
index 190aa1590c..7a0b0a31ce 100644
--- a/libavcodec/mpegaudio.c
+++ b/libavcodec/mpegaudio.c
@@ -28,8 +28,6 @@
/* currently, cannot change these constants (need to modify
quantization stage) */
-#define FRAC_BITS 15
-#define WFRAC_BITS 14
#define MUL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS)
#define FIX(a) ((int)((a) * (1 << FRAC_BITS)))
diff --git a/libavcodec/mpegaudio.h b/libavcodec/mpegaudio.h
index 072c41bda7..2bcf38eac2 100644
--- a/libavcodec/mpegaudio.h
+++ b/libavcodec/mpegaudio.h
@@ -22,8 +22,42 @@
#define SAME_HEADER_MASK \
(0xffe00000 | (3 << 17) | (0xf << 12) | (3 << 10) | (3 << 19))
+/* define USE_HIGHPRECISION to have a bit exact (but slower) mpeg
+ audio decoder */
+
+#ifdef USE_HIGHPRECISION
+#define FRAC_BITS 23 /* fractional bits for sb_samples and dct */
+#define WFRAC_BITS 16 /* fractional bits for window */
+#else
+#define FRAC_BITS 15 /* fractional bits for sb_samples and dct */
+#define WFRAC_BITS 14 /* fractional bits for window */
+#endif
+
+#if defined(USE_HIGHPRECISION) && defined(CONFIG_AUDIO_NONSHORT)
+typedef int32_t OUT_INT;
+#define OUT_MAX INT32_MAX
+#define OUT_MIN INT32_MIN
+#define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 31)
+#else
+typedef int16_t OUT_INT;
+#define OUT_MAX INT16_MAX
+#define OUT_MIN INT16_MIN
+#define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15)
+#endif
+
+#if FRAC_BITS <= 15
+typedef int16_t MPA_INT;
+#else
+typedef int32_t MPA_INT;
+#endif
+
int l2_select_table(int bitrate, int nb_channels, int freq, int lsf);
int mpa_decode_header(AVCodecContext *avctx, uint32_t head);
+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]);
extern const uint16_t mpa_bitrate_tab[2][3][15];
extern const uint16_t mpa_freq_tab[3];
diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c
index 708d355360..32998a6ebc 100644
--- a/libavcodec/mpegaudiodec.c
+++ b/libavcodec/mpegaudiodec.c
@@ -25,7 +25,6 @@
//#define DEBUG
#include "avcodec.h"
#include "bitstream.h"
-#include "mpegaudio.h"
#include "dsputil.h"
/*
@@ -40,25 +39,7 @@
#define USE_HIGHPRECISION
#endif
-#ifdef USE_HIGHPRECISION
-#define FRAC_BITS 23 /* fractional bits for sb_samples and dct */
-#define WFRAC_BITS 16 /* fractional bits for window */
-#else
-#define FRAC_BITS 15 /* fractional bits for sb_samples and dct */
-#define WFRAC_BITS 14 /* fractional bits for window */
-#endif
-
-#if defined(USE_HIGHPRECISION) && defined(CONFIG_AUDIO_NONSHORT)
-typedef int32_t OUT_INT;
-#define OUT_MAX INT32_MAX
-#define OUT_MIN INT32_MIN
-#define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 31)
-#else
-typedef int16_t OUT_INT;
-#define OUT_MAX INT16_MAX
-#define OUT_MIN INT16_MIN
-#define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15)
-#endif
+#include "mpegaudio.h"
#define FRAC_ONE (1 << FRAC_BITS)
@@ -75,12 +56,6 @@ static always_inline int MULH(int a, int b){
return ((int64_t)(a) * (int64_t)(b))>>32;
}
-#if FRAC_BITS <= 15
-typedef int16_t MPA_INT;
-#else
-typedef int32_t MPA_INT;
-#endif
-
/****************/
#define HEADER_SIZE 4