From a274299f48799c12f5cf0e7a62ba52edcc49bbf9 Mon Sep 17 00:00:00 2001 From: Hyunjun Ko Date: Tue, 14 Jul 2015 13:40:46 +0900 Subject: [PATCH] mpegtsmux: set non-0 payload length in PES header if video ES packet is small enough https://bugzilla.gnome.org/show_bug.cgi?id=748507 --- gst/mpegtsmux/tsmux/tsmuxstream.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/gst/mpegtsmux/tsmux/tsmuxstream.c b/gst/mpegtsmux/tsmux/tsmuxstream.c index 391b0790a6..6b7c17eb73 100644 --- a/gst/mpegtsmux/tsmux/tsmuxstream.c +++ b/gst/mpegtsmux/tsmux/tsmuxstream.c @@ -411,11 +411,6 @@ tsmux_stream_initialize_pes_packet (TsMuxStream * stream) stream->cur_pes_payload_size = stream->pes_payload_size; tsmux_stream_find_pts_dts_within (stream, stream->cur_pes_payload_size, &stream->pts, &stream->dts); - } else if (stream->is_video_stream) { - /* Unbounded for video streams */ - stream->cur_pes_payload_size = 0; - tsmux_stream_find_pts_dts_within (stream, stream->bytes_avail, &stream->pts, - &stream->dts); } else { /* Output a PES packet of all currently available bytes otherwise */ stream->cur_pes_payload_size = stream->bytes_avail; @@ -443,6 +438,16 @@ tsmux_stream_initialize_pes_packet (TsMuxStream * stream) } } + if (stream->is_video_stream) { + guint8 hdr_len; + + hdr_len = tsmux_stream_pes_header_length (stream); + + /* Unbounded for video streams if pes packet length is over 16 bit */ + if ((stream->cur_pes_payload_size + hdr_len - 6) > G_MAXUINT16) + stream->cur_pes_payload_size = 0; + } + return TRUE; }