2 * Audio and Video frame extraction
3 * Copyright (c) 2003 Fabrice Bellard.
4 * Copyright (c) 2003 Michael Niedermayer.
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #include "mpegvideo.h"
22 #include "mpegaudio.h"
24 AVCodecParser *av_first_parser = NULL;
26 void av_register_codec_parser(AVCodecParser *parser)
28 parser->next = av_first_parser;
29 av_first_parser = parser;
32 AVCodecParserContext *av_parser_init(int codec_id)
34 AVCodecParserContext *s;
35 AVCodecParser *parser;
38 if(codec_id == CODEC_ID_NONE)
41 for(parser = av_first_parser; parser != NULL; parser = parser->next) {
42 if (parser->codec_ids[0] == codec_id ||
43 parser->codec_ids[1] == codec_id ||
44 parser->codec_ids[2] == codec_id ||
45 parser->codec_ids[3] == codec_id ||
46 parser->codec_ids[4] == codec_id)
51 s = av_mallocz(sizeof(AVCodecParserContext));
55 s->priv_data = av_mallocz(parser->priv_data_size);
60 if (parser->parser_init) {
61 ret = parser->parser_init(s);
63 av_free(s->priv_data);
72 /* NOTE: buf_size == 0 is used to signal EOF so that the last frame
73 can be returned if necessary */
74 int av_parser_parse(AVCodecParserContext *s,
75 AVCodecContext *avctx,
76 uint8_t **poutbuf, int *poutbuf_size,
77 const uint8_t *buf, int buf_size,
78 int64_t pts, int64_t dts)
81 uint8_t dummy_buf[FF_INPUT_BUFFER_PADDING_SIZE];
84 /* padding is always necessary even if EOF, so we add it here */
85 memset(dummy_buf, 0, sizeof(dummy_buf));
88 /* add a new packet descriptor */
89 k = (s->cur_frame_start_index + 1) & (AV_PARSER_PTS_NB - 1);
90 s->cur_frame_start_index = k;
91 s->cur_frame_offset[k] = s->cur_offset;
92 s->cur_frame_pts[k] = pts;
93 s->cur_frame_dts[k] = dts;
95 /* fill first PTS/DTS */
96 if (s->fetch_timestamp){
100 s->cur_frame_pts[k] =
101 s->cur_frame_dts[k] = AV_NOPTS_VALUE;
105 /* WARNING: the returned index can be negative */
106 index = s->parser->parser_parse(s, avctx, poutbuf, poutbuf_size, buf, buf_size);
107 //av_log(NULL, AV_LOG_DEBUG, "parser: in:%lld, %lld, out:%lld, %lld, in:%d out:%d id:%d\n", pts, dts, s->last_pts, s->last_dts, buf_size, *poutbuf_size, avctx->codec_id);
108 /* update the file pointer */
110 /* fill the data for the current frame */
111 s->frame_offset = s->last_frame_offset;
112 s->pts = s->last_pts;
113 s->dts = s->last_dts;
115 /* offset of the next frame */
116 s->last_frame_offset = s->cur_offset + index;
117 /* find the packet in which the new frame starts. It
118 is tricky because of MPEG video start codes
119 which can begin in one packet and finish in
120 another packet. In the worst case, an MPEG
121 video start code could be in 4 different
123 k = s->cur_frame_start_index;
124 for(i = 0; i < AV_PARSER_PTS_NB; i++) {
125 if (s->last_frame_offset >= s->cur_frame_offset[k])
127 k = (k - 1) & (AV_PARSER_PTS_NB - 1);
130 s->last_pts = s->cur_frame_pts[k];
131 s->last_dts = s->cur_frame_dts[k];
133 /* some parsers tell us the packet size even before seeing the first byte of the next packet,
134 so the next pts/dts is in the next chunk */
135 if(index == buf_size){
136 s->fetch_timestamp=1;
141 s->cur_offset += index;
147 * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
149 int av_parser_change(AVCodecParserContext *s,
150 AVCodecContext *avctx,
151 uint8_t **poutbuf, int *poutbuf_size,
152 const uint8_t *buf, int buf_size, int keyframe){
154 if(s && s->parser->split){
155 if((avctx->flags & CODEC_FLAG_GLOBAL_HEADER) || (avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER)){
156 int i= s->parser->split(avctx, buf, buf_size);
162 /* cast to avoid warning about discarding qualifiers */
163 *poutbuf= (uint8_t *) buf;
164 *poutbuf_size= buf_size;
165 if(avctx->extradata){
166 if( (keyframe && (avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER))
167 /*||(s->pict_type != I_TYPE && (s->flags & PARSER_FLAG_DUMP_EXTRADATA_AT_NOKEY))*/
168 /*||(? && (s->flags & PARSER_FLAG_DUMP_EXTRADATA_AT_BEGIN)*/){
169 int size= buf_size + avctx->extradata_size;
171 *poutbuf= av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
173 memcpy(*poutbuf, avctx->extradata, avctx->extradata_size);
174 memcpy((*poutbuf) + avctx->extradata_size, buf, buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
182 void av_parser_close(AVCodecParserContext *s)
184 if (s->parser->parser_close)
185 s->parser->parser_close(s);
186 av_free(s->priv_data);
190 /*****************************************************/
192 //#define END_NOT_FOUND (-100)
194 #define PICTURE_START_CODE 0x00000100
195 #define SEQ_START_CODE 0x000001b3
196 #define EXT_START_CODE 0x000001b5
197 #define SLICE_MIN_START_CODE 0x00000101
198 #define SLICE_MAX_START_CODE 0x000001af
200 typedef struct ParseContext1{
202 /* XXX/FIXME PC1 vs. PC */
205 int progressive_sequence;
208 /* XXX: suppress that, needed by MPEG4 */
214 * combines the (truncated) bitstream to a complete frame
215 * @returns -1 if no complete frame could be created
217 int ff_combine_frame(ParseContext *pc, int next, uint8_t **buf, int *buf_size)
221 printf("overread %d, state:%X next:%d index:%d o_index:%d\n", pc->overread, pc->state, next, pc->index, pc->overread_index);
222 printf("%X %X %X %X\n", (*buf)[0], (*buf)[1],(*buf)[2],(*buf)[3]);
226 /* copy overreaded bytes from last frame into buffer */
227 for(; pc->overread>0; pc->overread--){
228 pc->buffer[pc->index++]= pc->buffer[pc->overread_index++];
231 /* flush remaining if EOF */
232 if(!*buf_size && next == END_NOT_FOUND){
236 pc->last_index= pc->index;
238 /* copy into buffer end return */
239 if(next == END_NOT_FOUND){
240 pc->buffer= av_fast_realloc(pc->buffer, &pc->buffer_size, (*buf_size) + pc->index + FF_INPUT_BUFFER_PADDING_SIZE);
242 memcpy(&pc->buffer[pc->index], *buf, *buf_size);
243 pc->index += *buf_size;
248 pc->overread_index= pc->index + next;
250 /* append to buffer */
252 pc->buffer= av_fast_realloc(pc->buffer, &pc->buffer_size, next + pc->index + FF_INPUT_BUFFER_PADDING_SIZE);
254 memcpy(&pc->buffer[pc->index], *buf, next + FF_INPUT_BUFFER_PADDING_SIZE );
259 /* store overread bytes */
260 for(;next < 0; next++){
261 pc->state = (pc->state<<8) | pc->buffer[pc->last_index + next];
267 printf("overread %d, state:%X next:%d index:%d o_index:%d\n", pc->overread, pc->state, next, pc->index, pc->overread_index);
268 printf("%X %X %X %X\n", (*buf)[0], (*buf)[1],(*buf)[2],(*buf)[3]);
275 /* XXX: merge with libavcodec ? */
276 #define MPEG1_FRAME_RATE_BASE 1001
278 static const int frame_rate_tab[16] = {
290 // libmpeg3's "Unofficial economy rates": (10-13)
295 // random, just to avoid segfault !never encode these
300 //FIXME move into mpeg12.c
301 static void mpegvideo_extract_headers(AVCodecParserContext *s,
302 AVCodecContext *avctx,
303 const uint8_t *buf, int buf_size)
305 ParseContext1 *pc = s->priv_data;
306 const uint8_t *buf_end;
308 int frame_rate_index, ext_type, bytes_left;
309 int frame_rate_ext_n, frame_rate_ext_d;
310 int picture_structure, top_field_first, repeat_first_field, progressive_frame;
311 int horiz_size_ext, vert_size_ext, bit_rate_ext;
312 //FIXME replace the crap with get_bits()
314 buf_end = buf + buf_size;
315 while (buf < buf_end) {
317 buf= ff_find_start_code(buf, buf_end, &start_code);
318 bytes_left = buf_end - buf;
320 case PICTURE_START_CODE:
321 if (bytes_left >= 2) {
322 s->pict_type = (buf[1] >> 3) & 7;
326 if (bytes_left >= 7) {
327 pc->width = (buf[0] << 4) | (buf[1] >> 4);
328 pc->height = ((buf[1] & 0x0f) << 8) | buf[2];
329 avcodec_set_dimensions(avctx, pc->width, pc->height);
330 frame_rate_index = buf[3] & 0xf;
331 pc->frame_rate = avctx->time_base.den = frame_rate_tab[frame_rate_index];
332 avctx->time_base.num = MPEG1_FRAME_RATE_BASE;
333 avctx->bit_rate = ((buf[4]<<10) | (buf[5]<<2) | (buf[6]>>6))*400;
334 avctx->codec_id = CODEC_ID_MPEG1VIDEO;
339 if (bytes_left >= 1) {
340 ext_type = (buf[0] >> 4);
342 case 0x1: /* sequence extension */
343 if (bytes_left >= 6) {
344 horiz_size_ext = ((buf[1] & 1) << 1) | (buf[2] >> 7);
345 vert_size_ext = (buf[2] >> 5) & 3;
346 bit_rate_ext = ((buf[2] & 0x1F)<<7) | (buf[3]>>1);
347 frame_rate_ext_n = (buf[5] >> 5) & 3;
348 frame_rate_ext_d = (buf[5] & 0x1f);
349 pc->progressive_sequence = buf[1] & (1 << 3);
350 avctx->has_b_frames= !(buf[5] >> 7);
352 pc->width |=(horiz_size_ext << 12);
353 pc->height |=( vert_size_ext << 12);
354 avctx->bit_rate += (bit_rate_ext << 18) * 400;
355 avcodec_set_dimensions(avctx, pc->width, pc->height);
356 avctx->time_base.den = pc->frame_rate * (frame_rate_ext_n + 1);
357 avctx->time_base.num = MPEG1_FRAME_RATE_BASE * (frame_rate_ext_d + 1);
358 avctx->codec_id = CODEC_ID_MPEG2VIDEO;
359 avctx->sub_id = 2; /* forces MPEG2 */
362 case 0x8: /* picture coding extension */
363 if (bytes_left >= 5) {
364 picture_structure = buf[2]&3;
365 top_field_first = buf[3] & (1 << 7);
366 repeat_first_field = buf[3] & (1 << 1);
367 progressive_frame = buf[4] & (1 << 7);
369 /* check if we must repeat the frame */
370 if (repeat_first_field) {
371 if (pc->progressive_sequence) {
376 } else if (progressive_frame) {
381 /* the packet only represents half a frame
382 XXX,FIXME maybe find a different solution */
383 if(picture_structure != 3)
393 /* we stop parsing when we encounter a slice. It ensures
394 that this function takes a negligible amount of time */
395 if (start_code >= SLICE_MIN_START_CODE &&
396 start_code <= SLICE_MAX_START_CODE)
404 static int mpegvideo_parse(AVCodecParserContext *s,
405 AVCodecContext *avctx,
406 uint8_t **poutbuf, int *poutbuf_size,
407 const uint8_t *buf, int buf_size)
409 ParseContext1 *pc1 = s->priv_data;
410 ParseContext *pc= &pc1->pc;
413 if(s->flags & PARSER_FLAG_COMPLETE_FRAMES){
416 next= ff_mpeg1_find_frame_end(pc, buf, buf_size);
418 if (ff_combine_frame(pc, next, (uint8_t **)&buf, &buf_size) < 0) {
425 /* we have a full frame : we just parse the first few MPEG headers
426 to have the full timing information. The time take by this
427 function should be negligible for uncorrupted streams */
428 mpegvideo_extract_headers(s, avctx, buf, buf_size);
430 printf("pict_type=%d frame_rate=%0.3f repeat_pict=%d\n",
431 s->pict_type, (double)avctx->time_base.den / avctx->time_base.num, s->repeat_pict);
434 *poutbuf = (uint8_t *)buf;
435 *poutbuf_size = buf_size;
439 static int mpegvideo_split(AVCodecContext *avctx,
440 const uint8_t *buf, int buf_size)
445 for(i=0; i<buf_size; i++){
446 state= (state<<8) | buf[i];
447 if(state != 0x1B3 && state != 0x1B5 && state < 0x200 && state >= 0x100)
453 void ff_parse_close(AVCodecParserContext *s)
455 ParseContext *pc = s->priv_data;
460 static void parse1_close(AVCodecParserContext *s)
462 ParseContext1 *pc1 = s->priv_data;
464 av_free(pc1->pc.buffer);
468 /*************************/
471 /* XXX: make it use less memory */
472 static int av_mpeg4_decode_header(AVCodecParserContext *s1,
473 AVCodecContext *avctx,
474 const uint8_t *buf, int buf_size)
476 ParseContext1 *pc = s1->priv_data;
477 MpegEncContext *s = pc->enc;
478 GetBitContext gb1, *gb = &gb1;
482 s->current_picture_ptr = &s->current_picture;
484 if (avctx->extradata_size && pc->first_picture){
485 init_get_bits(gb, avctx->extradata, avctx->extradata_size*8);
486 ret = ff_mpeg4_decode_picture_header(s, gb);
489 init_get_bits(gb, buf, 8 * buf_size);
490 ret = ff_mpeg4_decode_picture_header(s, gb);
492 avcodec_set_dimensions(avctx, s->width, s->height);
494 s1->pict_type= s->pict_type;
495 pc->first_picture = 0;
499 static int mpeg4video_parse_init(AVCodecParserContext *s)
501 ParseContext1 *pc = s->priv_data;
503 pc->enc = av_mallocz(sizeof(MpegEncContext));
506 pc->first_picture = 1;
510 static int mpeg4video_parse(AVCodecParserContext *s,
511 AVCodecContext *avctx,
512 uint8_t **poutbuf, int *poutbuf_size,
513 const uint8_t *buf, int buf_size)
515 ParseContext *pc = s->priv_data;
518 if(s->flags & PARSER_FLAG_COMPLETE_FRAMES){
521 next= ff_mpeg4_find_frame_end(pc, buf, buf_size);
523 if (ff_combine_frame(pc, next, (uint8_t **)&buf, &buf_size) < 0) {
529 av_mpeg4_decode_header(s, avctx, buf, buf_size);
531 *poutbuf = (uint8_t *)buf;
532 *poutbuf_size = buf_size;
536 static int cavsvideo_parse(AVCodecParserContext *s,
537 AVCodecContext *avctx,
538 uint8_t **poutbuf, int *poutbuf_size,
539 const uint8_t *buf, int buf_size)
541 ParseContext *pc = s->priv_data;
544 if(s->flags & PARSER_FLAG_COMPLETE_FRAMES){
547 next= ff_cavs_find_frame_end(pc, buf, buf_size);
549 if (ff_combine_frame(pc, next, (uint8_t **)&buf, &buf_size) < 0) {
555 *poutbuf = (uint8_t *)buf;
556 *poutbuf_size = buf_size;
560 static int mpeg4video_split(AVCodecContext *avctx,
561 const uint8_t *buf, int buf_size)
566 for(i=0; i<buf_size; i++){
567 state= (state<<8) | buf[i];
568 if(state == 0x1B3 || state == 0x1B6)
574 /*************************/
576 typedef struct MpegAudioParseContext {
577 uint8_t inbuf[MPA_MAX_CODED_FRAME_SIZE]; /* input buffer */
580 int free_format_frame_size;
581 int free_format_next_header;
584 } MpegAudioParseContext;
586 #define MPA_HEADER_SIZE 4
588 /* header + layer + bitrate + freq + lsf/mpeg25 */
589 #undef SAME_HEADER_MASK /* mpegaudio.h defines different version */
590 #define SAME_HEADER_MASK \
591 (0xffe00000 | (3 << 17) | (3 << 10) | (3 << 19))
593 static int mpegaudio_parse_init(AVCodecParserContext *s1)
595 MpegAudioParseContext *s = s1->priv_data;
596 s->inbuf_ptr = s->inbuf;
600 static int mpegaudio_parse(AVCodecParserContext *s1,
601 AVCodecContext *avctx,
602 uint8_t **poutbuf, int *poutbuf_size,
603 const uint8_t *buf, int buf_size)
605 MpegAudioParseContext *s = s1->priv_data;
608 const uint8_t *buf_ptr;
613 while (buf_size > 0) {
614 len = s->inbuf_ptr - s->inbuf;
615 if (s->frame_size == 0) {
616 /* special case for next header for first frame in free
617 format case (XXX: find a simpler method) */
618 if (s->free_format_next_header != 0) {
619 s->inbuf[0] = s->free_format_next_header >> 24;
620 s->inbuf[1] = s->free_format_next_header >> 16;
621 s->inbuf[2] = s->free_format_next_header >> 8;
622 s->inbuf[3] = s->free_format_next_header;
623 s->inbuf_ptr = s->inbuf + 4;
624 s->free_format_next_header = 0;
627 /* no header seen : find one. We need at least MPA_HEADER_SIZE
629 len = MPA_HEADER_SIZE - len;
633 memcpy(s->inbuf_ptr, buf_ptr, len);
638 if ((s->inbuf_ptr - s->inbuf) >= MPA_HEADER_SIZE) {
640 sr= avctx->sample_rate;
641 header = (s->inbuf[0] << 24) | (s->inbuf[1] << 16) |
642 (s->inbuf[2] << 8) | s->inbuf[3];
644 ret = mpa_decode_header(avctx, header);
647 /* no sync found : move by one byte (inefficient, but simple!) */
648 memmove(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf - 1);
650 dprintf("skip %x\n", header);
651 /* reset free format frame size to give a chance
652 to get a new bitrate */
653 s->free_format_frame_size = 0;
655 if((header&SAME_HEADER_MASK) != (s->header&SAME_HEADER_MASK) && s->header)
662 /* free format: prepare to compute frame size */
663 if (decode_header(s, header) == 1) {
668 if(s->header_count <= 0)
669 avctx->sample_rate= sr; //FIXME ugly
673 if (s->frame_size == -1) {
674 /* free format : find next sync to compute frame size */
675 len = MPA_MAX_CODED_FRAME_SIZE - len;
679 /* frame too long: resync */
681 memmove(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf - 1);
688 memcpy(s->inbuf_ptr, buf_ptr, len);
689 /* check for header */
690 p = s->inbuf_ptr - 3;
691 pend = s->inbuf_ptr + len - 4;
693 header = (p[0] << 24) | (p[1] << 16) |
695 header1 = (s->inbuf[0] << 24) | (s->inbuf[1] << 16) |
696 (s->inbuf[2] << 8) | s->inbuf[3];
697 /* check with high probability that we have a
699 if ((header & SAME_HEADER_MASK) ==
700 (header1 & SAME_HEADER_MASK)) {
701 /* header found: update pointers */
702 len = (p + 4) - s->inbuf_ptr;
706 /* compute frame size */
707 s->free_format_next_header = header;
708 s->free_format_frame_size = s->inbuf_ptr - s->inbuf;
709 padding = (header1 >> 9) & 1;
711 s->free_format_frame_size -= padding * 4;
713 s->free_format_frame_size -= padding;
714 dprintf("free frame size=%d padding=%d\n",
715 s->free_format_frame_size, padding);
716 decode_header(s, header1);
721 /* not found: simply increase pointers */
728 if (len < s->frame_size) {
729 if (s->frame_size > MPA_MAX_CODED_FRAME_SIZE)
730 s->frame_size = MPA_MAX_CODED_FRAME_SIZE;
731 len = s->frame_size - len;
734 memcpy(s->inbuf_ptr, buf_ptr, len);
740 if (s->frame_size > 0 &&
741 (s->inbuf_ptr - s->inbuf) >= s->frame_size) {
742 if(s->header_count > 0){
744 *poutbuf_size = s->inbuf_ptr - s->inbuf;
746 s->inbuf_ptr = s->inbuf;
751 return buf_ptr - buf;
754 /* also used for ADTS AAC */
755 typedef struct AC3ParseContext {
759 int (*sync)(const uint8_t *buf, int *channels, int *sample_rate,
760 int *bit_rate, int *samples);
761 uint8_t inbuf[8192]; /* input buffer */
764 #define AC3_HEADER_SIZE 7
765 #define AAC_HEADER_SIZE 7
767 static const int ac3_sample_rates[4] = {
768 48000, 44100, 32000, 0
771 static const int ac3_frame_sizes[64][3] = {
804 { 1024, 1114, 1536 },
805 { 1024, 1115, 1536 },
806 { 1152, 1253, 1728 },
807 { 1152, 1254, 1728 },
808 { 1280, 1393, 1920 },
809 { 1280, 1394, 1920 },
812 static const int ac3_bitrates[64] = {
813 32, 32, 40, 40, 48, 48, 56, 56, 64, 64, 80, 80, 96, 96, 112, 112,
814 128, 128, 160, 160, 192, 192, 224, 224, 256, 256, 320, 320, 384,
815 384, 448, 448, 512, 512, 576, 576, 640, 640,
818 static const int ac3_channels[8] = {
819 2, 1, 2, 3, 3, 4, 4, 5
822 static int aac_sample_rates[16] = {
823 96000, 88200, 64000, 48000, 44100, 32000,
824 24000, 22050, 16000, 12000, 11025, 8000, 7350
827 static int aac_channels[8] = {
828 0, 1, 2, 3, 4, 5, 6, 8
831 static int ac3_sync(const uint8_t *buf, int *channels, int *sample_rate,
832 int *bit_rate, int *samples)
834 unsigned int fscod, frmsizecod, acmod, bsid, lfeon;
837 init_get_bits(&bits, buf, AC3_HEADER_SIZE * 8);
839 if(get_bits(&bits, 16) != 0x0b77)
842 skip_bits(&bits, 16); /* crc */
843 fscod = get_bits(&bits, 2);
844 frmsizecod = get_bits(&bits, 6);
846 if(!ac3_sample_rates[fscod])
849 bsid = get_bits(&bits, 5);
852 skip_bits(&bits, 3); /* bsmod */
853 acmod = get_bits(&bits, 3);
854 if(acmod & 1 && acmod != 1)
855 skip_bits(&bits, 2); /* cmixlev */
857 skip_bits(&bits, 2); /* surmixlev */
859 skip_bits(&bits, 2); /* dsurmod */
860 lfeon = get_bits1(&bits);
862 *sample_rate = ac3_sample_rates[fscod];
863 *bit_rate = ac3_bitrates[frmsizecod] * 1000;
864 *channels = ac3_channels[acmod] + lfeon;
867 return ac3_frame_sizes[frmsizecod][fscod] * 2;
870 static int aac_sync(const uint8_t *buf, int *channels, int *sample_rate,
871 int *bit_rate, int *samples)
874 int size, rdb, ch, sr;
876 init_get_bits(&bits, buf, AAC_HEADER_SIZE * 8);
878 if(get_bits(&bits, 12) != 0xfff)
881 skip_bits1(&bits); /* id */
882 skip_bits(&bits, 2); /* layer */
883 skip_bits1(&bits); /* protection_absent */
884 skip_bits(&bits, 2); /* profile_objecttype */
885 sr = get_bits(&bits, 4); /* sample_frequency_index */
886 if(!aac_sample_rates[sr])
888 skip_bits1(&bits); /* private_bit */
889 ch = get_bits(&bits, 3); /* channel_configuration */
890 if(!aac_channels[ch])
892 skip_bits1(&bits); /* original/copy */
893 skip_bits1(&bits); /* home */
895 /* adts_variable_header */
896 skip_bits1(&bits); /* copyright_identification_bit */
897 skip_bits1(&bits); /* copyright_identification_start */
898 size = get_bits(&bits, 13); /* aac_frame_length */
899 skip_bits(&bits, 11); /* adts_buffer_fullness */
900 rdb = get_bits(&bits, 2); /* number_of_raw_data_blocks_in_frame */
902 *channels = aac_channels[ch];
903 *sample_rate = aac_sample_rates[sr];
904 *samples = (rdb + 1) * 1024;
905 *bit_rate = size * 8 * *sample_rate / *samples;
910 static int ac3_parse_init(AVCodecParserContext *s1)
912 AC3ParseContext *s = s1->priv_data;
913 s->inbuf_ptr = s->inbuf;
914 s->header_size = AC3_HEADER_SIZE;
919 static int aac_parse_init(AVCodecParserContext *s1)
921 AC3ParseContext *s = s1->priv_data;
922 s->inbuf_ptr = s->inbuf;
923 s->header_size = AAC_HEADER_SIZE;
928 /* also used for ADTS AAC */
929 static int ac3_parse(AVCodecParserContext *s1,
930 AVCodecContext *avctx,
931 uint8_t **poutbuf, int *poutbuf_size,
932 const uint8_t *buf, int buf_size)
934 AC3ParseContext *s = s1->priv_data;
935 const uint8_t *buf_ptr;
936 int len, sample_rate, bit_rate, channels, samples;
942 while (buf_size > 0) {
943 len = s->inbuf_ptr - s->inbuf;
944 if (s->frame_size == 0) {
945 /* no header seen : find one. We need at least s->header_size
947 len = FFMIN(s->header_size - len, buf_size);
949 memcpy(s->inbuf_ptr, buf_ptr, len);
953 if ((s->inbuf_ptr - s->inbuf) == s->header_size) {
954 len = s->sync(s->inbuf, &channels, &sample_rate, &bit_rate,
957 /* no sync found : move by one byte (inefficient, but simple!) */
958 memmove(s->inbuf, s->inbuf + 1, s->header_size - 1);
962 /* update codec info */
963 avctx->sample_rate = sample_rate;
964 /* set channels,except if the user explicitly requests 1 or 2 channels, XXX/FIXME this is a bit ugly */
965 if(avctx->codec_id == CODEC_ID_AC3){
966 if(avctx->channels!=1 && avctx->channels!=2){
967 avctx->channels = channels;
970 avctx->channels = channels;
972 avctx->bit_rate = bit_rate;
973 avctx->frame_size = samples;
977 len = FFMIN(s->frame_size - len, buf_size);
979 memcpy(s->inbuf_ptr, buf_ptr, len);
984 if(s->inbuf_ptr - s->inbuf == s->frame_size){
986 *poutbuf_size = s->frame_size;
987 s->inbuf_ptr = s->inbuf;
993 return buf_ptr - buf;
996 AVCodecParser mpegvideo_parser = {
997 { CODEC_ID_MPEG1VIDEO, CODEC_ID_MPEG2VIDEO },
998 sizeof(ParseContext1),
1005 AVCodecParser mpeg4video_parser = {
1007 sizeof(ParseContext1),
1008 mpeg4video_parse_init,
1014 AVCodecParser cavsvideo_parser = {
1016 sizeof(ParseContext1),
1023 AVCodecParser mpegaudio_parser = {
1024 { CODEC_ID_MP2, CODEC_ID_MP3 },
1025 sizeof(MpegAudioParseContext),
1026 mpegaudio_parse_init,
1031 AVCodecParser ac3_parser = {
1033 sizeof(AC3ParseContext),
1039 AVCodecParser aac_parser = {
1041 sizeof(AC3ParseContext),