From f3910f8c1af675d4b7fc6dc6efdb381b87cb3b9a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 17 Mar 2014 17:54:27 -0700 Subject: [PATCH 1/2] scope clientMixBuffer only to AudioMixer run --- assignment-client/src/audio/AudioMixer.cpp | 16 +++++++--------- assignment-client/src/audio/AudioMixer.h | 3 --- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 90a901f5c9..c5c112d0f0 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -64,7 +64,7 @@ void attachNewBufferToNode(Node *newNode) { AudioMixer::AudioMixer(const QByteArray& packet) : ThreadedAssignment(packet) { - connect(NodeList::getInstance(), &NodeList::uuidChanged, this, &AudioMixer::receivedSessionUUID); + } void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuffer* bufferToAdd, @@ -332,10 +332,6 @@ void AudioMixer::readPendingDatagrams() { } } -void AudioMixer::receivedSessionUUID(const QUuid& sessionUUID) { - populatePacketHeader(_clientMixBuffer, PacketTypeMixedAudio); -} - void AudioMixer::run() { commonInit(AUDIO_MIXER_LOGGING_TARGET_NAME, NodeType::AudioMixer); @@ -350,8 +346,8 @@ void AudioMixer::run() { timeval startTime; gettimeofday(&startTime, NULL); - - int numBytesPacketHeader = numBytesForPacketHeaderGivenPacketType(PacketTypeMixedAudio); + + char clientMixBuffer[NETWORK_BUFFER_LENGTH_BYTES_STEREO + MAX_PACKET_HEADER_BYTES]; while (!_isFinished) { @@ -365,9 +361,11 @@ void AudioMixer::run() { if (node->getType() == NodeType::Agent && node->getActiveSocket() && node->getLinkedData() && ((AudioMixerClientData*) node->getLinkedData())->getAvatarAudioRingBuffer()) { prepareMixForListeningNode(node.data()); + + int numBytesPacketHeader = populatePacketHeader(clientMixBuffer, PacketTypeMixedAudio); - memcpy(_clientMixBuffer + numBytesPacketHeader, _clientSamples, NETWORK_BUFFER_LENGTH_BYTES_STEREO); - nodeList->writeDatagram(_clientMixBuffer, NETWORK_BUFFER_LENGTH_BYTES_STEREO + numBytesPacketHeader, node); + memcpy(clientMixBuffer + numBytesPacketHeader, _clientSamples, NETWORK_BUFFER_LENGTH_BYTES_STEREO); + nodeList->writeDatagram(clientMixBuffer, NETWORK_BUFFER_LENGTH_BYTES_STEREO + numBytesPacketHeader, node); } } diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index 0db205d845..5a68b0023f 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -28,8 +28,6 @@ public slots: void run(); void readPendingDatagrams(); -private slots: - void receivedSessionUUID(const QUuid& sessionUUID); private: /// adds one buffer to the mix for a listening node void addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuffer* bufferToAdd, @@ -40,7 +38,6 @@ private: // client samples capacity is larger than what will be sent to optimize mixing int16_t _clientSamples[NETWORK_BUFFER_LENGTH_SAMPLES_STEREO + SAMPLE_PHASE_DELAY_AT_90]; - char _clientMixBuffer[NETWORK_BUFFER_LENGTH_BYTES_STEREO + MAX_PACKET_HEADER_BYTES]; }; #endif /* defined(__hifi__AudioMixer__) */ From 1fc9ac18151876edd3bc38a1a058e9453caf8ad3 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 17 Mar 2014 17:55:47 -0700 Subject: [PATCH 2/2] make the client mix buffer only as large as it needs to be --- assignment-client/src/audio/AudioMixer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index c5c112d0f0..a2c56405ec 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -347,7 +347,8 @@ void AudioMixer::run() { gettimeofday(&startTime, NULL); - char clientMixBuffer[NETWORK_BUFFER_LENGTH_BYTES_STEREO + MAX_PACKET_HEADER_BYTES]; + char* clientMixBuffer = new char[NETWORK_BUFFER_LENGTH_BYTES_STEREO + + numBytesForPacketHeaderGivenPacketType(PacketTypeMixedAudio)]; while (!_isFinished) { @@ -391,4 +392,6 @@ void AudioMixer::run() { } } + + delete[] clientMixBuffer; }