mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 06:16:24 +02:00
added code to clear agent audiostream frames to prevent buildup
This commit is contained in:
parent
fd9d7baa06
commit
e17556384d
7 changed files with 30 additions and 9 deletions
|
@ -36,7 +36,7 @@ Agent::Agent(const QByteArray& packet) :
|
||||||
_voxelEditSender(),
|
_voxelEditSender(),
|
||||||
_particleEditSender(),
|
_particleEditSender(),
|
||||||
_modelEditSender(),
|
_modelEditSender(),
|
||||||
_receivedAudioBuffer(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO),
|
_receivedAudioBuffer(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 1, false),
|
||||||
_avatarHashMap()
|
_avatarHashMap()
|
||||||
{
|
{
|
||||||
// be the parent of the script engine so it gets moved when we do
|
// 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) {
|
} else if (datagramPacketType == PacketTypeMixedAudio) {
|
||||||
|
|
||||||
_receivedAudioBuffer.parseData(receivedPacket);
|
_receivedAudioBuffer.parseData(receivedPacket);
|
||||||
|
|
||||||
|
_lastReceivedAudioLoudness = _receivedAudioBuffer.getNextOutputFrameLoudness();
|
||||||
|
|
||||||
|
_receivedAudioBuffer.clearBuffer();
|
||||||
|
|
||||||
// let this continue through to the NodeList so it updates last heard timestamp
|
// let this continue through to the NodeList so it updates last heard timestamp
|
||||||
// for the sending audio mixer
|
// for the sending audio mixer
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
#include <QtCore/QUrl>
|
#include <QtCore/QUrl>
|
||||||
|
|
||||||
#include <AvatarHashMap.h>
|
#include <AvatarHashMap.h>
|
||||||
#include <MixedAudioRingBuffer.h>
|
|
||||||
#include <ModelEditPacketSender.h>
|
#include <ModelEditPacketSender.h>
|
||||||
#include <ModelTree.h>
|
#include <ModelTree.h>
|
||||||
#include <ModelTreeHeadlessViewer.h>
|
#include <ModelTreeHeadlessViewer.h>
|
||||||
|
@ -31,6 +30,8 @@
|
||||||
#include <VoxelEditPacketSender.h>
|
#include <VoxelEditPacketSender.h>
|
||||||
#include <VoxelTreeHeadlessViewer.h>
|
#include <VoxelTreeHeadlessViewer.h>
|
||||||
|
|
||||||
|
#include "InboundMixedAudioStream.h"
|
||||||
|
|
||||||
|
|
||||||
class Agent : public ThreadedAssignment {
|
class Agent : public ThreadedAssignment {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -51,7 +52,7 @@ public:
|
||||||
void setIsListeningToAudioStream(bool isListeningToAudioStream)
|
void setIsListeningToAudioStream(bool isListeningToAudioStream)
|
||||||
{ _scriptEngine.setIsListeningToAudioStream(isListeningToAudioStream); }
|
{ _scriptEngine.setIsListeningToAudioStream(isListeningToAudioStream); }
|
||||||
|
|
||||||
float getLastReceivedAudioLoudness() const { return _receivedAudioBuffer.getLastReadFrameAverageLoudness(); }
|
float getLastReceivedAudioLoudness() const { return _lastReceivedAudioLoudness; }
|
||||||
|
|
||||||
virtual void aboutToFinish();
|
virtual void aboutToFinish();
|
||||||
|
|
||||||
|
@ -70,7 +71,8 @@ private:
|
||||||
VoxelTreeHeadlessViewer _voxelViewer;
|
VoxelTreeHeadlessViewer _voxelViewer;
|
||||||
ModelTreeHeadlessViewer _modelViewer;
|
ModelTreeHeadlessViewer _modelViewer;
|
||||||
|
|
||||||
MixedAudioRingBuffer _receivedAudioBuffer;
|
InboundMixedAudioStream _receivedAudioBuffer;
|
||||||
|
float _lastReceivedAudioLoudness;
|
||||||
|
|
||||||
AvatarHashMap _avatarHashMap;
|
AvatarHashMap _avatarHashMap;
|
||||||
};
|
};
|
||||||
|
|
|
@ -47,10 +47,8 @@ AudioRingBuffer::~AudioRingBuffer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioRingBuffer::reset() {
|
void AudioRingBuffer::reset() {
|
||||||
|
clear();
|
||||||
_overflowCount = 0;
|
_overflowCount = 0;
|
||||||
_isFull = false;
|
|
||||||
_endOfLastWrite = _buffer;
|
|
||||||
_nextOutput = _buffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioRingBuffer::resizeForFrameSize(int numFrameSamples) {
|
void AudioRingBuffer::resizeForFrameSize(int numFrameSamples) {
|
||||||
|
@ -64,6 +62,12 @@ void AudioRingBuffer::resizeForFrameSize(int numFrameSamples) {
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioRingBuffer::clear() {
|
||||||
|
_isFull = false;
|
||||||
|
_endOfLastWrite = _buffer;
|
||||||
|
_nextOutput = _buffer;
|
||||||
|
}
|
||||||
|
|
||||||
int AudioRingBuffer::parseData(const QByteArray& packet) {
|
int AudioRingBuffer::parseData(const QByteArray& packet) {
|
||||||
// skip packet header and sequence number
|
// skip packet header and sequence number
|
||||||
int numBytesBeforeAudioData = numBytesForPacketHeader(packet) + sizeof(quint16);
|
int numBytesBeforeAudioData = numBytesForPacketHeader(packet) + sizeof(quint16);
|
||||||
|
|
|
@ -46,6 +46,8 @@ public:
|
||||||
void reset();
|
void reset();
|
||||||
void resizeForFrameSize(int numFrameSamples);
|
void resizeForFrameSize(int numFrameSamples);
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
|
||||||
int getSampleCapacity() const { return _sampleCapacity; }
|
int getSampleCapacity() const { return _sampleCapacity; }
|
||||||
int getFrameCapacity() const { return _frameCapacity; }
|
int getFrameCapacity() const { return _frameCapacity; }
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,8 @@ InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacit
|
||||||
|
|
||||||
void InboundAudioStream::reset() {
|
void InboundAudioStream::reset() {
|
||||||
_ringBuffer.reset();
|
_ringBuffer.reset();
|
||||||
|
_lastPopSucceeded = false;
|
||||||
|
_lastPopOutput = AudioRingBuffer::ConstIterator();
|
||||||
_isStarved = true;
|
_isStarved = true;
|
||||||
_hasStarted = false;
|
_hasStarted = false;
|
||||||
resetStats();
|
resetStats();
|
||||||
|
@ -50,6 +52,11 @@ void InboundAudioStream::resetStats() {
|
||||||
_framesAvailableStats.reset();
|
_framesAvailableStats.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InboundAudioStream::clearBuffer() {
|
||||||
|
_ringBuffer.clear();
|
||||||
|
_framesAvailableStats.reset();
|
||||||
|
}
|
||||||
|
|
||||||
int InboundAudioStream::parseData(const QByteArray& packet) {
|
int InboundAudioStream::parseData(const QByteArray& packet) {
|
||||||
PacketType packetType = packetTypeForPacket(packet);
|
PacketType packetType = packetTypeForPacket(packet);
|
||||||
QUuid senderUUID = uuidFromPacketHeader(packet);
|
QUuid senderUUID = uuidFromPacketHeader(packet);
|
||||||
|
|
|
@ -47,9 +47,8 @@ public:
|
||||||
InboundAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers);
|
InboundAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers);
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
void flushBuffer() { _ringBuffer.reset(); }
|
|
||||||
void resetStats();
|
void resetStats();
|
||||||
|
void clearBuffer();
|
||||||
|
|
||||||
virtual int parseData(const QByteArray& packet);
|
virtual int parseData(const QByteArray& packet);
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
class InboundMixedAudioStream : public InboundAudioStream {
|
class InboundMixedAudioStream : public InboundAudioStream {
|
||||||
public:
|
public:
|
||||||
InboundMixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers);
|
InboundMixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers);
|
||||||
|
|
||||||
|
float getNextOutputFrameLoudness() const { return _ringBuffer.getNextOutputFrameLoudness(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int parseStreamProperties(PacketType type, const QByteArray& packetAfterSeqNum, int& numAudioSamples);
|
int parseStreamProperties(PacketType type, const QByteArray& packetAfterSeqNum, int& numAudioSamples);
|
||||||
int parseAudioData(PacketType type, const QByteArray& packetAfterStreamProperties, int numAudioSamples);
|
int parseAudioData(PacketType type, const QByteArray& packetAfterStreamProperties, int numAudioSamples);
|
||||||
|
|
Loading…
Reference in a new issue