also parse extradata for MPEG4

Originally committed as revision 2493 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Fabrice Bellard 21 years ago
parent 8424cf505c
commit c6f353ff61
  1. 12
      libavcodec/parser.c

@ -114,8 +114,10 @@ typedef struct ParseContext1{
int frame_rate; int frame_rate;
int progressive_sequence; int progressive_sequence;
int width, height; int width, height;
/* XXX: suppress that, needed by MPEG4 */ /* XXX: suppress that, needed by MPEG4 */
MpegEncContext *enc; MpegEncContext *enc;
int first_picture;
} ParseContext1; } ParseContext1;
/** /**
@ -439,21 +441,31 @@ static int av_mpeg4_decode_header(AVCodecParserContext *s1,
int ret; int ret;
s->avctx = avctx; s->avctx = avctx;
s->current_picture_ptr = &s->current_picture;
if (avctx->extradata_size && pc->first_picture){
init_get_bits(gb, avctx->extradata, avctx->extradata_size*8);
ret = ff_mpeg4_decode_picture_header(s, gb);
}
init_get_bits(gb, buf, 8 * buf_size); init_get_bits(gb, buf, 8 * buf_size);
ret = ff_mpeg4_decode_picture_header(s, gb); ret = ff_mpeg4_decode_picture_header(s, gb);
if (s->width) { if (s->width) {
avctx->width = s->width; avctx->width = s->width;
avctx->height = s->height; avctx->height = s->height;
} }
pc->first_picture = 0;
return ret; return ret;
} }
int mpeg4video_parse_init(AVCodecParserContext *s) int mpeg4video_parse_init(AVCodecParserContext *s)
{ {
ParseContext1 *pc = s->priv_data; ParseContext1 *pc = s->priv_data;
pc->enc = av_mallocz(sizeof(MpegEncContext)); pc->enc = av_mallocz(sizeof(MpegEncContext));
if (!pc->enc) if (!pc->enc)
return -1; return -1;
pc->first_picture = 1;
return 0; return 0;
} }

Loading…
Cancel
Save