summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2011-05-19 13:44:11 +0100
committerMans Rullgard <mans@mansr.com>2011-05-20 11:05:07 +0100
commit0199e00bc80a55aacf7ecd393bf32dcd64e06739 (patch)
treefc1744a173ca698ac97881820abe68f6d7d0a043 /libavcodec
parent984ece7503597d30e6f3bdeb67e337ea1616f880 (diff)
mpegaudio: move all header parsing to mpegaudiodecheader.[ch]
Signed-off-by: Mans Rullgard <mans@mansr.com>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/mp3_header_compress_bsf.c2
-rw-r--r--libavcodec/mp3_header_decompress_bsf.c2
-rw-r--r--libavcodec/mpegaudio.h38
-rw-r--r--libavcodec/mpegaudio_parser.c39
-rw-r--r--libavcodec/mpegaudiodecheader.c37
-rw-r--r--libavcodec/mpegaudiodecheader.h41
6 files changed, 79 insertions, 80 deletions
diff --git a/libavcodec/mp3_header_compress_bsf.c b/libavcodec/mp3_header_compress_bsf.c
index c880e5e53d..bc3659ef3e 100644
--- a/libavcodec/mp3_header_compress_bsf.c
+++ b/libavcodec/mp3_header_compress_bsf.c
@@ -20,7 +20,7 @@
#include "libavutil/intreadwrite.h"
#include "avcodec.h"
-#include "mpegaudio.h"
+#include "mpegaudiodecheader.h"
static int mp3_header_compress(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args,
diff --git a/libavcodec/mp3_header_decompress_bsf.c b/libavcodec/mp3_header_decompress_bsf.c
index b4b4167620..3f3074286a 100644
--- a/libavcodec/mp3_header_decompress_bsf.c
+++ b/libavcodec/mp3_header_decompress_bsf.c
@@ -20,7 +20,7 @@
#include "libavutil/intreadwrite.h"
#include "avcodec.h"
-#include "mpegaudio.h"
+#include "mpegaudiodecheader.h"
#include "mpegaudiodata.h"
diff --git a/libavcodec/mpegaudio.h b/libavcodec/mpegaudio.h
index a46ecc5a9f..b55680100b 100644
--- a/libavcodec/mpegaudio.h
+++ b/libavcodec/mpegaudio.h
@@ -30,7 +30,7 @@
# define CONFIG_FLOAT 0
#endif
-#include "avcodec.h"
+#include <stdint.h>
/* max frame size, in samples */
#define MPA_FRAME_SIZE 1152
@@ -47,8 +47,6 @@
#define MPA_DUAL 2
#define MPA_MONO 3
-#define MP3_MASK 0xFFFE0CCF
-
#ifndef FRAC_BITS
#define FRAC_BITS 23 /* fractional bits for sb_samples and dct */
#define WFRAC_BITS 16 /* fractional bits for window */
@@ -72,40 +70,6 @@ typedef int32_t MPA_INT;
typedef int16_t OUT_INT;
#endif
-#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;
-
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 *channels, int *frame_size, int *bitrate);
-
-/* fast header check for resync */
-static inline int ff_mpa_check_header(uint32_t header){
- /* header */
- if ((header & 0xffe00000) != 0xffe00000)
- return -1;
- /* layer check */
- if ((header & (3<<17)) == 0)
- return -1;
- /* bit rate */
- if ((header & (0xf<<12)) == 0xf<<12)
- return -1;
- /* frequency */
- if ((header & (3<<10)) == 3<<10)
- return -1;
- return 0;
-}
#endif /* AVCODEC_MPEGAUDIO_H */
diff --git a/libavcodec/mpegaudio_parser.c b/libavcodec/mpegaudio_parser.c
index 7cfd107d53..06d46f2152 100644
--- a/libavcodec/mpegaudio_parser.c
+++ b/libavcodec/mpegaudio_parser.c
@@ -38,45 +38,6 @@ typedef struct MpegAudioParseContext {
#define SAME_HEADER_MASK \
(0xffe00000 | (3 << 17) | (3 << 10) | (3 << 19))
-/* useful helper to get mpeg audio stream infos. Return -1 if error in
- header, otherwise the coded frame size in bytes */
-int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bit_rate)
-{
- MPADecodeHeader s1, *s = &s1;
-
- if (ff_mpa_check_header(head) != 0)
- return -1;
-
- if (ff_mpegaudio_decode_header(s, head) != 0) {
- return -1;
- }
-
- switch(s->layer) {
- case 1:
- avctx->codec_id = CODEC_ID_MP1;
- *frame_size = 384;
- break;
- case 2:
- avctx->codec_id = CODEC_ID_MP2;
- *frame_size = 1152;
- break;
- default:
- case 3:
- avctx->codec_id = CODEC_ID_MP3;
- if (s->lsf)
- *frame_size = 576;
- else
- *frame_size = 1152;
- break;
- }
-
- *sample_rate = s->sample_rate;
- *channels = s->nb_channels;
- *bit_rate = s->bit_rate;
- avctx->sub_id = s->layer;
- return s->frame_size;
-}
-
static int mpegaudio_parse(AVCodecParserContext *s1,
AVCodecContext *avctx,
const uint8_t **poutbuf, int *poutbuf_size,
diff --git a/libavcodec/mpegaudiodecheader.c b/libavcodec/mpegaudiodecheader.c
index a0bd4fcee6..be7abc619d 100644
--- a/libavcodec/mpegaudiodecheader.c
+++ b/libavcodec/mpegaudiodecheader.c
@@ -108,3 +108,40 @@ int ff_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header)
#endif
return 0;
}
+
+int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bit_rate)
+{
+ MPADecodeHeader s1, *s = &s1;
+
+ if (ff_mpa_check_header(head) != 0)
+ return -1;
+
+ if (ff_mpegaudio_decode_header(s, head) != 0) {
+ return -1;
+ }
+
+ switch(s->layer) {
+ case 1:
+ avctx->codec_id = CODEC_ID_MP1;
+ *frame_size = 384;
+ break;
+ case 2:
+ avctx->codec_id = CODEC_ID_MP2;
+ *frame_size = 1152;
+ break;
+ default:
+ case 3:
+ avctx->codec_id = CODEC_ID_MP3;
+ if (s->lsf)
+ *frame_size = 576;
+ else
+ *frame_size = 1152;
+ break;
+ }
+
+ *sample_rate = s->sample_rate;
+ *channels = s->nb_channels;
+ *bit_rate = s->bit_rate;
+ avctx->sub_id = s->layer;
+ return s->frame_size;
+}
diff --git a/libavcodec/mpegaudiodecheader.h b/libavcodec/mpegaudiodecheader.h
index 41a491b986..2991595b02 100644
--- a/libavcodec/mpegaudiodecheader.h
+++ b/libavcodec/mpegaudiodecheader.h
@@ -27,13 +27,50 @@
#ifndef AVCODEC_MPEGAUDIODECHEADER_H
#define AVCODEC_MPEGAUDIODECHEADER_H
-#include "libavutil/common.h"
-#include "mpegaudio.h"
+#include "avcodec.h"
+#define MP3_MASK 0xFFFE0CCF
+
+#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;
/* header decoding. MUST check the header before because no
consistency check is done there. Return 1 if free format found and
that the frame size must be computed externally */
int ff_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header);
+/* useful helper to get mpeg audio stream infos. Return -1 if error in
+ header, otherwise the coded frame size in bytes */
+int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bitrate);
+
+/* fast header check for resync */
+static inline int ff_mpa_check_header(uint32_t header){
+ /* header */
+ if ((header & 0xffe00000) != 0xffe00000)
+ return -1;
+ /* layer check */
+ if ((header & (3<<17)) == 0)
+ return -1;
+ /* bit rate */
+ if ((header & (0xf<<12)) == 0xf<<12)
+ return -1;
+ /* frequency */
+ if ((header & (3<<10)) == 3<<10)
+ return -1;
+ return 0;
+}
+
#endif /* AVCODEC_MPEGAUDIODECHEADER_H */