[FFmpeg-devel] [Patch] mpegts: emit pes packets on completion

Janne Grunau janne-ffmpeg
Sat Apr 24 00:13:49 CEST 2010


Hi,

the mpegts demuxer emits pes packets only after the start of the next
packet. This creates problems for streams with distant and rare packets
like DVB subtitles.
The attached patch emits pes packets as soon as the data is completely
written.

Janne
-------------- next part --------------
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index d594abc..006d640 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -807,6 +807,13 @@ static int mpegts_push_data(MpegTSFilter *filter,
                 pes->data_index += buf_size;
             }
             buf_size = 0;
+            /* emit complete packets
+             * total_size is the number of bytes following pes_packet_length
+             * in the pes header, i.e. not counting the first 6 bytes */
+            if (pes->pes_header_size + pes->data_index >= pes->total_size + 6) {
+                ts->stop_parse = 1;
+                new_pes_packet(pes, ts->pkt);
+            }
             break;
         case MPEGTS_SKIP:
             buf_size = 0;



More information about the ffmpeg-devel mailing list