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 | |
| 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')
| -rw-r--r-- | src/QXmppCallManager.cpp | 12 | ||||
| -rw-r--r-- | src/QXmppCallManager.h | 1 |
2 files changed, 13 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; diff --git a/src/QXmppCallManager.h b/src/QXmppCallManager.h index 35361ec2..86577cee 100644 --- a/src/QXmppCallManager.h +++ b/src/QXmppCallManager.h @@ -151,6 +151,7 @@ private: QByteArray m_incomingBuffer; bool m_incomingBuffering; int m_incomingMinimum; + int m_incomingMaximum; quint16 m_incomingSequence; quint32 m_incomingStamp; |
