mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 16:14:45 +02:00
repair AudioMixerClientData parseData
This commit is contained in:
parent
601e8d6e68
commit
d242f5d5d9
2 changed files with 22 additions and 17 deletions
|
@ -49,20 +49,18 @@ AvatarAudioStream* AudioMixerClientData::getAvatarAudioStream() const {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AudioMixerClientData::parseData(const QByteArray& packet) {
|
int AudioMixerClientData::parseData(NLPacket& packet, SharedNodePointer sendingNode) {
|
||||||
PacketType::Value packetType = packetTypeForPacket(packet);
|
PacketType::Value packetType = packet.getType();
|
||||||
|
|
||||||
if (packetType == PacketType::AudioStreamStats) {
|
if (packetType == PacketType::AudioStreamStats) {
|
||||||
|
|
||||||
const char* dataAt = packet.data();
|
|
||||||
|
|
||||||
// skip over header, appendFlag, and num stats packed
|
// skip over header, appendFlag, and num stats packed
|
||||||
dataAt += (numBytesForPacketHeader(packet) + sizeof(quint8) + sizeof(quint16));
|
packet.seek(sizeof(quint8) + sizeof(quint16));
|
||||||
|
|
||||||
// read the downstream audio stream stats
|
// read the downstream audio stream stats
|
||||||
memcpy(&_downstreamAudioStreamStats, dataAt, sizeof(AudioStreamStats));
|
packet.readPrimitive(&_downstreamAudioStreamStats);
|
||||||
dataAt += sizeof(AudioStreamStats);
|
|
||||||
|
|
||||||
return dataAt - packet.data();
|
return packet.pos();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
PositionalAudioStream* matchingStream = NULL;
|
PositionalAudioStream* matchingStream = NULL;
|
||||||
|
@ -76,8 +74,11 @@ int AudioMixerClientData::parseData(const QByteArray& packet) {
|
||||||
// we don't have a mic stream yet, so add it
|
// we don't have a mic stream yet, so add it
|
||||||
|
|
||||||
// read the channel flag to see if our stream is stereo or not
|
// read the channel flag to see if our stream is stereo or not
|
||||||
const char* channelFlagAt = packet.constData() + numBytesForPacketHeader(packet) + sizeof(quint16);
|
packet.seek(sizeof(quint16));
|
||||||
quint8 channelFlag = *(reinterpret_cast<const quint8*>(channelFlagAt));
|
|
||||||
|
quint8 channelFlag;
|
||||||
|
packet.readPrimitive(&channelFlag);
|
||||||
|
|
||||||
bool isStereo = channelFlag == 1;
|
bool isStereo = channelFlag == 1;
|
||||||
|
|
||||||
_audioStreams.insert(nullUUID, matchingStream = new AvatarAudioStream(isStereo, AudioMixer::getStreamSettings()));
|
_audioStreams.insert(nullUUID, matchingStream = new AvatarAudioStream(isStereo, AudioMixer::getStreamSettings()));
|
||||||
|
@ -88,20 +89,24 @@ int AudioMixerClientData::parseData(const QByteArray& packet) {
|
||||||
// this is injected audio
|
// this is injected audio
|
||||||
|
|
||||||
// grab the stream identifier for this injected audio
|
// grab the stream identifier for this injected audio
|
||||||
int bytesBeforeStreamIdentifier = numBytesForPacketHeader(packet) + sizeof(quint16);
|
packet.seek(sizeof(quint16));
|
||||||
QUuid streamIdentifier = QUuid::fromRfc4122(packet.mid(bytesBeforeStreamIdentifier, NUM_BYTES_RFC4122_UUID));
|
QUuid streamIdentifier = QUuid::fromRfc4122(packet.read(NUM_BYTES_RFC4122_UUID));
|
||||||
int bytesBeforeStereoIdentifier = bytesBeforeStreamIdentifier + NUM_BYTES_RFC4122_UUID;
|
|
||||||
bool isStereo;
|
bool isStereo;
|
||||||
QDataStream(packet.mid(bytesBeforeStereoIdentifier)) >> isStereo;
|
packet.readPrimitive(&isStereo);
|
||||||
|
|
||||||
if (!_audioStreams.contains(streamIdentifier)) {
|
if (!_audioStreams.contains(streamIdentifier)) {
|
||||||
// we don't have this injected stream yet, so add it
|
// we don't have this injected stream yet, so add it
|
||||||
_audioStreams.insert(streamIdentifier, matchingStream = new InjectedAudioStream(streamIdentifier, isStereo, AudioMixer::getStreamSettings()));
|
_audioStreams.insert(streamIdentifier,
|
||||||
|
matchingStream = new InjectedAudioStream(streamIdentifier, isStereo, AudioMixer::getStreamSettings()));
|
||||||
} else {
|
} else {
|
||||||
matchingStream = _audioStreams.value(streamIdentifier);
|
matchingStream = _audioStreams.value(streamIdentifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
class PerListenerSourcePairData {
|
class PerListenerSourcePairData {
|
||||||
public:
|
public:
|
||||||
PerListenerSourcePairData() {
|
PerListenerSourcePairData() {
|
||||||
_penumbraFilter.initialize(AudioConstants::SAMPLE_RATE, AudioConstants::NETWORK_FRAME_SAMPLES_STEREO / 2);
|
_penumbraFilter.initialize(AudioConstants::SAMPLE_RATE, AudioConstants::NETWORK_FRAME_SAMPLES_STEREO / 2);
|
||||||
};
|
};
|
||||||
AudioFilterHSF1s& getPenumbraFilter() { return _penumbraFilter; }
|
AudioFilterHSF1s& getPenumbraFilter() { return _penumbraFilter; }
|
||||||
|
@ -42,7 +42,7 @@ public:
|
||||||
const QHash<QUuid, PositionalAudioStream*>& getAudioStreams() const { return _audioStreams; }
|
const QHash<QUuid, PositionalAudioStream*>& getAudioStreams() const { return _audioStreams; }
|
||||||
AvatarAudioStream* getAvatarAudioStream() const;
|
AvatarAudioStream* getAvatarAudioStream() const;
|
||||||
|
|
||||||
int parseData(const QByteArray& packet);
|
int parseData(NLPacket& packet, QSharedPointer<Node> sendingNode);
|
||||||
|
|
||||||
void checkBuffersBeforeFrameSend();
|
void checkBuffersBeforeFrameSend();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue