diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 018f946771..54ffb95fbf 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -75,7 +75,7 @@ bool AudioMixer::shouldMute(float quietestFrame) { return (quietestFrame > _noiseMutingThreshold); } -AudioMixer::AudioMixer(const QByteArray& packet) : +AudioMixer::AudioMixer(NLPacket& packet) : ThreadedAssignment(packet), _trailingSleepRatio(1.0f), _minAudibilityThreshold(LOUDNESS_TO_DISTANCE_RATIO / 2.0f), @@ -97,11 +97,14 @@ AudioMixer::AudioMixer(const QByteArray& packet) : // SOON auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); - packetReceiver.registerPacketListener(PacketType::MicrophoneAudioNoEcho, this, "handleMicrophoneAudioNoEchoPacket"); - packetReceiver.registerPacketListener(PacketType::MicrophoneAudioWithEcho, this, "handleMicrophoneAudioWithEchoPacket"); - packetReceiver.registerPacketListener(PacketType::InjectAudio, this, "handleInjectAudioPacket"); - packetReceiver.registerPacketListener(PacketType::SilentAudioFrame, this, "handleSilentAudioFramePacket"); - packetReceiver.registerPacketListener(PacketType::AudioStreamStats, this, "handleAudioStreamStatsPacket"); + + QSet nodeAudioPackets { + PacketType::MicrophoneAudioNoEcho, PacketType::MicrophoneAudioWithEcho, + PacketType::InjectAudio, PacketType::SilentAudioFrame, + PacketType::AudioStreamStats + }; + + packetReceiver.registerPacketListenerForSet(nodeAudioPackets, this, "handleNodeAudioPacket"); packetReceiver.registerPacketListener(PacketType::MuteEnvironment, this, "handleMuteEnvironmentPacket"); } @@ -543,29 +546,8 @@ void AudioMixer::sendAudioEnvironmentPacket(SharedNodePointer node) { } } -void AudioMixer::handleMicrophoneAudioNoEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { - auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet); -} - -void AudioMixer::handleMicrophoneAudioWithEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { - auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet); -} - -void AudioMixer::handleInjectAudioPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { - auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet); -} - -void AudioMixer::handleSilentAudioFramePacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { - auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet); -} - -void AudioMixer::handleAudioStreamStatsPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { - auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet); +void AudioMixer::handleNodeAudioPacket(QSharedPointer packet, SharedNodePointer sendingNode) { + DependencyManager::get()->updateNodeWithDataFromPacket(packet, sendingNode); } void AudioMixer::handleMuteEnvironmentPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index 50ec3c6d18..9e7a010f61 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -28,7 +28,7 @@ const int READ_DATAGRAMS_STATS_WINDOW_SECONDS = 30; class AudioMixer : public ThreadedAssignment { Q_OBJECT public: - AudioMixer(const QByteArray& packet); + AudioMixer(NLPacket& packet); void deleteLater() { qDebug() << "DELETE LATER CALLED?"; QObject::deleteLater(); } public slots: @@ -40,12 +40,8 @@ public slots: static const InboundAudioStream::Settings& getStreamSettings() { return _streamSettings; } private slots: - void handleMicrophoneAudioNoEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr); - void handleMicrophoneAudioWithEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr); - void handleInjectAudioPacket(QSharedPointer packet, HifiSockAddr senderSockAddr); - void handleSilentAudioFramePacket(QSharedPointer packet, HifiSockAddr senderSockAddr); - void handleAudioStreamStatsPacket(QSharedPointer packet, HifiSockAddr senderSockAddr); - void handleMuteEnvironmentPacket(QSharedPointer packet, HifiSockAddr senderSockAddr); + void handleNodeAudioPacket(QSharedPointer packet, SharedNodePointer sendingNode); + void handleMuteEnvironmentPacket(QSharedPointer packet, SharedNodePointer sendingNode); private: /// adds one stream to the mix for a listening node diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 59f5982159..dc2d60be51 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -107,7 +107,7 @@ int AudioMixerClientData::parseData(NLPacket& packet, SharedNodePointer sendingN // seek to the beginning of the packet so that the next reader is in the right spot packet.seek(0); - return matchingStream->parseData(packet); + return matchingStream->parseData(packet, sendingNode); } return 0; } diff --git a/assignment-client/src/avatars/AvatarMixerClientData.cpp b/assignment-client/src/avatars/AvatarMixerClientData.cpp index 197e9baf5e..9f658e1b48 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.cpp +++ b/assignment-client/src/avatars/AvatarMixerClientData.cpp @@ -13,10 +13,9 @@ #include "AvatarMixerClientData.h" -int AvatarMixerClientData::parseData(const QByteArray& packet) { +int AvatarMixerClientData::parseData(NLPacket& packet, SharedNodePointer sendingNode) { // compute the offset to the data payload - int offset = numBytesForPacketHeader(packet); - return _avatar.parseDataAtOffset(packet, offset); + return _avatar.parseDataFromBuffer(QByteArray::fromRawData(packet.getPayload(), packet.getSizeUsed())); } bool AvatarMixerClientData::checkAndSetHasReceivedFirstPackets() { diff --git a/assignment-client/src/avatars/AvatarMixerClientData.h b/assignment-client/src/avatars/AvatarMixerClientData.h index 3e10b8473a..4497f17da7 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.h +++ b/assignment-client/src/avatars/AvatarMixerClientData.h @@ -31,13 +31,13 @@ const QString OUTBOUND_AVATAR_DATA_STATS_KEY = "outbound_av_data_kbps"; class AvatarMixerClientData : public NodeData { Q_OBJECT public: - int parseData(const QByteArray& packet); + int parseData(NLPacket& packet, SharedNodePointer sendingNode); AvatarData& getAvatar() { return _avatar; } bool checkAndSetHasReceivedFirstPackets(); PacketSequenceNumber getLastBroadcastSequenceNumber(const QUuid& nodeUUID) const; - void setLastBroadcastSequenceNumber(const QUuid& nodeUUID, PacketSequenceNumber sequenceNumber) + void setLastBroadcastSequenceNumber(const QUuid& nodeUUID, PacketSequenceNumber sequenceNumber) { _lastBroadcastSequenceNumbers[nodeUUID] = sequenceNumber; } Q_INVOKABLE void removeLastBroadcastSequenceNumber(const QUuid& nodeUUID) { _lastBroadcastSequenceNumbers.erase(nodeUUID); } @@ -57,7 +57,7 @@ public: void incrementNumAvatarsSentLastFrame() { ++_numAvatarsSentLastFrame; } int getNumAvatarsSentLastFrame() const { return _numAvatarsSentLastFrame; } - void recordNumOtherAvatarStarves(int numAvatarsHeldBack) { _otherAvatarStarves.updateAverage((float) numAvatarsHeldBack); } + void recordNumOtherAvatarStarves(int numAvatarsHeldBack) { _otherAvatarStarves.updateAverage((float) numAvatarsHeldBack); } float getAvgNumOtherAvatarStarvesPerSecond() const { return _otherAvatarStarves.getAverageSampleValuePerSecond(); } void recordNumOtherAvatarSkips(int numOtherAvatarSkips) { _otherAvatarSkips.updateAverage((float) numOtherAvatarSkips); } @@ -71,7 +71,7 @@ public: void recordSentAvatarData(int numBytes) { _avgOtherAvatarDataRate.updateAverage((float) numBytes); } - float getOutboundAvatarDataKbps() const + float getOutboundAvatarDataKbps() const { return _avgOtherAvatarDataRate.getAverageSampleValuePerSecond() / (float) BYTES_PER_KILOBIT; } void loadJSONStats(QJsonObject& jsonObject) const; diff --git a/libraries/networking/src/PacketReceiver.cpp b/libraries/networking/src/PacketReceiver.cpp index 6511185fa4..8e6c5c7929 100644 --- a/libraries/networking/src/PacketReceiver.cpp +++ b/libraries/networking/src/PacketReceiver.cpp @@ -24,7 +24,7 @@ PacketReceiver::PacketReceiver(QObject* parent) : } -void PacketReceiver::registerPacketListeners(const QSet& types, QObject* object, const char* slot) { +void PacketReceiver::registerPacketListenerForSet(const QSet& types, QObject* object, const char* slot) { QSet nonSourcedTypes; QSet sourcedTypes; diff --git a/libraries/networking/src/PacketReceiver.h b/libraries/networking/src/PacketReceiver.h index e5b6693fe4..a410e9eef9 100644 --- a/libraries/networking/src/PacketReceiver.h +++ b/libraries/networking/src/PacketReceiver.h @@ -39,7 +39,7 @@ public: void shutdown() { _isShuttingDown = true; } - void registerPacketListeners(const QSet& types, QObject* listener, const char* slot); + void registerPacketListenerForSet(const QSet& types, QObject* listener, const char* slot); void registerPacketListener(PacketType::Value type, QObject* listener, const char* slot); public slots: