bug fix, some renamings of variables/functions, introduction of new signal in channel
This commit is contained in:
parent
35eb0fe4aa
commit
43eb897fd8
11 changed files with 106 additions and 36 deletions
|
@ -118,6 +118,12 @@ bool CNetBuf::Get ( CVector<uint8_t>& vecbyData )
|
|||
// get size of data to be get from the buffer
|
||||
const int iInSize = vecbyData.Size();
|
||||
|
||||
// check size
|
||||
if ( iInSize != iBlockSize )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if there is not enough data available -> correct
|
||||
if ( GetAvailData() < iInSize )
|
||||
{
|
||||
|
@ -250,7 +256,7 @@ void CNetBuf::Clear ( const EClearType eClearType )
|
|||
iPutPos = 0;
|
||||
iGetPos = iMiddleOfBuffer;
|
||||
|
||||
/* check for special case */
|
||||
// check for special case
|
||||
if ( iPutPos == iGetPos )
|
||||
{
|
||||
eBufState = CNetBuf::BS_FULL;
|
||||
|
|
|
@ -43,7 +43,7 @@ CChannel::CChannel ( const bool bNIsServer ) :
|
|||
iConTimeOut = 0;
|
||||
|
||||
// init the socket buffer
|
||||
SetSockBufSize ( DEF_NET_BUF_SIZE_NUM_BL );
|
||||
SetSockBufNumFrames ( DEF_NET_BUF_SIZE_NUM_BL );
|
||||
|
||||
|
||||
// connections -------------------------------------------------------------
|
||||
|
@ -145,19 +145,20 @@ void CChannel::SetNetwFrameSizeAndFact ( const int iNewNetwFrameSize,
|
|||
CreateNetTranspPropsMessFromCurrentSettings();
|
||||
}
|
||||
|
||||
bool CChannel::SetSockBufSize ( const int iNumBlocks )
|
||||
bool CChannel::SetSockBufNumFrames ( const int iNewNumFrames )
|
||||
{
|
||||
QMutexLocker locker ( &Mutex ); // this opperation must be done with mutex
|
||||
|
||||
// first check for valid input parameter range
|
||||
if ( ( iNumBlocks >= MIN_NET_BUF_SIZE_NUM_BL ) &&
|
||||
( iNumBlocks <= MAX_NET_BUF_SIZE_NUM_BL ) )
|
||||
if ( ( iNewNumFrames >= MIN_NET_BUF_SIZE_NUM_BL ) &&
|
||||
( iNewNumFrames <= MAX_NET_BUF_SIZE_NUM_BL ) )
|
||||
{
|
||||
iCurSockBufSize = iNumBlocks;
|
||||
// store new value
|
||||
iCurSockBufNumFrames = iNewNumFrames;
|
||||
|
||||
// the network block size is a multiple of the internal minimal
|
||||
// the network block size is a multiple of the minimum network
|
||||
// block size
|
||||
SockBuf.Init ( SYSTEM_BLOCK_FRAME_SAMPLES, iNumBlocks );
|
||||
SockBuf.Init ( iNetwFrameSize, iNewNumFrames );
|
||||
|
||||
return false; // -> no error
|
||||
}
|
||||
|
@ -240,7 +241,7 @@ void CChannel::OnSendProtMessage ( CVector<uint8_t> vecMessage )
|
|||
|
||||
void CChannel::OnJittBufSizeChange ( int iNewJitBufSize )
|
||||
{
|
||||
SetSockBufSize ( iNewJitBufSize );
|
||||
SetSockBufNumFrames ( iNewJitBufSize );
|
||||
}
|
||||
|
||||
void CChannel::OnChangeChanGain ( int iChanID, double dNewGain )
|
||||
|
@ -281,6 +282,13 @@ void CChannel::OnNetTranspPropsReceived ( CNetworkTransportProps NetworkTranspor
|
|||
iNetwFrameSize =
|
||||
NetworkTransportProps.iNetworkPacketSize /
|
||||
NetworkTransportProps.iBlockSizeFact;
|
||||
|
||||
// update socket buffer (the network block size is a multiple of the
|
||||
// minimum network frame size
|
||||
SockBuf.Init ( iNetwFrameSize, iCurSockBufNumFrames );
|
||||
|
||||
// fire message
|
||||
emit NetwFrameSizeHasChanged ( iNetwFrameSize );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -435,7 +443,7 @@ EGetDataStat CChannel::GetData ( CVector<uint8_t>& vecbyData )
|
|||
// where the atomic block size is "SYSTEM_BLOCK_FRAME_SAMPLES")
|
||||
|
||||
// TODO this code only works with the above assumption -> better
|
||||
// implementation so that we are not depending on assumptions
|
||||
// implementation so that we are not depending on assumptions
|
||||
|
||||
iConTimeOut -= SYSTEM_BLOCK_FRAME_SAMPLES;
|
||||
|
||||
|
|
|
@ -88,8 +88,8 @@ public:
|
|||
void SetRemoteChanGain ( const int iId, const double dGain )
|
||||
{ Protocol.CreateChanGainMes ( iId, dGain ); }
|
||||
|
||||
bool SetSockBufSize ( const int iNumBlocks );
|
||||
int GetSockBufSize() const { return iCurSockBufSize; }
|
||||
bool SetSockBufNumFrames ( const int iNewNumFrames );
|
||||
int GetSockBufNumFrames() const { return iCurSockBufNumFrames; }
|
||||
|
||||
int GetUploadRateKbps();
|
||||
|
||||
|
@ -145,7 +145,7 @@ protected:
|
|||
|
||||
// network jitter-buffer
|
||||
CNetBuf SockBuf;
|
||||
int iCurSockBufSize;
|
||||
int iCurSockBufNumFrames;
|
||||
|
||||
CCycleTimeVariance CycleTimeVariance;
|
||||
|
||||
|
@ -182,6 +182,7 @@ signals:
|
|||
void ReqConnClientsList();
|
||||
void ConClientListMesReceived ( CVector<CChannelShortInfo> vecChanInfo );
|
||||
void NameHasChanged();
|
||||
void NetwFrameSizeHasChanged ( int iNewFrameSize );
|
||||
void ChatTextReceived ( QString strChatText );
|
||||
void PingReceived ( int iMs );
|
||||
void ReqNetTranspProps();
|
||||
|
|
|
@ -73,7 +73,7 @@ void CClient::OnSendProtMessage ( CVector<uint8_t> vecMessage )
|
|||
void CClient::OnReqJittBufSize()
|
||||
{
|
||||
// TODO cant we implement this OnReqJjittBufSize inside the channel object?
|
||||
Channel.CreateJitBufMes ( Channel.GetSockBufSize() );
|
||||
Channel.CreateJitBufMes ( Channel.GetSockBufNumFrames() );
|
||||
}
|
||||
|
||||
void CClient::OnNewConnection()
|
||||
|
@ -514,8 +514,8 @@ void CClient::UpdateSocketBufferSize()
|
|||
{
|
||||
// we are in the middle of the decision region, use
|
||||
// previous setting for determing the new decision
|
||||
if ( !( ( GetSockBufSize() == iUpperHystDec ) ||
|
||||
( GetSockBufSize() == iLowerHystDec ) ) )
|
||||
if ( !( ( GetSockBufNumFrames() == iUpperHystDec ) ||
|
||||
( GetSockBufNumFrames() == iLowerHystDec ) ) )
|
||||
{
|
||||
// The old result is not near the new decision,
|
||||
// use per definition the upper decision.
|
||||
|
|
10
src/client.h
10
src/client.h
|
@ -93,13 +93,13 @@ public:
|
|||
|
||||
void SetDoAutoSockBufSize ( const bool bValue ) { bDoAutoSockBufSize = bValue; }
|
||||
bool GetDoAutoSockBufSize() { return bDoAutoSockBufSize; }
|
||||
void SetSockBufSize ( const int iNumBlocks )
|
||||
void SetSockBufNumFrames ( const int iNumBlocks )
|
||||
{
|
||||
// only change parameter if new parameter is different from current one
|
||||
if ( Channel.GetSockBufSize() != iNumBlocks )
|
||||
if ( Channel.GetSockBufNumFrames() != iNumBlocks )
|
||||
{
|
||||
// set the new socket size
|
||||
if ( !Channel.SetSockBufSize ( iNumBlocks ) )
|
||||
// set the new socket size (number of frames)
|
||||
if ( !Channel.SetSockBufNumFrames ( iNumBlocks ) )
|
||||
{
|
||||
// if setting of socket buffer size was successful,
|
||||
// tell the server that size has changed
|
||||
|
@ -107,7 +107,7 @@ public:
|
|||
}
|
||||
}
|
||||
}
|
||||
int GetSockBufSize() { return Channel.GetSockBufSize(); }
|
||||
int GetSockBufNumFrames() { return Channel.GetSockBufNumFrames(); }
|
||||
|
||||
int GetUploadRateKbps() { return Channel.GetUploadRateKbps(); }
|
||||
|
||||
|
|
|
@ -154,7 +154,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
void CClientSettingsDlg::UpdateJitterBufferFrame()
|
||||
{
|
||||
// update slider value and text
|
||||
const int iCurNumNetBuf = pClient->GetSockBufSize();
|
||||
const int iCurNumNetBuf = pClient->GetSockBufNumFrames();
|
||||
SliderNetBuf->setValue ( iCurNumNetBuf );
|
||||
TextNetBuf->setText ( "Size: " + QString().setNum ( iCurNumNetBuf ) );
|
||||
|
||||
|
@ -220,7 +220,7 @@ void CClientSettingsDlg::OnDriverSetupBut()
|
|||
|
||||
void CClientSettingsDlg::OnSliderNetBuf ( int value )
|
||||
{
|
||||
pClient->SetSockBufSize ( value );
|
||||
pClient->SetSockBufNumFrames ( value );
|
||||
UpdateJitterBufferFrame();
|
||||
}
|
||||
|
||||
|
@ -296,7 +296,7 @@ void CClientSettingsDlg::OnPingTimeResult ( int iPingTime )
|
|||
*/
|
||||
|
||||
const int iTotalJitterBufferDelayMS = SYSTEM_BLOCK_DURATION_MS_FLOAT *
|
||||
( 2 /* buffer at client and server */ * pClient->GetSockBufSize() ) / 2;
|
||||
( 2 /* buffer at client and server */ * pClient->GetSockBufNumFrames() ) / 2;
|
||||
|
||||
// we assume that we have two period sizes for the input and one for the
|
||||
// output, therefore we have "3 *" instead of "2 *" (for input and output)
|
||||
|
|
|
@ -485,7 +485,7 @@ void CLlconClientDlg::customEvent ( QEvent* Event )
|
|||
break;
|
||||
|
||||
case MS_SET_JIT_BUF_SIZE:
|
||||
pClient->SetSockBufSize ( iStatus );
|
||||
pClient->SetSockBufNumFrames ( iStatus );
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -77,13 +77,13 @@ void CLlconServerDlg::OnTimer()
|
|||
{
|
||||
CVector<CHostAddress> vecHostAddresses;
|
||||
CVector<QString> vecsName;
|
||||
CVector<int> veciJitBufSize;
|
||||
CVector<int> veciJitBufNumFrames;
|
||||
CVector<int> veciNetwFrameSizeFact;
|
||||
double dCurTiStdDev;
|
||||
|
||||
ListViewMutex.lock();
|
||||
|
||||
pServer->GetConCliParam ( vecHostAddresses, vecsName, veciJitBufSize,
|
||||
pServer->GetConCliParam ( vecHostAddresses, vecsName, veciJitBufNumFrames,
|
||||
veciNetwFrameSizeFact );
|
||||
|
||||
// fill list with connected clients
|
||||
|
@ -101,7 +101,7 @@ void CLlconServerDlg::OnTimer()
|
|||
|
||||
// jitter buffer size (polling for updates)
|
||||
vecpListViewItems[i]->setText ( 4,
|
||||
QString().setNum ( veciJitBufSize[i] ) );
|
||||
QString().setNum ( veciJitBufNumFrames[i] ) );
|
||||
|
||||
// out network block size
|
||||
vecpListViewItems[i]->setText ( 5,
|
||||
|
|
|
@ -318,6 +318,29 @@ void CServer::OnTimer()
|
|||
{
|
||||
for ( int i = 0; i < iNumClients; i++ )
|
||||
{
|
||||
|
||||
|
||||
/*
|
||||
// TEST CELT
|
||||
CVector<short> vecsAudioSndCrdMono ( iMonoBlockSizeSam );
|
||||
|
||||
celt_decode ( CeltDecoder,
|
||||
&vecbyNetwData[0],
|
||||
iCeltNumCodedBytes,
|
||||
&vecsAudioSndCrdMono[0] );
|
||||
|
||||
for ( i = 0, j = 0; i < iMonoBlockSizeSam; i++, j += 2 )
|
||||
{
|
||||
vecsStereoSndCrd[j] = vecsStereoSndCrd[j + 1] =
|
||||
vecsAudioSndCrdMono[i];
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// TODO first ALL channels must be decoded before process data can
|
||||
// be called!!!
|
||||
|
||||
|
||||
// generate a sparate mix for each channel
|
||||
// actual processing of audio data -> mix
|
||||
vecsSendData = ProcessData ( vecvecdData, vecvecdGains[i] );
|
||||
|
@ -326,6 +349,17 @@ void CServer::OnTimer()
|
|||
// Socket.SendPacket (
|
||||
// PrepSendPacket ( vecChanID[i], vecsSendData ),
|
||||
// GetAddress ( vecChanID[i] ) );
|
||||
|
||||
/*
|
||||
celt_encode ( CeltEncoder,
|
||||
&vecsNetwork[0],
|
||||
NULL,
|
||||
&vecCeltData[0],
|
||||
iCeltNumCodedBytes );
|
||||
|
||||
Socket.SendPacket ( vecCeltData, Channel.GetAddress() );
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -363,8 +397,29 @@ void CServer::GetBlockAllConC ( CVector<int>& vecChanID,
|
|||
// read out all input buffers to decrease timeout counter on
|
||||
// disconnected channels
|
||||
// const EGetDataStat eGetStat = vecChannels[i].GetData ( vecdData );
|
||||
|
||||
const EGetDataStat eGetStat=GS_BUFFER_OK;//TEST
|
||||
|
||||
// TEST
|
||||
/*
|
||||
// TEST CELT
|
||||
CVector<short> vecsAudioSndCrdMono ( iMonoBlockSizeSam );
|
||||
|
||||
celt_decode ( CeltDecoder,
|
||||
&vecbyNetwData[0],
|
||||
iCeltNumCodedBytes,
|
||||
&vecsAudioSndCrdMono[0] );
|
||||
|
||||
for ( i = 0, j = 0; i < iMonoBlockSizeSam; i++, j += 2 )
|
||||
{
|
||||
vecsStereoSndCrd[j] = vecsStereoSndCrd[j + 1] =
|
||||
vecsAudioSndCrdMono[i];
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
// if channel was just disconnected, set flag that connected
|
||||
// client list is sent to all other clients
|
||||
if ( eGetStat == GS_CHAN_NOW_DISCONNECTED )
|
||||
|
@ -672,7 +727,7 @@ bAudioOK = true;
|
|||
|
||||
void CServer::GetConCliParam ( CVector<CHostAddress>& vecHostAddresses,
|
||||
CVector<QString>& vecsName,
|
||||
CVector<int>& veciJitBufSize,
|
||||
CVector<int>& veciJitBufNumFrames,
|
||||
CVector<int>& veciNetwFrameSizeFact )
|
||||
{
|
||||
CHostAddress InetAddr;
|
||||
|
@ -680,7 +735,7 @@ void CServer::GetConCliParam ( CVector<CHostAddress>& vecHostAddresses,
|
|||
// init return values
|
||||
vecHostAddresses.Init ( USED_NUM_CHANNELS );
|
||||
vecsName.Init ( USED_NUM_CHANNELS );
|
||||
veciJitBufSize.Init ( USED_NUM_CHANNELS );
|
||||
veciJitBufNumFrames.Init ( USED_NUM_CHANNELS );
|
||||
veciNetwFrameSizeFact.Init ( USED_NUM_CHANNELS );
|
||||
|
||||
// check all possible channels
|
||||
|
@ -691,7 +746,7 @@ void CServer::GetConCliParam ( CVector<CHostAddress>& vecHostAddresses,
|
|||
// get requested data
|
||||
vecHostAddresses[i] = InetAddr;
|
||||
vecsName[i] = vecChannels[i].GetName();
|
||||
veciJitBufSize[i] = vecChannels[i].GetSockBufSize();
|
||||
veciJitBufNumFrames[i] = vecChannels[i].GetSockBufNumFrames();
|
||||
veciNetwFrameSizeFact[i] = vecChannels[i].GetNetwFrameSizeFact();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -94,7 +94,7 @@ public:
|
|||
|
||||
void GetConCliParam ( CVector<CHostAddress>& vecHostAddresses,
|
||||
CVector<QString>& vecsName,
|
||||
CVector<int>& veciJitBufSize,
|
||||
CVector<int>& veciJitBufNumFrames,
|
||||
CVector<int>& veciNetwFrameSizeFact );
|
||||
|
||||
protected:
|
||||
|
@ -130,8 +130,8 @@ protected:
|
|||
|
||||
virtual void customEvent ( QEvent* Event );
|
||||
|
||||
/* do not use the vector class since CChannel does not have appropriate
|
||||
copy constructor/operator */
|
||||
// do not use the vector class since CChannel does not have appropriate
|
||||
// copy constructor/operator
|
||||
CChannel vecChannels[MAX_NUM_CHANNELS];
|
||||
QMutex Mutex;
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ void CSettings::ReadIniFile ( const QString& sFileName )
|
|||
if ( GetNumericIniSet ( IniXMLDocument, "client", "jitbuf",
|
||||
MIN_NET_BUF_SIZE_NUM_BL, MAX_NET_BUF_SIZE_NUM_BL, iValue ) )
|
||||
{
|
||||
pClient->SetSockBufSize ( iValue );
|
||||
pClient->SetSockBufNumFrames ( iValue );
|
||||
}
|
||||
|
||||
// flag whether the chat window shall be opened on a new chat message
|
||||
|
@ -180,7 +180,7 @@ void CSettings::WriteIniFile ( const QString& sFileName )
|
|||
|
||||
// network jitter buffer size
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "jitbuf",
|
||||
pClient->GetSockBufSize() );
|
||||
pClient->GetSockBufNumFrames() );
|
||||
|
||||
// flag whether the chat window shall be opened on a new chat message
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "openchatonnewmessage",
|
||||
|
|
Loading…
Reference in a new issue