From e01467241fe784f0e4acff60ff23f77c08c276ba Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 23 Dec 2014 18:41:53 +0100 Subject: [PATCH] avformat/aea: reduce false positives in probing Fixes probetest failure Signed-off-by: Michael Niedermayer --- libavformat/aea.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/libavformat/aea.c b/libavformat/aea.c index 15b9b1cd32..4ace52a32d 100644 --- a/libavformat/aea.c +++ b/libavformat/aea.c @@ -34,12 +34,8 @@ static int aea_read_probe(AVProbeData *p) /* Magic is '00 08 00 00' in Little Endian*/ if (AV_RL32(p->buf)==0x800) { - int bsm_s, bsm_e, inb_s, inb_e, ch; - ch = p->buf[264]; - bsm_s = p->buf[2048]; - inb_s = p->buf[2048+1]; - inb_e = p->buf[2048+210]; - bsm_e = p->buf[2048+211]; + int ch, i; + ch = p->buf[264]; if (ch != 1 && ch != 2) return 0; @@ -48,8 +44,17 @@ static int aea_read_probe(AVProbeData *p) * the block size mode bytes have to be the same * the info bytes have to be the same */ - if (bsm_s == bsm_e && inb_s == inb_e) - return AVPROBE_SCORE_MAX / 4 + 1; + for (i = 2048; i + 211 < p->buf_size; i+= 212) { + int bsm_s, bsm_e, inb_s, inb_e; + bsm_s = p->buf[0]; + inb_s = p->buf[1]; + inb_e = p->buf[210]; + bsm_e = p->buf[211]; + + if (bsm_s != bsm_e || inb_s != inb_e) + return 0; + } + return AVPROBE_SCORE_MAX / 4 + 1; } return 0; }