In ts demuxer, if pes packet size is < ts packet, honor pes packet and skip padded...
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>
Mon, 29 Nov 2010 03:43:56 +0000 (03:43 +0000)
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>
Mon, 29 Nov 2010 03:43:56 +0000 (03:43 +0000)
Fixes issue #2392.

Originally committed as revision 25841 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/mpegts.c

index 3c61d8b..bbb00d3 100644 (file)
@@ -797,13 +797,17 @@ static int mpegts_push_data(MpegTSFilter *filter,
             break;
         case MPEGTS_PAYLOAD:
             if (buf_size > 0 && pes->buffer) {
-                if (pes->data_index+buf_size > pes->total_size) {
+                if (pes->data_index > 0 && pes->data_index+buf_size > pes->total_size) {
                     new_pes_packet(pes, ts->pkt);
                     pes->total_size = MAX_PES_PAYLOAD;
                     pes->buffer = av_malloc(pes->total_size+FF_INPUT_BUFFER_PADDING_SIZE);
                     if (!pes->buffer)
                         return AVERROR(ENOMEM);
                     ts->stop_parse = 1;
+                } else if (pes->data_index == 0 && buf_size > pes->total_size) {
+                    // pes packet size is < ts size packet and pes data is padded with 0xff
+                    // not sure if this is legal in ts but see issue #2392
+                    buf_size = pes->total_size;
                 }
                 memcpy(pes->buffer+pes->data_index, p, buf_size);
                 pes->data_index += buf_size;