use the width & height from the mpeg4 header ... in the case that its complete

Originally committed as revision 340 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Michael Niedermayer 23 years ago
parent 019d276a12
commit 488fa19a86
  1. 4
      libavcodec/h263.c
  2. 28
      libavcodec/h263dec.c

@ -2149,6 +2149,10 @@ int mpeg4_decode_picture_header(MpegEncContext * s)
skip_bits1(&s->gb); /* marker */
height = get_bits(&s->gb, 13);
skip_bits1(&s->gb); /* marker */
if(width && height){ /* they should be non zero but who knows ... */
s->width = width;
s->height = height;
}
}
if(get_bits1(&s->gb)) printf("interlaced not supported\n"); /* interlaced */

@ -59,7 +59,7 @@ static int h263_decode_init(AVCodecContext *avctx)
}
/* for h263, we allocate the images after having read the header */
if (avctx->codec->id != CODEC_ID_H263)
if (avctx->codec->id != CODEC_ID_H263 && avctx->codec->id != CODEC_ID_MPEG4)
if (MPV_common_init(s) < 0)
return -1;
@ -114,22 +114,24 @@ static int h263_decode_frame(AVCodecContext *avctx,
ret = intel_h263_decode_picture_header(s);
} else {
ret = h263_decode_picture_header(s);
/* After H263 header decode we have the height, width, */
}
/* After H263 & mpeg4 header decode we have the height, width,*/
/* and other parameters. So then we could init the picture */
/* FIXME: By the way H263 decoder is evolving it should have */
/* an H263EncContext */
if (!s->context_initialized) {
avctx->width = s->width;
avctx->height = s->height;
if (MPV_common_init(s) < 0)
return -1;
} else if (s->width != avctx->width || s->height != avctx->height) {
/* H.263 could change picture size any time */
MPV_common_end(s);
if (MPV_common_init(s) < 0)
return -1;
}
if (!s->context_initialized) {
avctx->width = s->width;
avctx->height = s->height;
if (MPV_common_init(s) < 0)
return -1;
} else if (s->width != avctx->width || s->height != avctx->height) {
/* H.263 could change picture size any time */
MPV_common_end(s);
if (MPV_common_init(s) < 0)
return -1;
}
if (ret < 0)
return -1;

Loading…
Cancel
Save