From 898f6b48be5b8e44f7d531b55fd99c90c9fb7f1d Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Sat, 16 Jun 2012 16:50:39 +0200 Subject: [PATCH] mpegtsmux: optionally use fixed-size PES header --- gst/mpegtsmux/tsmux/tsmuxcommon.h | 1 + gst/mpegtsmux/tsmux/tsmuxstream.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/gst/mpegtsmux/tsmux/tsmuxcommon.h b/gst/mpegtsmux/tsmux/tsmuxcommon.h index c9f087e..296ad97 100644 --- a/gst/mpegtsmux/tsmux/tsmuxcommon.h +++ b/gst/mpegtsmux/tsmux/tsmuxcommon.h @@ -127,6 +127,7 @@ typedef struct TsMuxStream TsMuxStream; struct TsMuxPacketInfo { guint16 pid; guint32 flags; + guint32 pes_header_length; gboolean packet_start_unit_indicator; diff --git a/gst/mpegtsmux/tsmux/tsmuxstream.c b/gst/mpegtsmux/tsmux/tsmuxstream.c index 58d8609..f05b72a 100644 --- a/gst/mpegtsmux/tsmux/tsmuxstream.c +++ b/gst/mpegtsmux/tsmux/tsmuxstream.c @@ -512,6 +512,11 @@ tsmux_stream_pes_header_length (TsMuxStream * stream) * length + extended stream id */ packet_len += 3; } + if (stream->pi.pes_header_length) { + /* check for consistency, then we can add stuffing */ + g_assert (packet_len <= stream->pi.pes_header_length + 6 + 3); + packet_len = stream->pi.pes_header_length + 6 + 3; + } } return packet_len; @@ -556,6 +561,7 @@ tsmux_stream_write_pes_header (TsMuxStream * stream, guint8 * data) { guint16 length_to_write; guint8 hdr_len = tsmux_stream_pes_header_length (stream); + guint8 *orig_data = data; /* start_code prefix + stream_id + pes_packet_length = 6 bytes */ data[0] = 0x00; @@ -615,6 +621,10 @@ tsmux_stream_write_pes_header (TsMuxStream * stream, guint8 * data) /* Write the extended streamID */ *data++ = stream->id_extended; } + /* write stuffing bytes if fixed PES header length requested */ + if (stream->pi.pes_header_length) + while (data < orig_data + stream->pi.pes_header_length + 9) + *data++ = 0xff; } } -- 2.7.4