X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmpeg4video_parser.c;h=9ca0f1497679ccef25f0dd440577a680f1eb739a;hb=409e684e79b6ee0c511292326f09b13fe230e58e;hp=b7d6da1f75257ff007243b5cec710ace73ba6ff2;hpb=b14761d1f8372dfe558193b8b754b9f1a858077d;p=ffmpeg diff --git a/libavcodec/mpeg4video_parser.c b/libavcodec/mpeg4video_parser.c index b7d6da1f752..9ca0f149767 100644 --- a/libavcodec/mpeg4video_parser.c +++ b/libavcodec/mpeg4video_parser.c @@ -46,7 +46,7 @@ int ff_mpeg4_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size) if (!vop_found) { for (i = 0; i < buf_size; i++) { state = (state << 8) | buf[i]; - if (state == 0x1B6) { + if (state == VOP_STARTCODE) { i++; vop_found = 1; break; @@ -61,6 +61,8 @@ int ff_mpeg4_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size) for (; i < buf_size; i++) { state = (state << 8) | buf[i]; if ((state & 0xFFFFFF00) == 0x100) { + if (state == SLICE_STARTCODE || state == EXT_STARTCODE) + continue; pc->frame_start_found = 0; pc->state = -1; return i - 3; @@ -87,13 +89,13 @@ static int mpeg4_decode_header(AVCodecParserContext *s1, AVCodecContext *avctx, if (avctx->extradata_size && pc->first_picture) { init_get_bits(gb, avctx->extradata, avctx->extradata_size * 8); - ret = ff_mpeg4_decode_picture_header(dec_ctx, gb); - if (ret < -1) + ret = ff_mpeg4_decode_picture_header(dec_ctx, gb, 1); + if (ret < 0) av_log(avctx, AV_LOG_WARNING, "Failed to parse extradata\n"); } init_get_bits(gb, buf, 8 * buf_size); - ret = ff_mpeg4_decode_picture_header(dec_ctx, gb); + ret = ff_mpeg4_decode_picture_header(dec_ctx, gb, 0); if (s->width && (!avctx->width || !avctx->height || !avctx->coded_width || !avctx->coded_height)) { ret = ff_set_dimensions(avctx, s->width, s->height);