From 481cd0ca6a593fc5b0897e31eef66c696bacb1c0 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Mon, 13 Feb 2017 20:25:10 -0500 Subject: [PATCH] move audio packets to client data --- assignment-client/src/audio/AudioMixer.cpp | 24 +++++++++---------- assignment-client/src/audio/AudioMixer.h | 3 +-- .../src/audio/AudioMixerClientData.cpp | 20 +++++++++++++++- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index e231d63d87..dc6722cf09 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -56,10 +56,13 @@ AudioMixer::AudioMixer(ReceivedMessage& message) : auto nodeList = DependencyManager::get(); auto& packetReceiver = nodeList->getPacketReceiver(); - packetReceiver.registerListenerForTypes({ PacketType::MicrophoneAudioNoEcho, PacketType::MicrophoneAudioWithEcho, - PacketType::InjectAudio, PacketType::AudioStreamStats }, - this, "handleAudioPacket"); - packetReceiver.registerListenerForTypes({ PacketType::SilentAudioFrame }, this, "handleSilentAudioPacket"); + packetReceiver.registerListenerForTypes({ + PacketType::MicrophoneAudioNoEcho, + PacketType::MicrophoneAudioWithEcho, + PacketType::InjectAudio, + PacketType::AudioStreamStats, + PacketType::SilentAudioFrame }, + this, "queueAudioPacket"); packetReceiver.registerListener(PacketType::NegotiateAudioFormat, this, "handleNegotiateAudioFormat"); packetReceiver.registerListener(PacketType::MuteEnvironment, this, "handleMuteEnvironmentPacket"); packetReceiver.registerListener(PacketType::NodeIgnoreRequest, this, "handleNodeIgnoreRequestPacket"); @@ -72,15 +75,12 @@ AudioMixer::AudioMixer(ReceivedMessage& message) : connect(nodeList.data(), &NodeList::nodeKilled, this, &AudioMixer::handleNodeKilled); } -void AudioMixer::handleAudioPacket(QSharedPointer message, SharedNodePointer sendingNode) { - getOrCreateClientData(sendingNode.data()); - DependencyManager::get()->updateNodeWithDataFromPacket(message, sendingNode); -} +void AudioMixer::queueAudioPacket(QSharedPointer message, SharedNodePointer sendingNode) { + if (message->getType() == PacketType::SilentAudioFrame) { + _numSilentPackets++; + } -void AudioMixer::handleSilentAudioPacket(QSharedPointer message, SharedNodePointer sendingNode) { - _numSilentPackets++; - getOrCreateClientData(sendingNode.data()); - DependencyManager::get()->updateNodeWithDataFromPacket(message, sendingNode); + getOrCreateClientData(sendingNode.data())->queuePacket(message); } void AudioMixer::handleMuteEnvironmentPacket(QSharedPointer message, SharedNodePointer sendingNode) { diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index 9589e71ecb..6cb7648e50 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -56,8 +56,7 @@ public slots: private slots: // packet handlers - void handleAudioPacket(QSharedPointer packet, SharedNodePointer sendingNode); - void handleSilentAudioPacket(QSharedPointer packet, SharedNodePointer sendingNode); + void queueAudioPacket(QSharedPointer packet, SharedNodePointer sendingNode); void handleMuteEnvironmentPacket(QSharedPointer packet, SharedNodePointer sendingNode); void handleNegotiateAudioFormat(QSharedPointer message, SharedNodePointer sendingNode); void handleNodeKilled(SharedNodePointer killedNode); diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 8ca3379e56..c6b7182a57 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -52,7 +52,25 @@ void AudioMixerClientData::queuePacket(QSharedPointer packet) { } void AudioMixerClientData::processPackets() { - // TODO: process the queue + while (!_queuedPackets.empty()) { + QSharedPointer& packet = _queuedPackets.back(); + + switch (packet->getType()) { + case PacketType::MicrophoneAudioNoEcho: + case PacketType::MicrophoneAudioWithEcho: + case PacketType::InjectAudio: + case PacketType::AudioStreamStats: + case PacketType::SilentAudioFrame: { + QMutexLocker lock(&getMutex()); + parseData(*packet); + } + default: + Q_UNREACHABLE(); + } + + _queuedPackets.pop(); + } + assert(_queuedPackets.empty()); }