summaryrefslogtreecommitdiff
path: root/gst/mpegtsmux
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu@centricular.com>2019-07-05 01:26:26 +0200
committerMathieu Duponchelle <mduponchelle1@gmail.com>2019-07-04 23:28:42 +0000
commit9996ae9ae0eb5413cc7a2455a9cddd339d394fff (patch)
treeb50b36061ad359192eb1f5560cd9666598f3818a /gst/mpegtsmux
parent15f149a9901fa9fc8bbb8cdcc363192ba7c71e31 (diff)
downloadgstreamer-plugins-bad-9996ae9ae0eb5413cc7a2455a9cddd339d394fff.tar.gz
tsmux: output smoothly increasing PTS when in CBR mode
Thanks to that, when its output is plugged into eg a udp sink, the outgoing data can be output in a smoother way, reducing burstiness
Diffstat (limited to 'gst/mpegtsmux')
-rw-r--r--gst/mpegtsmux/gstbasetsmux.c3
-rw-r--r--gst/mpegtsmux/tsmux/tsmux.c4
2 files changed, 6 insertions, 1 deletions
diff --git a/gst/mpegtsmux/gstbasetsmux.c b/gst/mpegtsmux/gstbasetsmux.c
index 9ee7e5379..dfde9676e 100644
--- a/gst/mpegtsmux/gstbasetsmux.c
+++ b/gst/mpegtsmux/gstbasetsmux.c
@@ -1017,7 +1017,8 @@ new_packet_cb (GstBuffer * buf, void *user_data, gint64 new_pcr)
gst_buffer_map (buf, &map, GST_MAP_READWRITE);
- GST_BUFFER_PTS (buf) = mux->last_ts;
+ if (!GST_CLOCK_TIME_IS_VALID (GST_BUFFER_PTS (buf)))
+ GST_BUFFER_PTS (buf) = mux->last_ts;
/* do common init (flags and streamheaders) */
new_packet_common_init (mux, buf, map.data, map.size);
diff --git a/gst/mpegtsmux/tsmux/tsmux.c b/gst/mpegtsmux/tsmux/tsmux.c
index dfc112077..16b556f7c 100644
--- a/gst/mpegtsmux/tsmux/tsmux.c
+++ b/gst/mpegtsmux/tsmux/tsmux.c
@@ -660,6 +660,10 @@ tsmux_packet_out (TsMux * mux, GstBuffer * buf, gint64 pcr)
return TRUE;
}
+ if (mux->bitrate)
+ GST_BUFFER_PTS (buf) =
+ gst_util_uint64_scale (mux->n_bytes * 8, GST_SECOND, mux->bitrate);
+
mux->n_bytes += gst_buffer_get_size (buf);
return mux->write_func (buf, mux->write_func_data, pcr);