From f84b9673bd745dd320ed2ddab987ca686f67d302 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 12 Feb 2009 14:48:35 +0000 Subject: [PATCH] added automatic network jitter buffer setting functionality --- src/client.cpp | 4 ++-- src/client.h | 12 ++++++------ src/clientsettingsdlg.cpp | 27 ++++++++++++++++++++------- src/clientsettingsdlg.h | 7 ++++--- src/clientsettingsdlgbase.ui | 22 +++++++--------------- src/settings.cpp | 9 +++++++++ 6 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 985e0c89..155ae78d 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -36,7 +36,7 @@ CClient::CClient ( const quint16 iPortNumber ) : bRun ( false ), iNetwBufSizeFactIn ( DEF_NET_BLOCK_SIZE_FACTOR ), strIPAddress ( "" ), strName ( "" ), bOpenChatOnNewMessage ( true ), - bDoAutoSockBufSize ( false ) + bDoAutoSockBufSize ( true ) { // connection for protocol QObject::connect ( &Channel, @@ -435,7 +435,7 @@ void CClient::UpdateTimeResponseMeasurement() } void CClient::UpdateSocketBufferSize() -{ +{ // just update the socket buffer size if auto setting is enabled, otherwise // do nothing if ( bDoAutoSockBufSize ) diff --git a/src/client.h b/src/client.h index 4b89105e..7153f3f6 100755 --- a/src/client.h +++ b/src/client.h @@ -92,20 +92,20 @@ public: AudioReverb.Clear(); } - void SetDoAutoSockBufSize ( const bool bValue ) - { bDoAutoSockBufSize = bValue; } + void SetDoAutoSockBufSize ( const bool bValue ) { bDoAutoSockBufSize = bValue; } + bool GetDoAutoSockBufSize() { return bDoAutoSockBufSize; } void SetSockBufSize ( const int iNumBlocks ) { if ( Channel.GetSockBufSize() != iNumBlocks ) - { - // check for valid values - if ( ( iNumBlocks >= 0 ) && ( iNumBlocks <= MAX_NET_BUF_SIZE_NUM_BL ) ) + { + // check for valid values + if ( ( iNumBlocks >= 0 ) && ( iNumBlocks <= MAX_NET_BUF_SIZE_NUM_BL ) ) { // set the new socket size Channel.SetSockBufSize ( iNumBlocks ); // tell the server that size has changed - Channel.CreateJitBufMes ( iNumBlocks ); + Channel.CreateJitBufMes ( iNumBlocks ); } } } diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 261e4c44..1b1d979f 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -83,8 +83,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, // network buffer SliderNetBuf->setRange ( 0, MAX_NET_BUF_SIZE_NUM_BL ); - const int iCurNumNetBuf = pClient->GetSockBufSize(); - UpdateNetworkBufSlider ( iCurNumNetBuf ); + UpdateJitterBufferFrame(); // network buffer size factor in SliderNetBufSiFactIn->setRange ( 1, MAX_NET_BLOCK_SIZE_FACTOR ); @@ -144,7 +143,6 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, // timers QObject::connect ( &TimerStatus, SIGNAL ( timeout() ), this, SLOT ( OnTimerStatus() ) ); - QObject::connect ( &TimerPing, SIGNAL ( timeout() ), this, SLOT ( OnTimerPing() ) ); @@ -165,6 +163,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, // check boxes QObject::connect ( cbOpenChatOnNewMessage, SIGNAL ( stateChanged ( int ) ), this, SLOT ( OnOpenChatOnNewMessageStateChanged ( int ) ) ); + QObject::connect ( cbAutoJitBuf, SIGNAL ( stateChanged ( int ) ), + this, SLOT ( OnAutoJitBuf ( int ) ) ); // combo boxes QObject::connect ( cbSoundcard, SIGNAL ( activated ( int ) ), @@ -183,10 +183,17 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, TimerStatus.start ( DISPLAY_UPDATE_TIME ); } -void CClientSettingsDlg::UpdateNetworkBufSlider ( const int iCurNumNetBuf ) +void CClientSettingsDlg::UpdateJitterBufferFrame() { + // update slider value and text + const int iCurNumNetBuf = pClient->GetSockBufSize(); SliderNetBuf->setValue ( iCurNumNetBuf ); TextNetBuf->setText ( "Size: " + QString().setNum ( iCurNumNetBuf ) ); + + // if auto setting is enabled, disable slider control + cbAutoJitBuf->setChecked ( pClient->GetDoAutoSockBufSize() ); + SliderNetBuf->setEnabled ( !pClient->GetDoAutoSockBufSize() ); + TextNetBuf->setEnabled ( !pClient->GetDoAutoSockBufSize() ); } void CClientSettingsDlg::UpdateSndBufInSlider ( const int iCurNumInBuf ) @@ -271,6 +278,12 @@ void CClientSettingsDlg::OnSoundCrdSelection ( int iSndDevIdx ) UpdateDisplay(); } +void CClientSettingsDlg::OnAutoJitBuf ( int value ) +{ + pClient->SetDoAutoSockBufSize ( value == Qt::Checked ); + UpdateJitterBufferFrame(); +} + void CClientSettingsDlg::OnOpenChatOnNewMessageStateChanged ( int value ) { pClient->SetOpenChatOnNewMessage ( value == Qt::Checked ); @@ -353,9 +366,9 @@ void CClientSettingsDlg::OnPingTimeResult ( int iPingTime ) void CClientSettingsDlg::UpdateDisplay() { // update slider controls (settings might have been changed by sound interface) - UpdateSndBufInSlider ( pClient->GetSndInterface()->GetInNumBuf() ); - UpdateSndBufOutSlider ( pClient->GetSndInterface()->GetOutNumBuf() ); - UpdateNetworkBufSlider ( pClient->GetSockBufSize() ); + UpdateSndBufInSlider ( pClient->GetSndInterface()->GetInNumBuf() ); + UpdateSndBufOutSlider ( pClient->GetSndInterface()->GetOutNumBuf() ); + UpdateJitterBufferFrame(); if ( !pClient->IsRunning() ) { diff --git a/src/clientsettingsdlg.h b/src/clientsettingsdlg.h index 5cd551ff..60c2f963 100755 --- a/src/clientsettingsdlg.h +++ b/src/clientsettingsdlg.h @@ -72,9 +72,9 @@ protected: virtual void showEvent ( QShowEvent* showEvent ); virtual void hideEvent ( QHideEvent* hideEvent ); - void UpdateSndBufInSlider ( const int iCurNumInBuf ); - void UpdateSndBufOutSlider ( const int iCurNumOutBuf ); - void UpdateNetworkBufSlider ( const int iCurNumNetBuf ); + void UpdateSndBufInSlider ( const int iCurNumInBuf ); + void UpdateSndBufOutSlider ( const int iCurNumOutBuf ); + void UpdateJitterBufferFrame(); public slots: void OnTimerStatus() { UpdateDisplay(); } @@ -84,6 +84,7 @@ public slots: void OnSliderNetBuf ( int value ); void OnSliderNetBufSiFactIn ( int value ); void OnSliderNetBufSiFactOut ( int value ); + void OnAutoJitBuf ( int value ); void OnOpenChatOnNewMessageStateChanged ( int value ); void OnAudioCompressionButtonGroupClicked ( QAbstractButton* button ); void OnPingTimeResult ( int iPingTime ); diff --git a/src/clientsettingsdlgbase.ui b/src/clientsettingsdlgbase.ui index c98358af..745ba6dd 100755 --- a/src/clientsettingsdlgbase.ui +++ b/src/clientsettingsdlgbase.ui @@ -25,21 +25,13 @@ Jitter Buffer - - 6 - - - 9 - - - 9 - - - 9 - - - 9 - + + + + Auto + + + diff --git a/src/settings.cpp b/src/settings.cpp index edcb0886..808857e5 100755 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -104,6 +104,12 @@ void CSettings::ReadIniFile ( const QString& sFileName ) pClient->GetSndInterface()->SetOutNumBuf ( iValue ); } + // automatic network jitter buffer size setting + if ( GetFlagIniSet ( IniXMLDocument, "client", "autojitbuf", bValue ) ) + { + pClient->SetDoAutoSockBufSize ( bValue ); + } + // network jitter buffer size if ( GetNumericIniSet ( IniXMLDocument, "client", "jitbuf", 0, MAX_NET_BUF_SIZE_NUM_BL, iValue ) ) { @@ -180,6 +186,9 @@ void CSettings::WriteIniFile ( const QString& sFileName ) // sound card out number of buffers SetNumericIniSet ( IniXMLDocument, "client", "audoutbuf", pClient->GetSndInterface()->GetOutNumBuf() ); + // automatic network jitter buffer size setting + SetFlagIniSet ( IniXMLDocument, "client", "autojitbuf", pClient->GetDoAutoSockBufSize() ); + // network jitter buffer size SetNumericIniSet ( IniXMLDocument, "client", "jitbuf", pClient->GetSockBufSize() );