From: Miguel París Díaz Date: Tue, 4 Nov 2014 14:00:52 +0000 (+0100) Subject: rtpjitterbuffer: Fix expected_dts calc in calculate_expected X-Git-Tag: 1.19.3~509^2~3701 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=05bd708fc5e881390fe839803b53144393d95ab0;p=platform%2Fupstream%2Fgstreamer.git rtpjitterbuffer: Fix expected_dts calc in calculate_expected Right above we consider lost_packet packets, each of them having duration, as lost and triggered their timers immediately. Below we use expected_dts to schedule retransmission or schedule lost timers for the packets that come after expected_dts. As we just triggered lost_packets packets as lost, there's no point in scheduling new timers for them and we can just skip over all lost packets. https://bugzilla.gnome.org/show_bug.cgi?id=739868 --- diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index 6c3c9b8..937d50e 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -2004,6 +2004,7 @@ calculate_expected (GstRtpJitterBuffer * jitterbuffer, guint32 expected, GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; GstClockTime total_duration, duration, expected_dts; TimerType type; + guint lost_packets = 0; GST_DEBUG_OBJECT (jitterbuffer, "dts %" GST_TIME_FORMAT ", last %" GST_TIME_FORMAT, @@ -2025,7 +2026,6 @@ calculate_expected (GstRtpJitterBuffer * jitterbuffer, guint32 expected, if (total_duration > priv->latency_ns) { GstClockTime gap_time; - guint lost_packets; gap_time = total_duration - priv->latency_ns; @@ -2052,7 +2052,7 @@ calculate_expected (GstRtpJitterBuffer * jitterbuffer, guint32 expected, priv->last_in_dts += gap_time; } - expected_dts = priv->last_in_dts + duration; + expected_dts = priv->last_in_dts + (lost_packets + 1) * duration; if (priv->do_retransmission) { TimerData *timer;