mirror of
https://github.com/lubosz/overte.git
synced 2025-04-23 01:04:06 +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) {
|
||||
|
||||
// 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);
|
||||
if (packetType == PacketTypeMicrophoneAudioWithEcho
|
||||
|| packetType == PacketTypeMicrophoneAudioNoEcho
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "AvatarAudioRingBuffer.h"
|
||||
#include "AudioStreamStats.h"
|
||||
#include "SequenceNumbersStats.h"
|
||||
|
||||
class AudioMixerClientData : public NodeData {
|
||||
public:
|
||||
|
@ -37,8 +38,11 @@ public:
|
|||
|
||||
QString getJitterBufferStatsString() const;
|
||||
|
||||
const SequenceNumberStats& getSequenceNumberStats() const { return _sequenceNumberStats; }
|
||||
|
||||
private:
|
||||
QList<PositionalAudioRingBuffer*> _ringBuffers;
|
||||
SequenceNumberStats _sequenceNumberStats;
|
||||
};
|
||||
|
||||
#endif // hifi_AudioMixerClientData_h
|
||||
|
|
|
@ -103,7 +103,8 @@ Audio::Audio(int16_t initialJitterBufferSamples, QObject* parent) :
|
|||
_scopeInput(0),
|
||||
_scopeOutputLeft(0),
|
||||
_scopeOutputRight(0),
|
||||
_audioMixerJitterBufferStats()
|
||||
_audioMixerJitterBufferStats(),
|
||||
_sequenceNumber(0)
|
||||
{
|
||||
// clear the array of locally injected samples
|
||||
memset(_localProceduralSamples, 0, NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL);
|
||||
|
@ -119,6 +120,7 @@ void Audio::init(QGLWidget *parent) {
|
|||
|
||||
void Audio::reset() {
|
||||
_ringBuffer.reset();
|
||||
_sequenceNumber = 0;
|
||||
}
|
||||
|
||||
QAudioDeviceInfo getNamedAudioDeviceForMode(QAudio::Mode mode, const QString& deviceName) {
|
||||
|
@ -422,7 +424,7 @@ void Audio::handleAudioInput() {
|
|||
static char audioDataPacket[MAX_PACKET_SIZE];
|
||||
|
||||
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);
|
||||
|
||||
|
@ -654,6 +656,10 @@ void Audio::handleAudioInput() {
|
|||
|
||||
char* currentPacketPtr = audioDataPacket + populatePacketHeader(audioDataPacket, packetType);
|
||||
|
||||
// pack seq number
|
||||
memcpy(currentPacketPtr, &_sequenceNumber, sizeof(quint16));
|
||||
currentPacketPtr += sizeof(quint16);
|
||||
|
||||
// set the mono/stereo byte
|
||||
*currentPacketPtr++ = isStereo;
|
||||
|
||||
|
@ -669,6 +675,9 @@ void Audio::handleAudioInput() {
|
|||
|
||||
Application::getInstance()->getBandwidthMeter()->outputStream(BandwidthMeter::AUDIO)
|
||||
.updateValue(numAudioBytes + leadingBytes);
|
||||
} else {
|
||||
// reset seq numbers if there's no connection with an audiomixer
|
||||
_sequenceNumber = 0;
|
||||
}
|
||||
delete[] inputAudioSamples;
|
||||
}
|
||||
|
|
|
@ -238,6 +238,8 @@ private:
|
|||
QByteArray* _scopeOutputRight;
|
||||
|
||||
AudioMixerJitterBuffersStats _audioMixerJitterBufferStats;
|
||||
|
||||
quint16 _sequenceNumber;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ void AudioRingBuffer::resizeForFrameSize(qint64 numFrameSamples) {
|
|||
}
|
||||
|
||||
int AudioRingBuffer::parseData(const QByteArray& packet) {
|
||||
int numBytesBeforeAudioData = numBytesForPacketHeader(packet);
|
||||
int numBytesBeforeAudioData = numBytesForPacketHeader(packet) + sizeof(quint16);
|
||||
return writeData(packet.data() + numBytesBeforeAudioData, packet.size() - numBytesBeforeAudioData);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue