summaryrefslogtreecommitdiff
path: root/gst/mpegtsmux/tsmux
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-06-16 16:50:39 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-06-16 19:23:00 +0200
commit898f6b48be5b8e44f7d531b55fd99c90c9fb7f1d (patch)
tree60fd62e4df3c3b7105f5e55214c83bd3333f7d3b /gst/mpegtsmux/tsmux
parentf49e74aa344b9a24004ed260549a24080acb8af1 (diff)
downloadgstreamer-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.h1
-rw-r--r--gst/mpegtsmux/tsmux/tsmuxstream.c10
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;
}
}