]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mpegaudio.h
Get rid of some pointless '== NULL' / '!= 0' conditions in if statements.
[ffmpeg] / libavcodec / mpegaudio.h
index 6d602a1dcb47ab9730ff70cef61676ffac33ae48..6f1940141e242b33392e34a4444c2c1d3488ab65 100644 (file)
  */
 
 /**
- * @file mpegaudio.h
+ * @file libavcodec/mpegaudio.h
  * mpeg audio declarations for both encoder and decoder.
  */
 
-#ifndef FFMPEG_MPEGAUDIO_H
-#define FFMPEG_MPEGAUDIO_H
+#ifndef AVCODEC_MPEGAUDIO_H
+#define AVCODEC_MPEGAUDIO_H
 
 #include "avcodec.h"
-#include "bitstream.h"
+#include "get_bits.h"
 #include "dsputil.h"
 
+#define CONFIG_AUDIO_NONSHORT 0
+
 /* max frame size, in samples */
 #define MPA_FRAME_SIZE 1152
 
 
 #define MP3_MASK 0xFFFE0CCF
 
-/* define USE_HIGHPRECISION to have a bit exact (but slower) mpeg
-   audio decoder */
-
-#ifdef USE_HIGHPRECISION
+#if CONFIG_MPEGAUDIO_HP
 #define FRAC_BITS   23   /* fractional bits for sb_samples and dct */
 #define WFRAC_BITS  16   /* fractional bits for window */
 #else
 
 #define FIX(a)   ((int)((a) * FRAC_ONE))
 
-#if defined(USE_HIGHPRECISION) && defined(CONFIG_AUDIO_NONSHORT)
+#if CONFIG_MPEGAUDIO_HP && 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)
+#define OUT_FMT SAMPLE_FMT_S32
 #else
 typedef int16_t OUT_INT;
 #define OUT_MAX INT16_MAX
 #define OUT_MIN INT16_MIN
 #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15)
+#define OUT_FMT SAMPLE_FMT_S16
 #endif
 
 #if FRAC_BITS <= 15
@@ -89,23 +90,30 @@ typedef int32_t MPA_INT;
 
 struct GranuleDef;
 
+#define MPA_DECODE_HEADER \
+    int frame_size; \
+    int error_protection; \
+    int layer; \
+    int sample_rate; \
+    int sample_rate_index; /* between 0 and 8 */ \
+    int bit_rate; \
+    int nb_channels; \
+    int mode; \
+    int mode_ext; \
+    int lsf;
+
+typedef struct MPADecodeHeader {
+  MPA_DECODE_HEADER
+} MPADecodeHeader;
+
 typedef struct MPADecodeContext {
-    DECLARE_ALIGNED_8(uint8_t, last_buf[2*BACKSTEP_SIZE + EXTRABYTES]);
+    MPA_DECODE_HEADER
+    uint8_t last_buf[2*BACKSTEP_SIZE + EXTRABYTES];
     int last_buf_size;
-    int frame_size;
     /* 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;
     GetBitContext gb;
     GetBitContext in_gb;
-    int nb_channels;
-    int mode;
-    int mode_ext;
-    int lsf;
     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]);
@@ -116,7 +124,7 @@ typedef struct MPADecodeContext {
     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_resilience;
+    int error_recognition;
     AVCodecContext* avctx;
 } MPADecodeContext;
 
@@ -128,7 +136,8 @@ typedef struct HuffTable {
 } HuffTable;
 
 int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf);
-int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate);
+int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bitrate);
+extern MPA_INT ff_mpa_synth_window[];
 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,
@@ -152,4 +161,4 @@ static inline int ff_mpa_check_header(uint32_t header){
     return 0;
 }
 
-#endif /* FFMPEG_MPEGAUDIO_H */
+#endif /* AVCODEC_MPEGAUDIO_H */