handle mirrored packets in AudioMixerClientData

This commit is contained in:
Stephen Birarda 2017-06-12 01:16:51 -07:00
parent 45bb323723
commit f726c5bc3a
2 changed files with 15 additions and 10 deletions

View file

@ -55,7 +55,8 @@ QVector<AudioMixer::ZoneSettings> AudioMixer::_zoneSettings;
QVector<AudioMixer::ReverbSettings> AudioMixer::_zoneReverbSettings; QVector<AudioMixer::ReverbSettings> AudioMixer::_zoneReverbSettings;
AudioMixer::AudioMixer(ReceivedMessage& message) : AudioMixer::AudioMixer(ReceivedMessage& message) :
ThreadedAssignment(message) { ThreadedAssignment(message)
{
// Always clear settings first // Always clear settings first
// This prevents previous assignment settings from sticking around // This prevents previous assignment settings from sticking around
@ -101,6 +102,7 @@ AudioMixer::AudioMixer(ReceivedMessage& message) :
); );
connect(nodeList.data(), &NodeList::nodeKilled, this, &AudioMixer::handleNodeKilled); connect(nodeList.data(), &NodeList::nodeKilled, this, &AudioMixer::handleNodeKilled);
} }
void AudioMixer::queueAudioPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer node) { void AudioMixer::queueAudioPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer node) {
@ -115,7 +117,9 @@ void AudioMixer::queueMirroredAudioPacket(QSharedPointer<ReceivedMessage> messag
// make sure we have a mirrored node for the original sender of the packet // make sure we have a mirrored node for the original sender of the packet
auto nodeList = DependencyManager::get<NodeList>(); auto nodeList = DependencyManager::get<NodeList>();
auto node = nodeList->addOrUpdateNode(message->getSourceID(), NodeType::Agent, QUuid nodeID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
auto node = nodeList->addOrUpdateNode(nodeID, NodeType::Agent,
message->getSenderSockAddr(), message->getSenderSockAddr()); message->getSenderSockAddr(), message->getSenderSockAddr());
node->setIsMirror(true); node->setIsMirror(true);

View file

@ -118,12 +118,9 @@ void AudioMixerClientData::potentiallyMirrorPacket(ReceivedMessage& message) {
} }
// construct an NLPacket to send to the mirror that has the contents of the received packet // construct an NLPacket to send to the mirror that has the contents of the received packet
std::unique_ptr<char[]> messageData { new char[message.getSize()] }; auto packet = NLPacket::create(mirroredType, message.getSize() + NUM_BYTES_RFC4122_UUID);
memcpy(messageData.get(), message.getMessage().data(), message.getSize()); packet->write(message.getSourceID().toRfc4122());
auto packet = NLPacket::fromReceivedPacket(std::move(messageData), message.getSize(), packet->write(message.getMessage());
message.getSenderSockAddr());
packet->setType(mirroredType);
nodeList->sendPacket(std::move(packet), nodeList->getMirrorSocket()); nodeList->sendPacket(std::move(packet), nodeList->getMirrorSocket());
} }
@ -220,8 +217,11 @@ int AudioMixerClientData::parseData(ReceivedMessage& message) {
bool isMicStream = false; bool isMicStream = false;
if (packetType == PacketType::MicrophoneAudioWithEcho if (packetType == PacketType::MicrophoneAudioWithEcho
|| packetType == PacketType::MirroredMicrophoneAudioWithEcho
|| packetType == PacketType::MicrophoneAudioNoEcho || packetType == PacketType::MicrophoneAudioNoEcho
|| packetType == PacketType::SilentAudioFrame) { || packetType == PacketType::MirroredMicrophoneAudioNoEcho
|| packetType == PacketType::SilentAudioFrame
|| packetType == PacketType::MirroredSilentAudioFrame) {
QWriteLocker writeLocker { &_streamsLock }; QWriteLocker writeLocker { &_streamsLock };
@ -256,7 +256,8 @@ int AudioMixerClientData::parseData(ReceivedMessage& message) {
writeLocker.unlock(); writeLocker.unlock();
isMicStream = true; isMicStream = true;
} else if (packetType == PacketType::InjectAudio) { } else if (packetType == PacketType::InjectAudio
|| packetType == PacketType::MirroredInjectAudio) {
// this is injected audio // this is injected audio
// grab the stream identifier for this injected audio // grab the stream identifier for this injected audio
message.seek(sizeof(quint16)); message.seek(sizeof(quint16));