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; }