[FFmpeg-devel] [Patch] mpegts: emit pes packets on completion
Janne Grunau
janne-ffmpeg
Thu Apr 29 01:45:16 CEST 2010
On Sat, Apr 24, 2010 at 12:13:49AM +0200, Janne Grunau wrote:
> 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
> 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) {
the condition needs to be == and it probably makes sense to check for
pes packets with known packet size, i.e. total_size < MAX_PES_PAYLOADSIZE
updated patch attached
Janne
-------------- next part --------------
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index c92a9c2..c002a3f 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -807,6 +807,14 @@ static int mpegts_push_data(MpegTSFilter *filter,
pes->data_index += buf_size;
}
buf_size = 0;
+ /* emit complete packets with known packet size
+ * 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->total_size < MAX_PES_PAYLOAD &&
+ 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