mirror of
https://github.com/librempeg/librempeg
synced 2024-11-23 11:39:47 +00:00
lavf/vc1dec: Reduce probe score for streams with invalid frames.
Fixes ticket #7853.
This commit is contained in:
parent
53064e134c
commit
32215b2140
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user