static gint64 write_new_pcr (TsMux * mux, TsMuxStream * stream, gint64 cur_pcr,
gint64 next_pcr);
static gboolean tsmux_write_ts_header (TsMux * mux, guint8 * buf,
- TsMuxPacketInfo * pi, guint * payload_len_out, guint * payload_offset_out,
- guint stream_avail);
+ TsMuxPacketInfo * pi, guint stream_avail, guint * payload_len_out,
+ guint * payload_offset_out);
static void
tsmux_section_free (TsMuxSection * section)
if (new_pcr != -1) {
GstBuffer *buf = NULL;
GstMapInfo map;
- guint payload_len, payload_offs;
if (!tsmux_get_buffer (mux, &buf)) {
goto error;
}
gst_buffer_map (buf, &map, GST_MAP_WRITE);
- tsmux_write_ts_header (mux, map.data, &stream->pi, &payload_len,
- &payload_offs, 0);
+ tsmux_write_ts_header (mux, map.data, &stream->pi, 0, NULL, NULL);
gst_buffer_unmap (buf, &map);
stream->pi.flags &= TSMUX_PACKET_FLAG_PES_FULL_HEADER;
static gboolean
tsmux_write_ts_header (TsMux * mux, guint8 * buf, TsMuxPacketInfo * pi,
- guint * payload_len_out, guint * payload_offset_out, guint stream_avail)
+ guint stream_avail, guint * payload_len_out, guint * payload_offset_out)
{
guint8 *tmp;
guint8 adaptation_flag = 0;
/* The amount of packet data we wrote is the remaining space after
* the adaptation field */
- *payload_len_out = payload_len = TSMUX_PAYLOAD_LENGTH - adapt_len;
- *payload_offset_out = TSMUX_HEADER_LENGTH + adapt_len;
+ payload_len = TSMUX_PAYLOAD_LENGTH - adapt_len;
+
+ if (payload_len_out)
+ *payload_len_out = payload_len;
+ else
+ g_assert (payload_len == 0);
+
+ if (payload_offset_out)
+ *payload_offset_out = TSMUX_HEADER_LENGTH + adapt_len;
/* Now if we are going to write out some payload, flag that fact */
if (payload_len > 0 && stream_avail > 0) {
/* Wee need room for a pointer byte */
section->pi.stream_avail++;
- if (!tsmux_write_ts_header (mux, packet, §ion->pi, &len, &offset,
- section->pi.stream_avail))
+ if (!tsmux_write_ts_header (mux, packet, §ion->pi,
+ section->pi.stream_avail, &len, &offset))
goto fail;
/* Write the pointer byte */
payload_len = len - 1;
} else {
- if (!tsmux_write_ts_header (mux, packet, §ion->pi, &len, &offset,
- section->pi.stream_avail))
+ if (!tsmux_write_ts_header (mux, packet, §ion->pi,
+ section->pi.stream_avail, &len, &offset))
goto fail;
payload_len = len;
}
if (bitrate <= mux->bitrate) {
gint64 new_pcr;
- guint payload_len, payload_offs;
if (!tsmux_get_buffer (mux, &buf)) {
ret = FALSE;
get_next_pcr (mux, cur_ts));
if (new_pcr != -1) {
GST_LOG ("Writing PCR-only packet on PID 0x%04x", stream->pi.pid);
- tsmux_write_ts_header (mux, map.data, &stream->pi, &payload_len,
- &payload_offs, 0);
+ tsmux_write_ts_header (mux, map.data, &stream->pi, 0, NULL, NULL);
} else {
GST_LOG ("Writing null stuffing packet");
if (!rewrite_si (mux, cur_ts)) {
gst_buffer_map (buf, &map, GST_MAP_WRITE);
- if (!tsmux_write_ts_header (mux, map.data, pi, &payload_len, &payload_offs,
- pi->stream_avail))
+ if (!tsmux_write_ts_header (mux, map.data, pi, pi->stream_avail, &payload_len,
+ &payload_offs))
goto fail;