From f22d838fa3e56102719fd06ca3da7caf38a088ee Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 29 Jul 2014 02:11:54 -0300 Subject: [PATCH] mpegtspacketizer: avoid timestamp overflows Cause timing to break in the pipeline that can lead to a stall https://bugzilla.gnome.org/show_bug.cgi?id=733837 --- gst/mpegtsdemux/mpegtspacketizer.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c index 7889c7e..60cb9a2 100644 --- a/gst/mpegtsdemux/mpegtspacketizer.c +++ b/gst/mpegtsdemux/mpegtspacketizer.c @@ -2178,8 +2178,13 @@ mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer, */ if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND)) res = GST_CLOCK_TIME_NONE; - else - res += pcrtable->base_time + pcrtable->skew - pcrtable->base_pcrtime; + else { + GstClockTime tmp = pcrtable->base_time + pcrtable->skew; + if (tmp + res > pcrtable->base_pcrtime) + res += tmp - pcrtable->base_pcrtime; + else + res = GST_CLOCK_TIME_NONE; + } } else if (packetizer->calculate_offset && pcrtable->groups) { gint64 refpcr = G_MAXINT64, refpcroffset; PCROffsetGroup *group = pcrtable->current->group; -- 2.7.4