mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 18:16:08 +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(),
|
||||
_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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -46,6 +46,8 @@ public:
|
|||
void reset();
|
||||
void resizeForFrameSize(int numFrameSamples);
|
||||
|
||||
void clear();
|
||||
|
||||
int getSampleCapacity() const { return _sampleCapacity; }
|
||||
int getFrameCapacity() const { return _frameCapacity; }
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue