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;
AudioMixer::AudioMixer(ReceivedMessage& message) :
ThreadedAssignment(message) {
ThreadedAssignment(message)
{
// Always clear settings first
// This prevents previous assignment settings from sticking around
@ -101,6 +102,7 @@ AudioMixer::AudioMixer(ReceivedMessage& message) :
);
connect(nodeList.data(), &NodeList::nodeKilled, this, &AudioMixer::handleNodeKilled);
}
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
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());
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
std::unique_ptr<char[]> messageData { new char[message.getSize()] };
memcpy(messageData.get(), message.getMessage().data(), message.getSize());
auto packet = NLPacket::fromReceivedPacket(std::move(messageData), message.getSize(),
message.getSenderSockAddr());
packet->setType(mirroredType);
auto packet = NLPacket::create(mirroredType, message.getSize() + NUM_BYTES_RFC4122_UUID);
packet->write(message.getSourceID().toRfc4122());
packet->write(message.getMessage());
nodeList->sendPacket(std::move(packet), nodeList->getMirrorSocket());
}
@ -220,8 +217,11 @@ int AudioMixerClientData::parseData(ReceivedMessage& message) {
bool isMicStream = false;
if (packetType == PacketType::MicrophoneAudioWithEcho
|| packetType == PacketType::MirroredMicrophoneAudioWithEcho
|| packetType == PacketType::MicrophoneAudioNoEcho
|| packetType == PacketType::SilentAudioFrame) {
|| packetType == PacketType::MirroredMicrophoneAudioNoEcho
|| packetType == PacketType::SilentAudioFrame
|| packetType == PacketType::MirroredSilentAudioFrame) {
QWriteLocker writeLocker { &_streamsLock };
@ -256,7 +256,8 @@ int AudioMixerClientData::parseData(ReceivedMessage& message) {
writeLocker.unlock();
isMicStream = true;
} else if (packetType == PacketType::InjectAudio) {
} else if (packetType == PacketType::InjectAudio
|| packetType == PacketType::MirroredInjectAudio) {
// this is injected audio
// grab the stream identifier for this injected audio
message.seek(sizeof(quint16));