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
This commit is contained in:
Miguel París Díaz 2014-11-04 15:00:52 +01:00 committed by Sebastian Dröge
parent 1a2f253c3a
commit 05bd708fc5

View file

@ -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;