summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Schmidt <jan@centricular.com>2019-02-13 00:54:50 +1100
committerTim-Philipp Müller <tim@centricular.com>2019-05-02 10:51:27 +0100
commit94b16f15d8a14fbd9a88bc8d0aa0f14221f15645 (patch)
treeb707541fe242cacb0e1e079e36c305057cb67a99
parentbef139a85cba8b99486133b6faddf4d0ab9b9f93 (diff)
downloadgstreamer-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.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