From 80a2bd0844968885165ed8ab1b7b4ae21cfc3cd1 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 19 Dec 2013 15:44:04 -0800 Subject: [PATCH] move _shouldLoopbackForNode to PositionalAudioRingBuffer for access in injector --- assignment-client/src/audio/AudioMixer.cpp | 3 +-- assignment-client/src/audio/AvatarAudioRingBuffer.cpp | 3 +-- assignment-client/src/audio/AvatarAudioRingBuffer.h | 4 ---- libraries/audio/src/AudioInjector.cpp | 4 ++++ libraries/audio/src/AudioInjector.h | 3 ++- libraries/audio/src/InjectedAudioRingBuffer.cpp | 6 ++++++ libraries/audio/src/PositionalAudioRingBuffer.cpp | 3 ++- libraries/audio/src/PositionalAudioRingBuffer.h | 3 +++ libraries/shared/src/PacketHeaders.cpp | 2 +- 9 files changed, 20 insertions(+), 11 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index c2c8e618bf..d8e0580cc9 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -200,8 +200,7 @@ void AudioMixer::prepareMixForListeningNode(Node* node) { PositionalAudioRingBuffer* otherNodeBuffer = otherNodeClientData->getRingBuffers()[i]; if ((*otherNode != *node - || otherNodeBuffer->getType() != PositionalAudioRingBuffer::Microphone - || nodeRingBuffer->shouldLoopbackForNode()) + || otherNodeBuffer->shouldLoopbackForNode()) && otherNodeBuffer->willBeAddedToMix()) { addBufferToMixForListeningNodeWithBuffer(otherNodeBuffer, nodeRingBuffer); } diff --git a/assignment-client/src/audio/AvatarAudioRingBuffer.cpp b/assignment-client/src/audio/AvatarAudioRingBuffer.cpp index 584dd319f5..64d71d9836 100644 --- a/assignment-client/src/audio/AvatarAudioRingBuffer.cpp +++ b/assignment-client/src/audio/AvatarAudioRingBuffer.cpp @@ -11,8 +11,7 @@ #include "AvatarAudioRingBuffer.h" AvatarAudioRingBuffer::AvatarAudioRingBuffer() : - PositionalAudioRingBuffer(PositionalAudioRingBuffer::Microphone), - _shouldLoopbackForNode(false) { + PositionalAudioRingBuffer(PositionalAudioRingBuffer::Microphone) { } diff --git a/assignment-client/src/audio/AvatarAudioRingBuffer.h b/assignment-client/src/audio/AvatarAudioRingBuffer.h index 30097f3812..15542383fb 100644 --- a/assignment-client/src/audio/AvatarAudioRingBuffer.h +++ b/assignment-client/src/audio/AvatarAudioRingBuffer.h @@ -18,14 +18,10 @@ public: AvatarAudioRingBuffer(); int parseData(unsigned char* sourceBuffer, int numBytes); - - bool shouldLoopbackForNode() const { return _shouldLoopbackForNode; } private: // disallow copying of AvatarAudioRingBuffer objects AvatarAudioRingBuffer(const AvatarAudioRingBuffer&); AvatarAudioRingBuffer& operator= (const AvatarAudioRingBuffer&); - - bool _shouldLoopbackForNode; }; #endif /* defined(__hifi__AvatarAudioRingBuffer__) */ diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index fe7b26e6db..f0d81230b4 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -95,6 +95,10 @@ void AudioInjector::injectAudio(AbstractAudioInterface* localAudioInterface) { memcpy(currentPacketPosition, rfcStreamUUID, rfcStreamUUID.size()); currentPacketPosition += rfcStreamUUID.size(); + // pack the flag for loopback + memcpy(currentPacketPosition, &_shouldLoopback, sizeof(_shouldLoopback)); + currentPacketPosition += sizeof(_shouldLoopback); + // pack the position for injected audio memcpy(currentPacketPosition, &_position, sizeof(_position)); currentPacketPosition += sizeof(_position); diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index ae4c923248..425ae7477f 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -31,6 +31,7 @@ public: void setPosition(const glm::vec3& position) { _position = position; } void setOrientation(const glm::quat& orientation) { _orientation = orientation; } void setVolume(float volume) { _volume = std::max(fabsf(volume), 1.0f); } + void setShouldLoopback(bool shouldLoopback) { _shouldLoopback = shouldLoopback; } public slots: void injectViaThread(AbstractAudioInterface* localAudioInterface = NULL); @@ -42,7 +43,7 @@ private: glm::vec3 _position; glm::quat _orientation; float _volume; - bool _shouldLoopback; + uchar _shouldLoopback; private slots: void startDownload(); diff --git a/libraries/audio/src/InjectedAudioRingBuffer.cpp b/libraries/audio/src/InjectedAudioRingBuffer.cpp index b089a20b83..3d4d8a1834 100644 --- a/libraries/audio/src/InjectedAudioRingBuffer.cpp +++ b/libraries/audio/src/InjectedAudioRingBuffer.cpp @@ -32,6 +32,12 @@ int InjectedAudioRingBuffer::parseData(unsigned char* sourceBuffer, int numBytes // push past the UUID for this node and the stream identifier currentBuffer += (NUM_BYTES_RFC4122_UUID * 2); + // pull the loopback flag and set our boolean + uchar shouldLoopback; + memcpy(&shouldLoopback, currentBuffer, sizeof(shouldLoopback)); + currentBuffer += sizeof(shouldLoopback); + _shouldLoopbackForNode = (shouldLoopback == 1); + // use parsePositionalData in parent PostionalAudioRingBuffer class to pull common positional data currentBuffer += parsePositionalData(currentBuffer, numBytes - (currentBuffer - sourceBuffer)); diff --git a/libraries/audio/src/PositionalAudioRingBuffer.cpp b/libraries/audio/src/PositionalAudioRingBuffer.cpp index 0b7c26dc7d..4be6b80265 100644 --- a/libraries/audio/src/PositionalAudioRingBuffer.cpp +++ b/libraries/audio/src/PositionalAudioRingBuffer.cpp @@ -19,7 +19,8 @@ PositionalAudioRingBuffer::PositionalAudioRingBuffer(PositionalAudioRingBuffer:: _type(type), _position(0.0f, 0.0f, 0.0f), _orientation(0.0f, 0.0f, 0.0f, 0.0f), - _willBeAddedToMix(false) + _willBeAddedToMix(false), + _shouldLoopbackForNode(false) { } diff --git a/libraries/audio/src/PositionalAudioRingBuffer.h b/libraries/audio/src/PositionalAudioRingBuffer.h index f4ccdc59bb..189ac34058 100644 --- a/libraries/audio/src/PositionalAudioRingBuffer.h +++ b/libraries/audio/src/PositionalAudioRingBuffer.h @@ -33,6 +33,8 @@ public: bool willBeAddedToMix() const { return _willBeAddedToMix; } void setWillBeAddedToMix(bool willBeAddedToMix) { _willBeAddedToMix = willBeAddedToMix; } + bool shouldLoopbackForNode() const { return _shouldLoopbackForNode; } + PositionalAudioRingBuffer::Type getType() const { return _type; } const glm::vec3& getPosition() const { return _position; } const glm::quat& getOrientation() const { return _orientation; } @@ -46,6 +48,7 @@ protected: glm::vec3 _position; glm::quat _orientation; bool _willBeAddedToMix; + bool _shouldLoopbackForNode; }; #endif /* defined(__hifi__PositionalAudioRingBuffer__) */ diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp index 07cdbf76fa..ec5e8ee692 100644 --- a/libraries/shared/src/PacketHeaders.cpp +++ b/libraries/shared/src/PacketHeaders.cpp @@ -18,7 +18,7 @@ PACKET_VERSION versionForPacketType(PACKET_TYPE type) { case PACKET_TYPE_MICROPHONE_AUDIO_NO_ECHO: case PACKET_TYPE_MICROPHONE_AUDIO_WITH_ECHO: return 2; - + case PACKET_TYPE_HEAD_DATA: return 12;