From a0584119c201636f34ccfb8125c4aa5b8780233a Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 22 Aug 2009 16:13:21 +0000 Subject: [PATCH] some cleanup, use new clear functionality for jitter buffer, use longer history in server --- src/buffer.cpp | 18 ++++++++++++++++++ src/buffer.h | 1 + 2 files changed, 19 insertions(+) diff --git a/src/buffer.cpp b/src/buffer.cpp index 3d8a52db..f4fd96ff 100755 --- a/src/buffer.cpp +++ b/src/buffer.cpp @@ -119,6 +119,16 @@ bool CNetBuf::Get ( CVector& vecbyData ) return false; } + // check for invalid data in buffer + if ( iNumInvalidElements > 0 ) + { + // decrease number of invalid elements by the queried number (input + // size) + iNumInvalidElements -= iInSize; + + bGetOK = false; // return error flag + } + // Check if there is not enough data available -> correct if ( GetAvailData() < iInSize ) { @@ -245,6 +255,11 @@ void CNetBuf::Clear ( const EClearType eClearType ) iPutPos = 0; iGetPos = iMiddleOfBuffer; + // The buffer was cleared, the next time blocks are read from the + // buffer, these are invalid ones. Calculate the number of invalid + // elements + iNumInvalidElements = iMemSize - iMiddleOfBuffer; + // check for special case if ( iPutPos == iGetPos ) { @@ -269,6 +284,9 @@ void CNetBuf::Clear ( const EClearType eClearType ) iPutPos -= iMemSize; } + // in case of put correction, no invalid blocks are inserted + iNumInvalidElements = 0; + // check for special case if ( iPutPos == iGetPos ) { diff --git a/src/buffer.h b/src/buffer.h index 16937426..de4731cd 100755 --- a/src/buffer.h +++ b/src/buffer.h @@ -52,6 +52,7 @@ protected: CVector vecbyMemory; int iMemSize; int iBlockSize; + int iNumInvalidElements; int iGetPos, iPutPos; EBufState eBufState; };