diff options
author | Jan Schmidt <jan@centricular.com> | 2019-02-13 00:54:50 +1100 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2019-05-02 10:51:27 +0100 |
commit | 94b16f15d8a14fbd9a88bc8d0aa0f14221f15645 (patch) | |
tree | b707541fe242cacb0e1e079e36c305057cb67a99 | |
parent | bef139a85cba8b99486133b6faddf4d0ab9b9f93 (diff) | |
download | gstreamer-plugins-bad-94b16f15d8a14fbd9a88bc8d0aa0f14221f15645.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.c | 9 |
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 |