diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-12-06 22:33:09 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-02-12 17:10:35 +0100 |
commit | a45402d4c0afca2fc8ba656fddc502ddb4914b1a (patch) | |
tree | 179cecc3c4bde1e11c7019d9da1f9f4c32d9f4d7 /libavformat | |
parent | 0bdc64e8b9c1010c7756874ba913108a5f27addc (diff) | |
download | ffmpeg-a45402d4c0afca2fc8ba656fddc502ddb4914b1a.tar.gz |
avformat/mpeg: do not count PES packets inside PES packets during probing
Fixes: misdetection of test2.mp3
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit e15b29bb18bee8b65fab5a3c873540e01fd20afe)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/mpeg.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index 827a3c2c5f..8e1848c9ca 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -70,20 +70,23 @@ static int mpegps_probe(AVProbeData *p) int i; int sys = 0, pspack = 0, priv1 = 0, vid = 0; int audio = 0, invalid = 0, score = 0; + int endpes = 0; for (i = 0; i < p->buf_size; i++) { code = (code << 8) + p->buf[i]; if ((code & 0xffffff00) == 0x100) { int len = p->buf[i + 1] << 8 | p->buf[i + 2]; - int pes = check_pes(p->buf + i, p->buf + p->buf_size); + int pes = endpes <= i && check_pes(p->buf + i, p->buf + p->buf_size); int pack = check_pack_header(p->buf + i); if (code == SYSTEM_HEADER_START_CODE) sys++; else if (code == PACK_START_CODE && pack) pspack++; - else if ((code & 0xf0) == VIDEO_ID && pes) + else if ((code & 0xf0) == VIDEO_ID && pes) { + endpes = i + len; vid++; + } // skip pes payload to avoid start code emulation for private // and audio streams else if ((code & 0xe0) == AUDIO_ID && pes) {audio++; i+=len;} |