avformat/mlpdec: consider all valid mlp access units when probing
authorHendrik Leppkes <h.leppkes@gmail.com>
Mon, 16 Nov 2015 23:28:58 +0000 (00:28 +0100)
committerHendrik Leppkes <h.leppkes@gmail.com>
Sun, 29 Nov 2015 09:41:51 +0000 (10:41 +0100)
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.

libavformat/mlpdec.c

index 2cce506..d82df21 100644 (file)
@@ -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;
     int frames = 0, valid = 0, size = 0;
+    int nsubframes = 0;
 
     for (buf = p->buf; buf + 8 <= end; buf++) {
         if (AV_RB32(buf + 4) == sync) {
             frames++;
             if (last_buf + size == buf) {
-                valid++;
+                valid += 1 + nsubframes / 8;
             }
+            nsubframes = 0;
             last_buf = buf;
             size = (AV_RB16(buf) & 0xfff) * 2;
         } else if (buf - last_buf == size) {
+            nsubframes++;
             size += (AV_RB16(buf) & 0xfff) * 2;
         }
     }