Mercurial > libavcodec.hg
comparison mpegaudio_parser.c @ 5050:a5f6fbc9fa66 libavcodec
loosen dependencies over mpegaudiodec
author | aurel |
---|---|
date | Sun, 20 May 2007 13:40:07 +0000 |
parents | 0d1cc37d9430 |
children | b908c67063c8 |
comparison
equal
deleted
inserted
replaced
5049:668249bc4c16 | 5050:a5f6fbc9fa66 |
---|---|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 */ | 21 */ |
22 | 22 |
23 #include "parser.h" | 23 #include "parser.h" |
24 #include "mpegaudio.h" | 24 #include "mpegaudio.h" |
25 #include "mpegaudiodecheader.h" | |
25 | 26 |
26 | 27 |
27 typedef struct MpegAudioParseContext { | 28 typedef struct MpegAudioParseContext { |
28 uint8_t inbuf[MPA_MAX_CODED_FRAME_SIZE]; /* input buffer */ | 29 uint8_t inbuf[MPA_MAX_CODED_FRAME_SIZE]; /* input buffer */ |
29 uint8_t *inbuf_ptr; | 30 uint8_t *inbuf_ptr; |
38 | 39 |
39 /* header + layer + bitrate + freq + lsf/mpeg25 */ | 40 /* header + layer + bitrate + freq + lsf/mpeg25 */ |
40 #undef SAME_HEADER_MASK /* mpegaudio.h defines different version */ | 41 #undef SAME_HEADER_MASK /* mpegaudio.h defines different version */ |
41 #define SAME_HEADER_MASK \ | 42 #define SAME_HEADER_MASK \ |
42 (0xffe00000 | (3 << 17) | (3 << 10) | (3 << 19)) | 43 (0xffe00000 | (3 << 17) | (3 << 10) | (3 << 19)) |
44 | |
45 /* useful helper to get mpeg audio stream infos. Return -1 if error in | |
46 header, otherwise the coded frame size in bytes */ | |
47 int mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate) | |
48 { | |
49 MPADecodeContext s1, *s = &s1; | |
50 s1.avctx = avctx; | |
51 | |
52 if (ff_mpa_check_header(head) != 0) | |
53 return -1; | |
54 | |
55 if (decode_header(s, head) != 0) { | |
56 return -1; | |
57 } | |
58 | |
59 switch(s->layer) { | |
60 case 1: | |
61 avctx->frame_size = 384; | |
62 break; | |
63 case 2: | |
64 avctx->frame_size = 1152; | |
65 break; | |
66 default: | |
67 case 3: | |
68 if (s->lsf) | |
69 avctx->frame_size = 576; | |
70 else | |
71 avctx->frame_size = 1152; | |
72 break; | |
73 } | |
74 | |
75 *sample_rate = s->sample_rate; | |
76 avctx->channels = s->nb_channels; | |
77 avctx->bit_rate = s->bit_rate; | |
78 avctx->sub_id = s->layer; | |
79 return s->frame_size; | |
80 } | |
43 | 81 |
44 static int mpegaudio_parse_init(AVCodecParserContext *s1) | 82 static int mpegaudio_parse_init(AVCodecParserContext *s1) |
45 { | 83 { |
46 MpegAudioParseContext *s = s1->priv_data; | 84 MpegAudioParseContext *s = s1->priv_data; |
47 s->inbuf_ptr = s->inbuf; | 85 s->inbuf_ptr = s->inbuf; |