X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fvc1dec.c;h=fdbb05d6d844a436b884507c8566450551a4fab6;hb=1eb311011548867b118dd461442365195fb5fb7d;hp=33f84652ebe8cc6e043af5dd0163ca95fff0a089;hpb=73d193d1d0ff62a029a905d1404c0fd357f4c880;p=ffmpeg diff --git a/libavformat/vc1dec.c b/libavformat/vc1dec.c index 33f84652ebe..fdbb05d6d84 100644 --- a/libavformat/vc1dec.c +++ b/libavformat/vc1dec.c @@ -24,9 +24,9 @@ #include "libavutil/intreadwrite.h" #include "libavcodec/vc1_common.h" -static int vc1_probe(AVProbeData *p) +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(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(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(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; }