jitterbuffer: fix types of the retransmission event
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 27 Aug 2013 07:34:46 +0000 (09:34 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Tue, 27 Aug 2013 07:55:52 +0000 (09:55 +0200)
gst/rtpmanager/gstrtpjitterbuffer.c
gst/rtpmanager/gstrtpsession.c

index d56d6af..079ae0c 100644 (file)
@@ -2204,9 +2204,9 @@ do_expected_timeout (GstRtpJitterBuffer * jitterbuffer, TimerData * timer,
       gst_structure_new ("GstRTPRetransmissionRequest",
           "seqnum", G_TYPE_UINT, (guint) timer->seqnum,
           "running-time", G_TYPE_UINT64, timer->rtx_base,
-          "delay", G_TYPE_UINT64, timer->rtx_retry,
-          "frequency", G_TYPE_INT, priv->rtx_retry_timeout,
-          "period", G_TYPE_INT, priv->rtx_retry_period,
+          "delay", G_TYPE_UINT, GST_TIME_AS_MSECONDS (timer->rtx_retry),
+          "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));
 
index 6cb0d09..c9beff7 100644 (file)
@@ -1504,7 +1504,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;
+        guint seqnum, delay, deadline, max_delay;
 
         if (!gst_structure_get_clock_time (s, "running-time", &running_time))
           running_time = -1;
@@ -1512,13 +1512,23 @@ gst_rtp_session_event_recv_rtp_src (GstPad * pad, GstObject * parent,
           ssrc = -1;
         if (!gst_structure_get_uint (s, "seqnum", &seqnum))
           seqnum = -1;
-        if (!gst_structure_get_uint (s, "delay", &deadline))
-          delay = -1;
+        if (!gst_structure_get_uint (s, "delay", &delay))
+          delay = 0;
         if (!gst_structure_get_uint (s, "deadline", &deadline))
-          deadline = -1;
+          deadline = 100;
+
+        /* 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;
+        else
+          max_delay = 0;
 
         if (rtp_session_request_nack (rtpsession->priv->session, ssrc, seqnum,
-                (deadline - delay) * GST_MSECOND))
+                max_delay * GST_MSECOND))
           forward = FALSE;
       }
       break;