rtspconnection: calculate better timeout value
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 29 Oct 2010 13:17:44 +0000 (14:17 +0100)
committerWim Taymans <wim.taymans@gmail.com>
Fri, 29 Oct 2010 13:22:39 +0000 (14:22 +0100)
We want to send the keealive message a little earlier than the timeout value
specifies. Scale this based on the value of the timeout instead of just assuming
5 seconds.

gst-libs/gst/rtsp/gstrtspconnection.c

index 0738522..0c1f22b 100644 (file)
@@ -2482,18 +2482,30 @@ gst_rtsp_connection_next_timeout (GstRTSPConnection * conn, GTimeVal * timeout)
   gdouble elapsed;
   glong sec;
   gulong usec;
+  gint ctimeout;
 
   g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
   g_return_val_if_fail (timeout != NULL, GST_RTSP_EINVAL);
 
-  /* Because we should act before the timeout we timeout 5
-   * seconds in advance. */
-  elapsed = g_timer_elapsed (conn->timer, &usec) + 5;
-  if (elapsed >= conn->timeout) {
+  ctimeout = conn->timeout;
+  if (ctimeout >= 20) {
+    /* Because we should act before the timeout we timeout 5
+     * seconds in advance. */
+    ctimeout -= 5;
+  } else if (ctimeout >= 5) {
+    /* else timeout 20% earlier */
+    ctimeout -= ctimeout / 5;
+  } else if (ctimeout >= 1) {
+    /* else timeout 1 second earlier */
+    ctimeout -= 1;
+  }
+
+  elapsed = g_timer_elapsed (conn->timer, &usec);
+  if (elapsed >= ctimeout) {
     sec = 0;
     usec = 0;
   } else {
-    sec = conn->timeout - elapsed;
+    sec = ctimeout - elapsed;
     if (usec <= G_USEC_PER_SEC)
       usec = G_USEC_PER_SEC - usec;
     else