From dfe70ed2e359bf86be7fc7483a008e2ba07e24b5 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 26 Sep 2014 19:23:36 -0700 Subject: [PATCH] Initialize InjectedAudioStream with correct stereo value --- .../src/audio/AudioMixerClientData.cpp | 5 ++++- libraries/audio/src/InjectedAudioStream.cpp | 15 ++++++++++----- libraries/audio/src/InjectedAudioStream.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 6c326b3d28..2f60640da3 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -89,10 +89,13 @@ int AudioMixerClientData::parseData(const QByteArray& packet) { // grab the stream identifier for this injected audio int bytesBeforeStreamIdentifier = numBytesForPacketHeader(packet) + sizeof(quint16); QUuid streamIdentifier = QUuid::fromRfc4122(packet.mid(bytesBeforeStreamIdentifier, NUM_BYTES_RFC4122_UUID)); + int bytesBeforeStereoIdentifier = bytesBeforeStreamIdentifier + NUM_BYTES_RFC4122_UUID; + bool isStereo; + QDataStream(packet.mid(bytesBeforeStereoIdentifier)) >> isStereo; if (!_audioStreams.contains(streamIdentifier)) { // we don't have this injected stream yet, so add it - _audioStreams.insert(streamIdentifier, matchingStream = new InjectedAudioStream(streamIdentifier, AudioMixer::getStreamSettings())); + _audioStreams.insert(streamIdentifier, matchingStream = new InjectedAudioStream(streamIdentifier, isStereo, AudioMixer::getStreamSettings())); } else { matchingStream = _audioStreams.value(streamIdentifier); } diff --git a/libraries/audio/src/InjectedAudioStream.cpp b/libraries/audio/src/InjectedAudioStream.cpp index 0cc13eae05..873b32cc40 100644 --- a/libraries/audio/src/InjectedAudioStream.cpp +++ b/libraries/audio/src/InjectedAudioStream.cpp @@ -19,8 +19,8 @@ #include "InjectedAudioStream.h" -InjectedAudioStream::InjectedAudioStream(const QUuid& streamIdentifier, const InboundAudioStream::Settings& settings) : - PositionalAudioStream(PositionalAudioStream::Injector, false, settings), +InjectedAudioStream::InjectedAudioStream(const QUuid& streamIdentifier, const bool isStereo, const InboundAudioStream::Settings& settings) : + PositionalAudioStream(PositionalAudioStream::Injector, isStereo, settings), _streamIdentifier(streamIdentifier), _radius(0.0f), _attenuationRatio(0) @@ -39,9 +39,14 @@ int InjectedAudioStream::parseStreamProperties(PacketType type, // skip the stream identifier packetStream.skipRawData(NUM_BYTES_RFC4122_UUID); - packetStream >> _isStereo; - if (isStereo()) { - _ringBuffer.resizeForFrameSize(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO); + // read the channel flag + bool isStereo; + packetStream >> isStereo; + + // if isStereo value has changed, restart the ring buffer with new frame size + if (isStereo != _isStereo) { + _ringBuffer.resizeForFrameSize(isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL); + _isStereo = isStereo; } // pull the loopback flag and set our boolean diff --git a/libraries/audio/src/InjectedAudioStream.h b/libraries/audio/src/InjectedAudioStream.h index f3840b1029..60c36dfb12 100644 --- a/libraries/audio/src/InjectedAudioStream.h +++ b/libraries/audio/src/InjectedAudioStream.h @@ -18,7 +18,7 @@ class InjectedAudioStream : public PositionalAudioStream { public: - InjectedAudioStream(const QUuid& streamIdentifier, const InboundAudioStream::Settings& settings); + InjectedAudioStream(const QUuid& streamIdentifier, const bool isStereo, const InboundAudioStream::Settings& settings); float getRadius() const { return _radius; } float getAttenuationRatio() const { return _attenuationRatio; }