mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 08:49:05 +02:00
Needed to properly remove hrtfs for avatar audio
This commit is contained in:
parent
404c08b0c7
commit
0b80610e65
3 changed files with 19 additions and 7 deletions
|
@ -602,10 +602,16 @@ void AudioMixer::handleNodeKilled(SharedNodePointer killedNode) {
|
||||||
void AudioMixer::handleKillAvatarPacket(QSharedPointer<ReceivedMessage> packet, SharedNodePointer sendingNode) {
|
void AudioMixer::handleKillAvatarPacket(QSharedPointer<ReceivedMessage> packet, SharedNodePointer sendingNode) {
|
||||||
auto clientData = dynamic_cast<AudioMixerClientData*>(sendingNode->getLinkedData());
|
auto clientData = dynamic_cast<AudioMixerClientData*>(sendingNode->getLinkedData());
|
||||||
if (clientData) {
|
if (clientData) {
|
||||||
clientData->removeAgentAvatarAudioStream();
|
QUuid streamID = clientData->removeAgentAvatarAudioStream();
|
||||||
// when you don't specify a stream, this removes just the QUuid()
|
if (streamID != QUuid()) {
|
||||||
// stream (which is the avatar's mic stream)
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
clientData->removeHRTFForStream(sendingNode->getUUID());
|
nodeList->eachNode([sendingNode, &streamID](const SharedNodePointer& node){
|
||||||
|
auto listenerClientData = dynamic_cast<AudioMixerClientData*>(node->getLinkedData());
|
||||||
|
if (listenerClientData) {
|
||||||
|
listenerClientData->removeHRTFForStream(sendingNode->getUUID(), streamID);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,20 +73,26 @@ void AudioMixerClientData::removeHRTFForStream(const QUuid& nodeID, const QUuid&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioMixerClientData::removeAgentAvatarAudioStream() {
|
QUuid AudioMixerClientData::removeAgentAvatarAudioStream() {
|
||||||
QWriteLocker writeLocker { &_streamsLock };
|
QWriteLocker writeLocker { &_streamsLock };
|
||||||
|
QUuid streamId;
|
||||||
auto it = _audioStreams.find(QUuid());
|
auto it = _audioStreams.find(QUuid());
|
||||||
if (it != _audioStreams.end()) {
|
if (it != _audioStreams.end()) {
|
||||||
|
AvatarAudioStream* stream = dynamic_cast<AvatarAudioStream*>(it->second.get());
|
||||||
|
if (stream) {
|
||||||
|
streamId = stream->getStreamIdentifier();
|
||||||
|
}
|
||||||
_audioStreams.erase(it);
|
_audioStreams.erase(it);
|
||||||
}
|
}
|
||||||
writeLocker.unlock();
|
writeLocker.unlock();
|
||||||
|
|
||||||
|
return streamId;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AudioMixerClientData::parseData(ReceivedMessage& message) {
|
int AudioMixerClientData::parseData(ReceivedMessage& message) {
|
||||||
PacketType packetType = message.getType();
|
PacketType packetType = message.getType();
|
||||||
|
|
||||||
if (packetType == PacketType::AudioStreamStats) {
|
if (packetType == PacketType::AudioStreamStats) {
|
||||||
|
|
||||||
// skip over header, appendFlag, and num stats packed
|
// skip over header, appendFlag, and num stats packed
|
||||||
message.seek(sizeof(quint8) + sizeof(quint16));
|
message.seek(sizeof(quint8) + sizeof(quint16));
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ public:
|
||||||
// removes an AudioHRTF object for a given stream
|
// removes an AudioHRTF object for a given stream
|
||||||
void removeHRTFForStream(const QUuid& nodeID, const QUuid& streamID = QUuid());
|
void removeHRTFForStream(const QUuid& nodeID, const QUuid& streamID = QUuid());
|
||||||
|
|
||||||
void removeAgentAvatarAudioStream();
|
QUuid removeAgentAvatarAudioStream();
|
||||||
|
|
||||||
int parseData(ReceivedMessage& message) override;
|
int parseData(ReceivedMessage& message) override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue