From 1760817005055a5945f1b9f8a53c84fd408ef829 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 20 Sep 2013 17:48:52 +0200 Subject: [PATCH] rtpjitterbuffer: update expected timer when possible When we receive a packet and we have some missing packets, we can update their estimated arrival times based on the timestamp difference. --- gst/rtpmanager/gstrtpjitterbuffer.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index d9a7b8e..8389d8c 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -1782,9 +1782,19 @@ calculate_expected (GstRtpJitterBuffer * jitterbuffer, guint32 expected, expected_dts = priv->last_in_dts + duration; if (priv->do_retransmission) { + TimerData *timer; + type = TIMER_TYPE_EXPECTED; - /* if we had a timer for the first missing packet, leave it. */ - if (find_timer (jitterbuffer, type, expected)) { + /* if we had a timer for the first missing packet, update it. */ + if ((timer = find_timer (jitterbuffer, type, expected))) { + GstClockTime timeout = timer->timeout; + + timer->duration = duration; + if (timeout > expected_dts) { + GstClockTime delay = timeout - expected_dts - timer->rtx_retry; + reschedule_timer (jitterbuffer, timer, timer->seqnum, expected_dts, + delay, TRUE); + } expected++; expected_dts += duration; } -- 2.7.4