From b7f95d64f87229856b1c26d2622fa8c103b290f6 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Wed, 13 Feb 2019 00:54:50 +1100 Subject: [PATCH] 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. --- gst/mpegtsdemux/mpegtspacketizer.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c index cc46ebb25c..aebc6881e9 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