rtpsession: use RTT from the Retransmission event

Place the estimated RTT in the Retransmission event and let the session
manager use that instead of the hardcoded value.
This commit is contained in:
Wim Taymans 2013-12-27 16:48:48 +01:00
parent e996f73d0c
commit 7181a21ca9
2 changed files with 8 additions and 4 deletions

View file

@ -2504,7 +2504,9 @@ do_expected_timeout (GstRtpJitterBuffer * jitterbuffer, TimerData * timer,
"frequency", G_TYPE_UINT, priv->rtx_retry_timeout,
"period", G_TYPE_UINT, priv->rtx_retry_period,
"deadline", G_TYPE_UINT, priv->latency_ms,
"packet-spacing", G_TYPE_UINT64, priv->packet_spacing, NULL));
"packet-spacing", G_TYPE_UINT64, priv->packet_spacing,
"avg-rtt", G_TYPE_UINT, GST_TIME_AS_MSECONDS (priv->avg_rtx_rtt),
NULL));
priv->num_rtx_requests++;
timer->num_rtx_retry++;

View file

@ -1551,7 +1551,7 @@ gst_rtp_session_event_recv_rtp_src (GstPad * pad, GstObject * parent,
forward = FALSE;
} else if (gst_structure_has_name (s, "GstRTPRetransmissionRequest")) {
GstClockTime running_time;
guint seqnum, delay, deadline, max_delay;
guint seqnum, delay, deadline, max_delay, avg_rtt;
GST_RTP_SESSION_LOCK (rtpsession);
rtpsession->priv->rtx_count++;
@ -1567,14 +1567,16 @@ gst_rtp_session_event_recv_rtp_src (GstPad * pad, GstObject * parent,
delay = 0;
if (!gst_structure_get_uint (s, "deadline", &deadline))
deadline = 100;
if (!gst_structure_get_uint (s, "avg-rtt", &avg_rtt))
avg_rtt = 40;
/* remaining time to receive the packet */
max_delay = deadline;
if (max_delay > delay)
max_delay -= delay;
/* estimated RTT */
if (max_delay > 40)
max_delay -= 40;
if (max_delay > avg_rtt)
max_delay -= avg_rtt;
else
max_delay = 0;