From 0bb051e2573c59088e6a6dbbf0d880e86667a220 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 30 Sep 2010 08:37:56 +0000 Subject: make sure the RTP buffer does not accumulate stale packets : limit the buffer size --- src/QXmppCallManager.cpp | 12 ++++++++++++ src/QXmppCallManager.h | 1 + 2 files changed, 13 insertions(+) (limited to 'src') 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; -- cgit v1.2.3