mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 20:31:29 +02:00
added seqnum stats to AudioMixerClientData; added seqnums to Audio.cpp
This commit is contained in:
parent
2ec04fb756
commit
37ce693153
5 changed files with 25 additions and 3 deletions
|
@ -44,6 +44,13 @@ AvatarAudioRingBuffer* AudioMixerClientData::getAvatarAudioRingBuffer() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
int AudioMixerClientData::parseData(const QByteArray& packet) {
|
int AudioMixerClientData::parseData(const QByteArray& packet) {
|
||||||
|
|
||||||
|
// parse sequence number for this packet
|
||||||
|
int numBytesPacketHeader = numBytesForPacketHeader(packet);
|
||||||
|
const char* sequenceAt = packet.constData() + numBytesPacketHeader;
|
||||||
|
quint16 sequence = *(reinterpret_cast<const quint16*>(sequenceAt));
|
||||||
|
_sequenceNumberStats.sequenceNumberReceived(sequence);
|
||||||
|
|
||||||
PacketType packetType = packetTypeForPacket(packet);
|
PacketType packetType = packetTypeForPacket(packet);
|
||||||
if (packetType == PacketTypeMicrophoneAudioWithEcho
|
if (packetType == PacketTypeMicrophoneAudioWithEcho
|
||||||
|| packetType == PacketTypeMicrophoneAudioNoEcho
|
|| packetType == PacketTypeMicrophoneAudioNoEcho
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#include "AvatarAudioRingBuffer.h"
|
#include "AvatarAudioRingBuffer.h"
|
||||||
#include "AudioStreamStats.h"
|
#include "AudioStreamStats.h"
|
||||||
|
#include "SequenceNumbersStats.h"
|
||||||
|
|
||||||
class AudioMixerClientData : public NodeData {
|
class AudioMixerClientData : public NodeData {
|
||||||
public:
|
public:
|
||||||
|
@ -37,8 +38,11 @@ public:
|
||||||
|
|
||||||
QString getJitterBufferStatsString() const;
|
QString getJitterBufferStatsString() const;
|
||||||
|
|
||||||
|
const SequenceNumberStats& getSequenceNumberStats() const { return _sequenceNumberStats; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<PositionalAudioRingBuffer*> _ringBuffers;
|
QList<PositionalAudioRingBuffer*> _ringBuffers;
|
||||||
|
SequenceNumberStats _sequenceNumberStats;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_AudioMixerClientData_h
|
#endif // hifi_AudioMixerClientData_h
|
||||||
|
|
|
@ -103,7 +103,8 @@ Audio::Audio(int16_t initialJitterBufferSamples, QObject* parent) :
|
||||||
_scopeInput(0),
|
_scopeInput(0),
|
||||||
_scopeOutputLeft(0),
|
_scopeOutputLeft(0),
|
||||||
_scopeOutputRight(0),
|
_scopeOutputRight(0),
|
||||||
_audioMixerJitterBufferStats()
|
_audioMixerJitterBufferStats(),
|
||||||
|
_sequenceNumber(0)
|
||||||
{
|
{
|
||||||
// clear the array of locally injected samples
|
// clear the array of locally injected samples
|
||||||
memset(_localProceduralSamples, 0, NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL);
|
memset(_localProceduralSamples, 0, NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL);
|
||||||
|
@ -119,6 +120,7 @@ void Audio::init(QGLWidget *parent) {
|
||||||
|
|
||||||
void Audio::reset() {
|
void Audio::reset() {
|
||||||
_ringBuffer.reset();
|
_ringBuffer.reset();
|
||||||
|
_sequenceNumber = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioDeviceInfo getNamedAudioDeviceForMode(QAudio::Mode mode, const QString& deviceName) {
|
QAudioDeviceInfo getNamedAudioDeviceForMode(QAudio::Mode mode, const QString& deviceName) {
|
||||||
|
@ -422,7 +424,7 @@ void Audio::handleAudioInput() {
|
||||||
static char audioDataPacket[MAX_PACKET_SIZE];
|
static char audioDataPacket[MAX_PACKET_SIZE];
|
||||||
|
|
||||||
static int numBytesPacketHeader = numBytesForPacketHeaderGivenPacketType(PacketTypeMicrophoneAudioNoEcho);
|
static int numBytesPacketHeader = numBytesForPacketHeaderGivenPacketType(PacketTypeMicrophoneAudioNoEcho);
|
||||||
static int leadingBytes = numBytesPacketHeader + sizeof(glm::vec3) + sizeof(glm::quat) + sizeof(quint8);
|
static int leadingBytes = numBytesPacketHeader + sizeof(quint16) + sizeof(glm::vec3) + sizeof(glm::quat) + sizeof(quint8);
|
||||||
|
|
||||||
static int16_t* networkAudioSamples = (int16_t*) (audioDataPacket + leadingBytes);
|
static int16_t* networkAudioSamples = (int16_t*) (audioDataPacket + leadingBytes);
|
||||||
|
|
||||||
|
@ -654,6 +656,10 @@ void Audio::handleAudioInput() {
|
||||||
|
|
||||||
char* currentPacketPtr = audioDataPacket + populatePacketHeader(audioDataPacket, packetType);
|
char* currentPacketPtr = audioDataPacket + populatePacketHeader(audioDataPacket, packetType);
|
||||||
|
|
||||||
|
// pack seq number
|
||||||
|
memcpy(currentPacketPtr, &_sequenceNumber, sizeof(quint16));
|
||||||
|
currentPacketPtr += sizeof(quint16);
|
||||||
|
|
||||||
// set the mono/stereo byte
|
// set the mono/stereo byte
|
||||||
*currentPacketPtr++ = isStereo;
|
*currentPacketPtr++ = isStereo;
|
||||||
|
|
||||||
|
@ -669,6 +675,9 @@ void Audio::handleAudioInput() {
|
||||||
|
|
||||||
Application::getInstance()->getBandwidthMeter()->outputStream(BandwidthMeter::AUDIO)
|
Application::getInstance()->getBandwidthMeter()->outputStream(BandwidthMeter::AUDIO)
|
||||||
.updateValue(numAudioBytes + leadingBytes);
|
.updateValue(numAudioBytes + leadingBytes);
|
||||||
|
} else {
|
||||||
|
// reset seq numbers if there's no connection with an audiomixer
|
||||||
|
_sequenceNumber = 0;
|
||||||
}
|
}
|
||||||
delete[] inputAudioSamples;
|
delete[] inputAudioSamples;
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,6 +238,8 @@ private:
|
||||||
QByteArray* _scopeOutputRight;
|
QByteArray* _scopeOutputRight;
|
||||||
|
|
||||||
AudioMixerJitterBuffersStats _audioMixerJitterBufferStats;
|
AudioMixerJitterBuffersStats _audioMixerJitterBufferStats;
|
||||||
|
|
||||||
|
quint16 _sequenceNumber;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ void AudioRingBuffer::resizeForFrameSize(qint64 numFrameSamples) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int AudioRingBuffer::parseData(const QByteArray& packet) {
|
int AudioRingBuffer::parseData(const QByteArray& packet) {
|
||||||
int numBytesBeforeAudioData = numBytesForPacketHeader(packet);
|
int numBytesBeforeAudioData = numBytesForPacketHeader(packet) + sizeof(quint16);
|
||||||
return writeData(packet.data() + numBytesBeforeAudioData, packet.size() - numBytesBeforeAudioData);
|
return writeData(packet.data() + numBytesBeforeAudioData, packet.size() - numBytesBeforeAudioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue