mpegdemux: move private stream 1 handling out of mpegps_read_pes_header
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 31 Jul 2012 17:43:20 +0000 (19:43 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 4 Aug 2012 17:37:23 +0000 (19:37 +0200)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/mpeg.c

index d51a693..904399c 100644 (file)
@@ -349,18 +349,6 @@ static int mpegps_read_pes_header(AVFormatContext *s,
     if (startcode == PRIVATE_STREAM_1) {
         startcode = avio_r8(s->pb);
         len--;
-        if (startcode >= 0x80 && startcode <= 0xcf) {
-            /* audio: skip header */
-            avio_r8(s->pb);
-            avio_r8(s->pb);
-            avio_r8(s->pb);
-            len -= 3;
-            if (startcode >= 0xb0 && startcode <= 0xbf) {
-                /* MLP/TrueHD audio has a 4-byte header */
-                avio_r8(s->pb);
-                len--;
-            }
-        }
     }
     if(len<0)
         goto error_redo;
@@ -397,6 +385,22 @@ static int mpegps_read_packet(AVFormatContext *s,
     if (len < 0)
         return len;
 
+    if (startcode >= 0x80 && startcode <= 0xcf) {
+        if(len < 4)
+            goto skip;
+
+        /* audio: skip header */
+        avio_r8(s->pb);
+        avio_r8(s->pb);
+        avio_r8(s->pb);
+        len -= 3;
+        if (startcode >= 0xb0 && startcode <= 0xbf) {
+            /* MLP/TrueHD audio has a 4-byte header */
+            avio_r8(s->pb);
+            len--;
+        }
+    }
+
     /* now find stream */
     for(i=0;i<s->nb_streams;i++) {
         st = s->streams[i];