aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-12-06 22:33:09 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-02-12 17:10:35 +0100
commita45402d4c0afca2fc8ba656fddc502ddb4914b1a (patch)
tree179cecc3c4bde1e11c7019d9da1f9f4c32d9f4d7 /libavformat
parent0bdc64e8b9c1010c7756874ba913108a5f27addc (diff)
downloadffmpeg-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.c7
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;}