From 87c8c163a876f45024a817e17af6dfdc52e71257 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 7 Jan 2015 18:05:18 +0100 Subject: [PATCH] rtpjitterbuffer: If we get a gap with a buffer without DTS, error out We (currently?) can't really handle gaps between RTP packets if they're not properly timestamped. The current code would go into calculations with GST_CLOCK_TIME_NONE and then cause assertions everywhere. It's probably better to error out cleanly instead. --- gst/rtpmanager/gstrtpjitterbuffer.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index fee6b60..dfaea37 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -2222,7 +2222,12 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent, } else { gboolean reset = FALSE; - if (gap < 0) { + if (!GST_CLOCK_TIME_IS_VALID (dts)) { + /* We would run into calculations with GST_CLOCK_TIME_NONE below + * and can't compensate for anything without DTS on RTP packets + */ + goto gap_but_no_dts; + } else if (gap < 0) { /* we received an old packet */ if (G_UNLIKELY (gap < -RTP_MAX_MISORDER)) { /* too old packet, reset */ @@ -2405,6 +2410,14 @@ duplicate: free_item (item); goto finished; } +gap_but_no_dts: + { + /* this is fatal as we can't compensate for gaps without DTS */ + GST_ELEMENT_ERROR (jitterbuffer, STREAM, DECODE, (NULL), + ("Received packet without DTS after a gap")); + gst_buffer_unref (buffer); + return GST_FLOW_ERROR; + } } static GstClockTime -- 2.7.4