aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppCallManager.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-09-30 08:37:56 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-09-30 08:37:56 +0000
commit0bb051e2573c59088e6a6dbbf0d880e86667a220 (patch)
tree31b843fbc4beca186a79ec4c2aaff99444664e02 /src/QXmppCallManager.cpp
parent0deb734a6f50f2f8dcdd6ca185073403d42c4f1a (diff)
downloadqxmpp-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.cpp12
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;