diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-30 08:37:56 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-30 08:37:56 +0000 |
| commit | 0bb051e2573c59088e6a6dbbf0d880e86667a220 (patch) | |
| tree | 31b843fbc4beca186a79ec4c2aaff99444664e02 /src/QXmppCallManager.cpp | |
| parent | 0deb734a6f50f2f8dcdd6ca185073403d42c4f1a (diff) | |
| download | qxmpp-0bb051e2573c59088e6a6dbbf0d880e86667a220.tar.gz | |
make sure the RTP buffer does not accumulate stale packets : limit the buffer size
Diffstat (limited to 'src/QXmppCallManager.cpp')
| -rw-r--r-- | src/QXmppCallManager.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/QXmppCallManager.cpp b/src/QXmppCallManager.cpp index 71706af4..17f4ad1c 100644 --- a/src/QXmppCallManager.cpp +++ b/src/QXmppCallManager.cpp @@ -61,6 +61,7 @@ QXmppCall::QXmppCall(const QString &jid, QXmppCall::Direction direction, QObject m_codec(0), m_incomingBuffering(true), m_incomingMinimum(0), + m_incomingMaximum(0), m_incomingSequence(0), m_incomingStamp(0), m_outgoingMarker(true), @@ -207,6 +208,7 @@ void QXmppCall::setPayloadType(const QXmppJinglePayloadType &payloadType) // initial number of bytes to buffer m_incomingMinimum = m_outgoingChunk * 5; + m_incomingMaximum = m_outgoingChunk * 8; updateOpenMode(); } @@ -301,6 +303,16 @@ void QXmppCall::datagramReceived(int component, const QByteArray &buffer) output.setByteOrder(QDataStream::LittleEndian); m_codec->decode(stream, output); + // check whether we are running late + if (m_incomingBuffer.size() > m_incomingMaximum) + { + const qint64 droppedSize = m_incomingBuffer.size() - m_incomingMinimum; + emit logMessage(QXmppLogger::DebugMessage, + QString("RTP buffer is too full, dropping %1 bytes") + .arg(QString::number(droppedSize))); + m_incomingBuffer = m_incomingBuffer.right(m_incomingMinimum); + m_incomingStamp += droppedSize / SAMPLE_BYTES; + } // check whether we have filled the initial buffer if (m_incomingBuffer.size() >= m_incomingMinimum) m_incomingBuffering = false; |
