From a24366fcd7cab6b9ed5d1f44d56f891b6811d018 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 25 Feb 2014 11:16:19 -0800 Subject: [PATCH] populate packet header only once session UUID is received --- assignment-client/src/audio/AudioMixer.cpp | 20 +++++++++----------- assignment-client/src/audio/AudioMixer.h | 3 +++ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 91b932a36c..900de817fa 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -61,9 +61,10 @@ void attachNewBufferToNode(Node *newNode) { } AudioMixer::AudioMixer(const QByteArray& packet) : - ThreadedAssignment(packet) + ThreadedAssignment(packet), + _clientMixBuffer(NETWORK_BUFFER_LENGTH_BYTES_STEREO + numBytesForPacketHeaderGivenPacketType(PacketTypeMixedAudio), 0) { - + connect(NodeList::getInstance(), &NodeList::uuidChanged, this, &AudioMixer::receivedSessionUUID); } void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuffer* bufferToAdd, @@ -229,6 +230,10 @@ void AudioMixer::readPendingDatagrams() { } } +void AudioMixer::receivedSessionUUID(const QUuid& sessionUUID) { + populatePacketHeader(_clientMixBuffer, PacketTypeMixedAudio); +} + void AudioMixer::run() { commonInit(AUDIO_MIXER_LOGGING_TARGET_NAME, NodeType::AudioMixer); @@ -245,13 +250,6 @@ void AudioMixer::run() { gettimeofday(&startTime, NULL); int numBytesPacketHeader = numBytesForPacketHeaderGivenPacketType(PacketTypeMixedAudio); - // note: Visual Studio 2010 doesn't support variable sized local arrays - #ifdef _WIN32 - unsigned char clientPacket[MAX_PACKET_SIZE]; - #else - unsigned char clientPacket[NETWORK_BUFFER_LENGTH_BYTES_STEREO + numBytesPacketHeader]; - #endif - populatePacketHeader(reinterpret_cast(clientPacket), PacketTypeMixedAudio); while (!_isFinished) { @@ -272,8 +270,8 @@ void AudioMixer::run() { && ((AudioMixerClientData*) node->getLinkedData())->getAvatarAudioRingBuffer()) { prepareMixForListeningNode(node.data()); - memcpy(clientPacket + numBytesPacketHeader, _clientSamples, sizeof(_clientSamples)); - nodeList->writeDatagram((char*) clientPacket, sizeof(clientPacket), node); + memcpy(_clientMixBuffer.data() + numBytesPacketHeader, _clientSamples, sizeof(_clientSamples)); + nodeList->writeDatagram(_clientMixBuffer, node); } } diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index e120d19d32..ae5998100f 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -26,6 +26,8 @@ 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, @@ -34,6 +36,7 @@ private: /// prepares and sends a mix to one Node void prepareMixForListeningNode(Node* node); + QByteArray _clientMixBuffer; int16_t _clientSamples[NETWORK_BUFFER_LENGTH_SAMPLES_STEREO]; };