summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Schmidt <jan@centricular.com>2019-02-13 00:54:50 +1100
committerJan Schmidt <jan@centricular.com>2019-02-13 22:15:53 +1100
commitb7f95d64f87229856b1c26d2622fa8c103b290f6 (patch)
tree9bb26ac3ece1d0f9c89953fe2f921cc85a5c0f56
parent8006979109ee450968da33723656b95a189a2255 (diff)
downloadgstreamer-plugins-bad-b7f95d64f87229856b1c26d2622fa8c103b290f6.tar.gz
tsdemux: Skew correction should use the upstream DTS
The MPEG-TS packetiser should use the upstream DTS for skew correction when running in that mode, as the DTS carries the upstream arrival time. The PTS (if it's set at all) is less useful, and can be invalid.
-rw-r--r--gst/mpegtsdemux/mpegtspacketizer.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c
index cc46ebb25..aebc6881e 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.c
+++ b/gst/mpegtsdemux/mpegtspacketizer.c
@@ -665,6 +665,7 @@ mpegts_packetizer_new (void)
void
mpegts_packetizer_push (MpegTSPacketizer2 * packetizer, GstBuffer * buffer)
{
+ GstClockTime ts;
if (G_UNLIKELY (packetizer->empty)) {
packetizer->empty = FALSE;
packetizer->offset = GST_BUFFER_OFFSET (buffer);
@@ -674,9 +675,11 @@ mpegts_packetizer_push (MpegTSPacketizer2 * packetizer, GstBuffer * buffer)
G_GUINT64_FORMAT, gst_buffer_get_size (buffer),
GST_BUFFER_OFFSET (buffer));
gst_adapter_push (packetizer->adapter, buffer);
- /* If buffer timestamp is valid, store it */
- if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (buffer)))
- packetizer->last_in_time = GST_BUFFER_TIMESTAMP (buffer);
+ /* If the buffer has a valid timestamp, store it - preferring DTS,
+ * which is where upstream arrival times should be stored */
+ ts = GST_BUFFER_DTS_OR_PTS (buffer);
+ if (GST_CLOCK_TIME_IS_VALID (ts))
+ packetizer->last_in_time = ts;
}
static void