summaryrefslogtreecommitdiff
path: root/libavformat/vc1dec.c
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <ceffmpeg@gmail.com>2019-04-19 14:06:29 +0200
committerCarl Eugen Hoyos <ceffmpeg@gmail.com>2019-04-19 14:06:29 +0200
commit32215b21407e2587af5fb24b4b67470d23852598 (patch)
tree602eb8fe1045fcb60c4a5929c9193dc3933fff05 /libavformat/vc1dec.c
parent53064e134ca67d3ab2a2228df1cac050219afaab (diff)
downloadffmpeg-32215b21407e2587af5fb24b4b67470d23852598.tar.gz
lavf/vc1dec: Reduce probe score for streams with invalid frames.
Fixes ticket #7853.
Diffstat (limited to 'libavformat/vc1dec.c')
-rw-r--r--libavformat/vc1dec.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/libavformat/vc1dec.c b/libavformat/vc1dec.c
index f4101ae594..fdbb05d6d8 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;
}