[FFmpeg-cvslog] mpeg probe: check the 2/ 4-bit synchronization value found after a pack_start_code.

Alex Converse git at videolan.org
Sat Oct 1 03:06:38 CEST 2011


ffmpeg | branch: master | Alex Converse <alex.converse at gmail.com> | Wed Sep 28 15:43:24 2011 -0700| [fe21f78d2bf1ac5b5400570a8a4031be3493aa7d] | committer: Alex Converse

mpeg probe: check the 2/4-bit synchronization value found after a pack_start_code.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fe21f78d2bf1ac5b5400570a8a4031be3493aa7d
---

 libavformat/mpeg.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c
index f797da7..ef683b1 100644
--- a/libavformat/mpeg.c
+++ b/libavformat/mpeg.c
@@ -49,6 +49,10 @@ static int check_pes(uint8_t *p, uint8_t *end){
     return pes1||pes2;
 }
 
+static int check_pack_header(const uint8_t *buf) {
+    return (buf[1] & 0xC0) == 0x40 || (buf[1] & 0xF0) == 0x20;
+}
+
 static int mpegps_probe(AVProbeData *p)
 {
     uint32_t code= -1;
@@ -61,9 +65,10 @@ static int mpegps_probe(AVProbeData *p)
         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 pack = check_pack_header(p->buf+i);
 
             if(code == SYSTEM_HEADER_START_CODE) sys++;
-            else if(code == PACK_START_CODE)     pspack++;
+            else if(code == PACK_START_CODE && pack) pspack++;
             else if((code & 0xf0) == VIDEO_ID &&  pes) vid++;
             // skip pes payload to avoid start code emulation for private
             // and audio streams



More information about the ffmpeg-cvslog mailing list