From ac06dd5d0e996c9fd7a85debbfe416d89b11e101 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 29 Oct 2010 14:17:44 +0100 Subject: [PATCH] rtspconnection: calculate better timeout value 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 | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c index 0738522..0c1f22b 100644 --- a/gst-libs/gst/rtsp/gstrtspconnection.c +++ b/gst-libs/gst/rtsp/gstrtspconnection.c @@ -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 -- 2.7.4