avformat/mlpdec: consider all valid mlp access units when probing
Fixes probing of truehd/mlp files with a lot of frames in between the major sync frames. The spec allows a distance of up to 128 frames in between major sync frames, which leads to the probing code not reaching the desired score.
This commit is contained in:
parent
aa427537b5
commit
2ea38a946d
@ -29,16 +29,19 @@ static int av_always_inline mlp_thd_probe(AVProbeData *p, uint32_t sync)
|
|||||||
{
|
{
|
||||||
const uint8_t *buf, *last_buf = p->buf, *end = p->buf + p->buf_size;
|
const uint8_t *buf, *last_buf = p->buf, *end = p->buf + p->buf_size;
|
||||||
int frames = 0, valid = 0, size = 0;
|
int frames = 0, valid = 0, size = 0;
|
||||||
|
int nsubframes = 0;
|
||||||
|
|
||||||
for (buf = p->buf; buf + 8 <= end; buf++) {
|
for (buf = p->buf; buf + 8 <= end; buf++) {
|
||||||
if (AV_RB32(buf + 4) == sync) {
|
if (AV_RB32(buf + 4) == sync) {
|
||||||
frames++;
|
frames++;
|
||||||
if (last_buf + size == buf) {
|
if (last_buf + size == buf) {
|
||||||
valid++;
|
valid += 1 + nsubframes / 8;
|
||||||
}
|
}
|
||||||
|
nsubframes = 0;
|
||||||
last_buf = buf;
|
last_buf = buf;
|
||||||
size = (AV_RB16(buf) & 0xfff) * 2;
|
size = (AV_RB16(buf) & 0xfff) * 2;
|
||||||
} else if (buf - last_buf == size) {
|
} else if (buf - last_buf == size) {
|
||||||
|
nsubframes++;
|
||||||
size += (AV_RB16(buf) & 0xfff) * 2;
|
size += (AV_RB16(buf) & 0xfff) * 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user