[FFmpeg-cvslog] r19075 - trunk/libavformat/mpegts.c

bcoudurier subversion
Tue Jun 2 09:53:44 CEST 2009


Author: bcoudurier
Date: Tue Jun  2 09:53:44 2009
New Revision: 19075

Log:
do not parse full header for private streams

Modified:
   trunk/libavformat/mpegts.c

Modified: trunk/libavformat/mpegts.c
==============================================================================
--- trunk/libavformat/mpegts.c	Tue Jun  2 09:30:19 2009	(r19074)
+++ trunk/libavformat/mpegts.c	Tue Jun  2 09:53:44 2009	(r19075)
@@ -128,13 +128,15 @@ struct MpegTSContext {
 
 enum MpegTSState {
     MPEGTS_HEADER = 0,
+    MPEGTS_PESHEADER,
     MPEGTS_PESHEADER_FILL,
     MPEGTS_PAYLOAD,
     MPEGTS_SKIP,
 };
 
 /* enough for PES header + length */
-#define PES_START_SIZE 9
+#define PES_START_SIZE  6
+#define PES_HEADER_SIZE 9
 #define MAX_PES_HEADER_SIZE (9 + 255)
 
 struct PESContext {
@@ -951,8 +953,7 @@ static int mpegts_push_data(MpegTSFilter
                         code != 0x1f0 && code != 0x1f1 && /* ECM, EMM */
                         code != 0x1ff && code != 0x1f2 && /* program_stream_directory, DSMCC_stream */
                         code != 0x1f8) {                  /* ITU-T Rec. H.222.1 type E stream */
-                        pes->state = MPEGTS_PESHEADER_FILL;
-                        pes->pes_header_size = pes->header[8] + 9;
+                        pes->state = MPEGTS_PESHEADER;
                     } else {
                         pes->state = MPEGTS_PAYLOAD;
                         pes->data_index = 0;
@@ -968,6 +969,21 @@ static int mpegts_push_data(MpegTSFilter
             break;
             /**********************************************/
             /* PES packing parsing */
+        case MPEGTS_PESHEADER:
+            len = PES_HEADER_SIZE - pes->data_index;
+            if (len < 0)
+                return -1;
+            if (len > buf_size)
+                len = buf_size;
+            memcpy(pes->header + pes->data_index, p, len);
+            pes->data_index += len;
+            p += len;
+            buf_size -= len;
+            if (pes->data_index == PES_HEADER_SIZE) {
+                pes->pes_header_size = pes->header[8] + 9;
+                pes->state = MPEGTS_PESHEADER_FILL;
+            }
+            break;
         case MPEGTS_PESHEADER_FILL:
             len = pes->pes_header_size - pes->data_index;
             if (len < 0)



More information about the ffmpeg-cvslog mailing list