added code to clear agent audiostream frames to prevent buildup

This commit is contained in:
wangyix 2014-07-25 15:51:34 -07:00
parent fd9d7baa06
commit e17556384d
7 changed files with 30 additions and 9 deletions

View file

@ -36,7 +36,7 @@ Agent::Agent(const QByteArray& packet) :
_voxelEditSender(),
_particleEditSender(),
_modelEditSender(),
_receivedAudioBuffer(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO),
_receivedAudioBuffer(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 1, false),
_avatarHashMap()
{
// be the parent of the script engine so it gets moved when we do
@ -149,6 +149,10 @@ void Agent::readPendingDatagrams() {
} else if (datagramPacketType == PacketTypeMixedAudio) {
_receivedAudioBuffer.parseData(receivedPacket);
_lastReceivedAudioLoudness = _receivedAudioBuffer.getNextOutputFrameLoudness();
_receivedAudioBuffer.clearBuffer();
// let this continue through to the NodeList so it updates last heard timestamp
// for the sending audio mixer

View file

@ -19,7 +19,6 @@
#include <QtCore/QUrl>
#include <AvatarHashMap.h>
#include <MixedAudioRingBuffer.h>
#include <ModelEditPacketSender.h>
#include <ModelTree.h>
#include <ModelTreeHeadlessViewer.h>
@ -31,6 +30,8 @@
#include <VoxelEditPacketSender.h>
#include <VoxelTreeHeadlessViewer.h>
#include "InboundMixedAudioStream.h"
class Agent : public ThreadedAssignment {
Q_OBJECT
@ -51,7 +52,7 @@ public:
void setIsListeningToAudioStream(bool isListeningToAudioStream)
{ _scriptEngine.setIsListeningToAudioStream(isListeningToAudioStream); }
float getLastReceivedAudioLoudness() const { return _receivedAudioBuffer.getLastReadFrameAverageLoudness(); }
float getLastReceivedAudioLoudness() const { return _lastReceivedAudioLoudness; }
virtual void aboutToFinish();
@ -70,7 +71,8 @@ private:
VoxelTreeHeadlessViewer _voxelViewer;
ModelTreeHeadlessViewer _modelViewer;
MixedAudioRingBuffer _receivedAudioBuffer;
InboundMixedAudioStream _receivedAudioBuffer;
float _lastReceivedAudioLoudness;
AvatarHashMap _avatarHashMap;
};

View file

@ -47,10 +47,8 @@ AudioRingBuffer::~AudioRingBuffer() {
}
void AudioRingBuffer::reset() {
clear();
_overflowCount = 0;
_isFull = false;
_endOfLastWrite = _buffer;
_nextOutput = _buffer;
}
void AudioRingBuffer::resizeForFrameSize(int numFrameSamples) {
@ -64,6 +62,12 @@ void AudioRingBuffer::resizeForFrameSize(int numFrameSamples) {
reset();
}
void AudioRingBuffer::clear() {
_isFull = false;
_endOfLastWrite = _buffer;
_nextOutput = _buffer;
}
int AudioRingBuffer::parseData(const QByteArray& packet) {
// skip packet header and sequence number
int numBytesBeforeAudioData = numBytesForPacketHeader(packet) + sizeof(quint16);

View file

@ -46,6 +46,8 @@ public:
void reset();
void resizeForFrameSize(int numFrameSamples);
void clear();
int getSampleCapacity() const { return _sampleCapacity; }
int getFrameCapacity() const { return _frameCapacity; }

View file

@ -33,6 +33,8 @@ InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacit
void InboundAudioStream::reset() {
_ringBuffer.reset();
_lastPopSucceeded = false;
_lastPopOutput = AudioRingBuffer::ConstIterator();
_isStarved = true;
_hasStarted = false;
resetStats();
@ -50,6 +52,11 @@ void InboundAudioStream::resetStats() {
_framesAvailableStats.reset();
}
void InboundAudioStream::clearBuffer() {
_ringBuffer.clear();
_framesAvailableStats.reset();
}
int InboundAudioStream::parseData(const QByteArray& packet) {
PacketType packetType = packetTypeForPacket(packet);
QUuid senderUUID = uuidFromPacketHeader(packet);

View file

@ -47,9 +47,8 @@ public:
InboundAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers);
void reset();
void flushBuffer() { _ringBuffer.reset(); }
void resetStats();
void clearBuffer();
virtual int parseData(const QByteArray& packet);

View file

@ -5,6 +5,9 @@
class InboundMixedAudioStream : public InboundAudioStream {
public:
InboundMixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers);
float getNextOutputFrameLoudness() const { return _ringBuffer.getNextOutputFrameLoudness(); }
protected:
int parseStreamProperties(PacketType type, const QByteArray& packetAfterSeqNum, int& numAudioSamples);
int parseAudioData(PacketType type, const QByteArray& packetAfterStreamProperties, int numAudioSamples);