From df12163f441f9c10955645ef8fdfe99f5f68d182 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 14 Dec 2012 07:32:07 +0000 Subject: - Allow changing cl_voip without restarting. - Fix assert failing in CL_ParseVoip() while flipping cl_voip off and on. --- src/client/cl_main.c | 34 ++++++++++++++++++++-------------- src/client/cl_parse.c | 2 +- 2 files changed, 21 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/client/cl_main.c b/src/client/cl_main.c index 942c99f0..a9574d79 100644 --- a/src/client/cl_main.c +++ b/src/client/cl_main.c @@ -120,6 +120,8 @@ cvar_t *cl_guidServerUniq; cvar_t *cl_consoleKeys; +cvar_t *cl_rate; + clientActive_t cl; clientConnection_t clc; clientStatic_t cls; @@ -409,6 +411,22 @@ void CL_CaptureVoip(void) return; #endif + // If your data rate is too low, you'll get Connection Interrupted warnings + // when VoIP packets arrive, even if you have a broadband connection. + // This might work on rates lower than 25000, but for safety's sake, we'll + // just demand it. Who doesn't have at least a DSL line now, anyhow? If + // you don't, you don't need VoIP. :) + if (cl_voip->modified || cl_rate->modified) { + if ((cl_voip->integer) && (cl_rate->integer < 25000)) { + Com_Printf(S_COLOR_YELLOW "Your network rate is too slow for VoIP.\n"); + Com_Printf("Set 'Data Rate' to 'LAN/Cable/xDSL' in 'Setup/System/Network'.\n"); + Com_Printf("Until then, VoIP is disabled.\n"); + Cvar_Set("cl_voip", "0"); + } + cl_voip->modified = qfalse; + cl_rate->modified = qfalse; + } + if (!clc.speexInitialized) return; // just in case this gets called at a bad time. @@ -3573,7 +3591,7 @@ void CL_Init( void ) { // userinfo Cvar_Get ("name", Sys_GetCurrentUser( ), CVAR_USERINFO | CVAR_ARCHIVE ); - Cvar_Get ("rate", "25000", CVAR_USERINFO | CVAR_ARCHIVE ); + cl_rate = Cvar_Get ("rate", "25000", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("snaps", "20", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("color1", "4", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("color2", "5", CVAR_USERINFO | CVAR_ARCHIVE ); @@ -3597,20 +3615,8 @@ void CL_Init( void ) { cl_voipShowMeter = Cvar_Get ("cl_voipShowMeter", "1", CVAR_ARCHIVE); // This is a protocol version number. - cl_voip = Cvar_Get ("cl_voip", "1", CVAR_USERINFO | CVAR_ARCHIVE | CVAR_LATCH); + cl_voip = Cvar_Get ("cl_voip", "1", CVAR_USERINFO | CVAR_ARCHIVE); Cvar_CheckRange( cl_voip, 0, 1, qtrue ); - - // If your data rate is too low, you'll get Connection Interrupted warnings - // when VoIP packets arrive, even if you have a broadband connection. - // This might work on rates lower than 25000, but for safety's sake, we'll - // just demand it. Who doesn't have at least a DSL line now, anyhow? If - // you don't, you don't need VoIP. :) - if ((cl_voip->integer) && (Cvar_VariableIntegerValue("rate") < 25000)) { - Com_Printf(S_COLOR_YELLOW "Your network rate is too slow for VoIP.\n"); - Com_Printf("Set 'Data Rate' to 'LAN/Cable/xDSL' in 'Setup/System/Network' and restart.\n"); - Com_Printf("Until then, VoIP is disabled.\n"); - Cvar_Set("cl_voip", "0"); - } #endif diff --git a/src/client/cl_parse.c b/src/client/cl_parse.c index c72a5588..1b74ba38 100644 --- a/src/client/cl_parse.c +++ b/src/client/cl_parse.c @@ -760,7 +760,7 @@ void CL_ParseVoip ( msg_t *msg ) { // reset the bits just in case. speex_bits_reset(&clc.speexDecoderBits[sender]); seqdiff = 0; - } else if (seqdiff > 100) { // more than 2 seconds of audio dropped? + } else if (seqdiff * clc.speexFrameSize * 2 >= sizeof (decoded)) { // dropped more than we can handle? // just start over. Com_DPrintf("VoIP: Dropped way too many (%d) frames from client #%d\n", seqdiff, sender); -- cgit