diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-06-16 16:50:39 +0200 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-06-16 19:23:00 +0200 |
commit | 898f6b48be5b8e44f7d531b55fd99c90c9fb7f1d (patch) | |
tree | 60fd62e4df3c3b7105f5e55214c83bd3333f7d3b /gst/mpegtsmux/tsmux | |
parent | f49e74aa344b9a24004ed260549a24080acb8af1 (diff) | |
download | gstreamer-plugins-bad-898f6b48be5b8e44f7d531b55fd99c90c9fb7f1d.tar.gz |
mpegtsmux: optionally use fixed-size PES header
Diffstat (limited to 'gst/mpegtsmux/tsmux')
-rw-r--r-- | gst/mpegtsmux/tsmux/tsmuxcommon.h | 1 | ||||
-rw-r--r-- | gst/mpegtsmux/tsmux/tsmuxstream.c | 10 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gst/mpegtsmux/tsmux/tsmuxcommon.h b/gst/mpegtsmux/tsmux/tsmuxcommon.h index c9f087e2e..296ad97c2 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 58d8609d6..f05b72aaf 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; } } |