mpegtsmux: optionally use fixed-size PES header
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Sat, 16 Jun 2012 14:50:39 +0000 (16:50 +0200)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Sat, 16 Jun 2012 17:23:00 +0000 (19:23 +0200)
gst/mpegtsmux/tsmux/tsmuxcommon.h
gst/mpegtsmux/tsmux/tsmuxstream.c

index c9f087e..296ad97 100644 (file)
@@ -127,6 +127,7 @@ typedef struct TsMuxStream TsMuxStream;
 struct TsMuxPacketInfo {
   guint16 pid;
   guint32 flags;
+  guint32 pes_header_length;
 
   gboolean packet_start_unit_indicator;
 
index 58d8609..f05b72a 100644 (file)
@@ -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;
   }
 }