X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fvc1dec.c;h=fdbb05d6d844a436b884507c8566450551a4fab6;hb=f4df5039a791a56de85c64e6b9e4448a221b5c40;hp=f4101ae5947edbeec616d262ad711fdf6a680c68;hpb=4d8875ec23cf299277a0f028ea2ac99eb6f603c9;p=ffmpeg diff --git a/libavformat/vc1dec.c b/libavformat/vc1dec.c index f4101ae5947..fdbb05d6d84 100644 --- a/libavformat/vc1dec.c +++ b/libavformat/vc1dec.c @@ -26,7 +26,7 @@ static int vc1_probe(const AVProbeData *p) { - int seq = 0, entry = 0, frame = 0, i; + int seq = 0, entry = 0, invalid = 0, frame = 0, i; for (i = 0; i < p->buf_size + 5; i++) { uint32_t code = AV_RB32(p->buf + i); @@ -39,16 +39,19 @@ static int vc1_probe(const AVProbeData *p) profile = (p->buf[i] & 0xc0) >> 6; if (profile != PROFILE_ADVANCED) { seq = 0; + invalid++; continue; } level = (p->buf[i] & 0x38) >> 3; if (level >= 5) { seq = 0; + invalid++; continue; } chromaformat = (p->buf[i] & 0x6) >> 1; if (chromaformat != 1) { seq = 0; + invalid++; continue; } seq++; @@ -56,8 +59,10 @@ static int vc1_probe(const AVProbeData *p) break; } case VC1_CODE_ENTRYPOINT: - if (!seq) + if (!seq) { + invalid++; continue; + } entry++; i += 2; break; @@ -71,9 +76,9 @@ static int vc1_probe(const AVProbeData *p) } } - if (frame > 1) + if (frame > 1 && frame >> 1 > invalid) return AVPROBE_SCORE_EXTENSION / 2 + 1; - if (frame == 1) + if (frame >= 1) return AVPROBE_SCORE_EXTENSION / 4; return 0; }