From fd9d7baa06df8cb9a7baa6be55e7eef9fefa3a7d Mon Sep 17 00:00:00 2001 From: wangyix Date: Fri, 25 Jul 2014 15:14:10 -0700 Subject: [PATCH] updated Agent with audiostream; added initial packets discard to audiostream --- assignment-client/src/Agent.cpp | 13 ------------- assignment-client/src/Agent.h | 1 - interface/src/Audio.cpp | 3 --- libraries/audio/src/InboundAudioStream.cpp | 14 +++++++++----- libraries/audio/src/InboundAudioStream.h | 2 +- 5 files changed, 10 insertions(+), 23 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 0449e0d682..0c23cdf12f 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -148,21 +148,8 @@ void Agent::readPendingDatagrams() { } else if (datagramPacketType == PacketTypeMixedAudio) { - QUuid senderUUID = uuidFromPacketHeader(receivedPacket); - - // parse sequence number for this packet - int numBytesPacketHeader = numBytesForPacketHeader(receivedPacket); - const char* sequenceAt = receivedPacket.constData() + numBytesPacketHeader; - quint16 sequence = *(reinterpret_cast(sequenceAt)); - _incomingMixedAudioSequenceNumberStats.sequenceNumberReceived(sequence, senderUUID); - - // parse the data and grab the average loudness _receivedAudioBuffer.parseData(receivedPacket); - // pretend like we have read the samples from this buffer so it does not fill - static int16_t garbageAudioBuffer[NETWORK_BUFFER_LENGTH_SAMPLES_STEREO]; - _receivedAudioBuffer.readSamples(garbageAudioBuffer, NETWORK_BUFFER_LENGTH_SAMPLES_STEREO); - // let this continue through to the NodeList so it updates last heard timestamp // for the sending audio mixer NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket); diff --git a/assignment-client/src/Agent.h b/assignment-client/src/Agent.h index ec8f7c88cb..2398eda0f2 100644 --- a/assignment-client/src/Agent.h +++ b/assignment-client/src/Agent.h @@ -71,7 +71,6 @@ private: ModelTreeHeadlessViewer _modelViewer; MixedAudioRingBuffer _receivedAudioBuffer; - SequenceNumberStats _incomingMixedAudioSequenceNumberStats; AvatarHashMap _avatarHashMap; }; diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 4344f14655..3896c42cc3 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -716,9 +716,6 @@ void Audio::handleAudioInput() { } void Audio::addReceivedAudioToBuffer(const QByteArray& audioByteArray) { - const int NUM_INITIAL_PACKETS_DISCARD = 3; - const int STANDARD_DEVIATION_SAMPLE_COUNT = 500; - if (_audioOutput) { // Audio output must exist and be correctly set up if we're going to process received audio processReceivedAudio(audioByteArray); diff --git a/libraries/audio/src/InboundAudioStream.cpp b/libraries/audio/src/InboundAudioStream.cpp index 2d889845b2..105507992c 100644 --- a/libraries/audio/src/InboundAudioStream.cpp +++ b/libraries/audio/src/InboundAudioStream.cpp @@ -51,8 +51,6 @@ void InboundAudioStream::resetStats() { } int InboundAudioStream::parseData(const QByteArray& packet) { - frameReceivedUpdateTimingStats(); - PacketType packetType = packetTypeForPacket(packet); QUuid senderUUID = uuidFromPacketHeader(packet); @@ -64,7 +62,7 @@ int InboundAudioStream::parseData(const QByteArray& packet) { // parse sequence number and track it quint16 sequence = *(reinterpret_cast(sequenceAt)); readBytes += sizeof(quint16); - SequenceNumberStats::ArrivalInfo arrivalInfo = _incomingSequenceNumberStats.sequenceNumberReceived(sequence, senderUUID); + SequenceNumberStats::ArrivalInfo arrivalInfo = frameReceivedUpdateNetworkStats(sequence, senderUUID); // TODO: handle generalized silent packet here????? @@ -150,10 +148,14 @@ int InboundAudioStream::getCalculatedDesiredJitterBufferFrames() const { } -void InboundAudioStream::frameReceivedUpdateTimingStats() { +SequenceNumberStats::ArrivalInfo InboundAudioStream::frameReceivedUpdateNetworkStats(quint16 sequenceNumber, const QUuid& senderUUID) { + const int NUM_INITIAL_PACKETS_DISCARD = 3; + + SequenceNumberStats::ArrivalInfo arrivalInfo = _incomingSequenceNumberStats.sequenceNumberReceived(sequenceNumber, senderUUID); + // update the two time gap stats we're keeping quint64 now = usecTimestampNow(); - if (_lastFrameReceivedTime != 0) { + if (_incomingSequenceNumberStats.getNumReceived() >= NUM_INITIAL_PACKETS_DISCARD) { quint64 gap = now - _lastFrameReceivedTime; _interframeTimeGapStatsForJitterCalc.update(gap); _interframeTimeGapStatsForStatsPacket.update(gap); @@ -174,6 +176,8 @@ void InboundAudioStream::frameReceivedUpdateTimingStats() { } _interframeTimeGapStatsForJitterCalc.clearNewStatsAvailableFlag(); } + + return arrivalInfo; } int InboundAudioStream::writeDroppableSilentSamples(int numSilentSamples) { diff --git a/libraries/audio/src/InboundAudioStream.h b/libraries/audio/src/InboundAudioStream.h index c052eef2bb..8460a8a92e 100644 --- a/libraries/audio/src/InboundAudioStream.h +++ b/libraries/audio/src/InboundAudioStream.h @@ -101,7 +101,7 @@ protected: int writeDroppableSilentSamples(int numSilentSamples); int writeSamplesForDroppedPackets(int numSamples); - void frameReceivedUpdateTimingStats(); + SequenceNumberStats::ArrivalInfo frameReceivedUpdateNetworkStats(quint16 sequenceNumber, const QUuid& senderUUID); protected: