diff options
author | Mathieu Duponchelle <mathieu@centricular.com> | 2019-05-23 00:03:18 +0200 |
---|---|---|
committer | Mathieu Duponchelle <mduponchelle1@gmail.com> | 2019-05-30 13:53:05 +0000 |
commit | 5d41740ff6c67bee1584f13c7d188d04d85fa4ea (patch) | |
tree | 469d9b684816dbaa734cdacf5397b26b0a29d193 /gst/mpegtsmux/tsmux | |
parent | 09749192d83609c903499656fcb683ac494741ae (diff) | |
download | gstreamer-plugins-bad-5d41740ff6c67bee1584f13c7d188d04d85fa4ea.tar.gz |
tsmux: maintain packet counters in a global array
We can have multiple TsMuxPacketInfo objects for the same PID
with user-provided sections, for example ATSC requires multiple
tables with the same PID.
Diffstat (limited to 'gst/mpegtsmux/tsmux')
-rw-r--r-- | gst/mpegtsmux/tsmux/tsmux.c | 16 | ||||
-rw-r--r-- | gst/mpegtsmux/tsmux/tsmux.h | 3 | ||||
-rw-r--r-- | gst/mpegtsmux/tsmux/tsmuxcommon.h | 3 |
3 files changed, 11 insertions, 11 deletions
diff --git a/gst/mpegtsmux/tsmux/tsmux.c b/gst/mpegtsmux/tsmux/tsmux.c index ad5c2d527..290da032d 100644 --- a/gst/mpegtsmux/tsmux/tsmux.c +++ b/gst/mpegtsmux/tsmux/tsmux.c @@ -821,7 +821,7 @@ tsmux_write_adaptation_field (guint8 * buf, } static gboolean -tsmux_write_ts_header (guint8 * buf, TsMuxPacketInfo * pi, +tsmux_write_ts_header (TsMux * mux, guint8 * buf, TsMuxPacketInfo * pi, guint * payload_len_out, guint * payload_offset_out, guint stream_avail) { guint8 *tmp; @@ -835,7 +835,7 @@ tsmux_write_ts_header (guint8 * buf, TsMuxPacketInfo * pi, buf[0] = TSMUX_SYNC_BYTE; TS_DEBUG ("PID 0x%04x, counter = 0x%01x, %u bytes avail", pi->pid, - pi->packet_count & 0x0f, stream_avail); + mux->pid_packet_counts[pi->pid] & 0x0f, stream_avail); /* 3 bits: * transport_error_indicator @@ -893,10 +893,10 @@ tsmux_write_ts_header (guint8 * buf, TsMuxPacketInfo * pi, g_assert (payload_len <= stream_avail); /* Packet with payload, increment the continuity counter */ - pi->packet_count++; + mux->pid_packet_counts[pi->pid]++; } - adaptation_flag |= pi->packet_count & 0x0f; + adaptation_flag |= mux->pid_packet_counts[pi->pid] & 0x0f; /* Write the byte of transport_scrambling_control, adaptation_field_control * + continuity counter out */ @@ -960,7 +960,7 @@ tsmux_section_write_packet (GstMpegtsSectionType * type, /* Wee need room for a pointer byte */ section->pi.stream_avail++; - if (!tsmux_write_ts_header (packet, §ion->pi, &len, &offset, + if (!tsmux_write_ts_header (mux, packet, §ion->pi, &len, &offset, section->pi.stream_avail)) goto fail; @@ -969,7 +969,7 @@ tsmux_section_write_packet (GstMpegtsSectionType * type, payload_len = len - 1; } else { - if (!tsmux_write_ts_header (packet, §ion->pi, &len, &offset, + if (!tsmux_write_ts_header (mux, packet, §ion->pi, &len, &offset, section->pi.stream_avail)) goto fail; payload_len = len; @@ -1218,7 +1218,7 @@ pad_stream (TsMux * mux, TsMuxStream * stream, gint64 cur_ts) if ((new_pcr = write_new_pcr (mux, stream, get_current_pcr (mux, cur_ts)) != -1)) - tsmux_write_ts_header (map.data, &stream->pi, &payload_len, + tsmux_write_ts_header (mux, map.data, &stream->pi, &payload_len, &payload_offs, 0); else tsmux_write_null_ts_header (map.data); @@ -1297,7 +1297,7 @@ tsmux_write_stream_packet (TsMux * mux, TsMuxStream * stream) gst_buffer_map (buf, &map, GST_MAP_READ); - if (!tsmux_write_ts_header (map.data, pi, &payload_len, &payload_offs, + if (!tsmux_write_ts_header (mux, map.data, pi, &payload_len, &payload_offs, pi->stream_avail)) goto fail; diff --git a/gst/mpegtsmux/tsmux/tsmux.h b/gst/mpegtsmux/tsmux/tsmux.h index c622e89ef..ba6db6303 100644 --- a/gst/mpegtsmux/tsmux/tsmux.h +++ b/gst/mpegtsmux/tsmux/tsmux.h @@ -186,6 +186,9 @@ struct TsMux { guint64 bitrate; guint64 n_bytes; + + /* For the per-PID continuity counter */ + guint8 pid_packet_counts[8192]; }; /* create/free new muxer session */ diff --git a/gst/mpegtsmux/tsmux/tsmuxcommon.h b/gst/mpegtsmux/tsmux/tsmuxcommon.h index 2e7b35399..9f10499ca 100644 --- a/gst/mpegtsmux/tsmux/tsmuxcommon.h +++ b/gst/mpegtsmux/tsmux/tsmuxcommon.h @@ -135,9 +135,6 @@ struct TsMuxPacketInfo { gboolean packet_start_unit_indicator; - /* continuity counter */ - guint8 packet_count; - /* payload bytes available * (including PES header if applicable) */ guint stream_avail; |