mirror of
https://github.com/lubosz/overte.git
synced 2025-04-23 01:04:06 +02:00
changed class name to AudioStreamStats, reverted ScriptEngine packing back to QDataStream
This commit is contained in:
parent
c3f571745c
commit
de3c1ebf0f
7 changed files with 34 additions and 41 deletions
|
@ -156,7 +156,7 @@ void AudioMixerClientData::pushBuffersAfterFrameSend() {
|
|||
}
|
||||
}
|
||||
|
||||
void AudioMixerClientData::getJitterBuffersStats(AudioMixerJitterBuffersStats& stats) const {
|
||||
void AudioMixerClientData::getAudioStreamStats(AudioStreamStats& stats) const {
|
||||
int avatarJitterBufferFrames = 0;
|
||||
int maxJitterBufferFrames = 0;
|
||||
int sumJitterBufferFrames = 0;
|
||||
|
@ -185,10 +185,10 @@ int AudioMixerClientData::encodeAudioStreamStatsPacket(char* packet) const {
|
|||
char* dataAt = packet + numBytesPacketHeader;
|
||||
|
||||
// pack jitter buffer stats
|
||||
AudioMixerJitterBuffersStats jitterBufferStats;
|
||||
getJitterBuffersStats(jitterBufferStats);
|
||||
memcpy(dataAt, &jitterBufferStats, sizeof(AudioMixerJitterBuffersStats));
|
||||
dataAt += sizeof(AudioMixerJitterBuffersStats);
|
||||
AudioStreamStats stats;
|
||||
getAudioStreamStats(stats);
|
||||
memcpy(dataAt, &stats, sizeof(AudioStreamStats));
|
||||
dataAt += sizeof(AudioStreamStats);
|
||||
|
||||
return dataAt - packet;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ public:
|
|||
void checkBuffersBeforeFrameSend(AABox* checkSourceZone = NULL, AABox* listenerZone = NULL);
|
||||
void pushBuffersAfterFrameSend();
|
||||
|
||||
void getJitterBuffersStats(AudioMixerJitterBuffersStats& stats) const;
|
||||
void getAudioStreamStats(AudioStreamStats& stats) const;
|
||||
|
||||
int encodeAudioStreamStatsPacket(char* packet) const;
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ Audio::Audio(int16_t initialJitterBufferSamples, QObject* parent) :
|
|||
_scopeInput(0),
|
||||
_scopeOutputLeft(0),
|
||||
_scopeOutputRight(0),
|
||||
_audioMixerJitterBufferStats(),
|
||||
_audioMixerStreamStats(),
|
||||
_outgoingAvatarAudioSequenceNumber(0)
|
||||
{
|
||||
// clear the array of locally injected samples
|
||||
|
@ -721,8 +721,8 @@ void Audio::parseAudioStreamStatsPacket(const QByteArray& packet) {
|
|||
const char* dataAt = packet.constData() + numBytesPacketHeader;
|
||||
|
||||
// parse audio mixer jitter buffer stats
|
||||
memcpy(&_audioMixerJitterBufferStats, dataAt, sizeof(AudioMixerJitterBuffersStats));
|
||||
dataAt += sizeof(AudioMixerJitterBuffersStats);
|
||||
memcpy(&_audioMixerStreamStats, dataAt, sizeof(AudioStreamStats));
|
||||
dataAt += sizeof(AudioStreamStats);
|
||||
}
|
||||
|
||||
// NOTE: numSamples is the total number of single channel samples, since callers will always call this with stereo
|
||||
|
|
|
@ -104,7 +104,7 @@ public slots:
|
|||
float getInputVolume() const { return (_audioInput) ? _audioInput->volume() : 0.0f; }
|
||||
void setInputVolume(float volume) { if (_audioInput) _audioInput->setVolume(volume); }
|
||||
|
||||
const AudioMixerJitterBuffersStats& getAudioMixerJitterBuffersStats() const { return _audioMixerJitterBufferStats; }
|
||||
const AudioStreamStats& getAudioMixerStreamStats() const { return _audioMixerStreamStats; }
|
||||
|
||||
signals:
|
||||
bool muteToggled();
|
||||
|
@ -237,7 +237,7 @@ private:
|
|||
QByteArray* _scopeOutputLeft;
|
||||
QByteArray* _scopeOutputRight;
|
||||
|
||||
AudioMixerJitterBuffersStats _audioMixerJitterBufferStats;
|
||||
AudioStreamStats _audioMixerStreamStats;
|
||||
|
||||
quint16 _outgoingAvatarAudioSequenceNumber;
|
||||
SequenceNumberStats _incomingMixedAudioSequenceNumberStats;
|
||||
|
|
|
@ -325,13 +325,13 @@ void Stats::display(
|
|||
|
||||
static const float MSECS_PER_FRAME = (float)NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL * (float)MSECS_PER_SECOND / (float)SAMPLE_RATE;
|
||||
|
||||
const AudioMixerJitterBuffersStats& audioMixerJitterBufferStats =
|
||||
Application::getInstance()->getAudio()->getAudioMixerJitterBuffersStats();
|
||||
const AudioStreamStats& audioMixerStreamStats =
|
||||
Application::getInstance()->getAudio()->getAudioMixerStreamStats();
|
||||
|
||||
char* audioMixerJitterBuffersStatsLabel = "AudioMixer j-buffers msecs:";
|
||||
char audioMixerJitterBuffersStats[30];
|
||||
sprintf(audioMixerJitterBuffersStats, "mic/max/avg: %.1f / %.1f / %.1f", audioMixerJitterBufferStats._avatarJitterBufferFrames * MSECS_PER_FRAME,
|
||||
audioMixerJitterBufferStats._maxJitterBufferFrames * MSECS_PER_FRAME, audioMixerJitterBufferStats._avgJitterBufferFrames * MSECS_PER_FRAME);
|
||||
sprintf(audioMixerJitterBuffersStats, "mic/max/avg: %.1f / %.1f / %.1f", audioMixerStreamStats._avatarJitterBufferFrames * MSECS_PER_FRAME,
|
||||
audioMixerStreamStats._maxJitterBufferFrames * MSECS_PER_FRAME, audioMixerStreamStats._avgJitterBufferFrames * MSECS_PER_FRAME);
|
||||
|
||||
verticalOffset += STATS_PELS_PER_LINE;
|
||||
drawText(horizontalOffset, verticalOffset, scale, rotation, font, audioMixerJitterBuffersStatsLabel, color);
|
||||
|
|
|
@ -12,9 +12,9 @@
|
|||
#ifndef hifi_AudioStreamStats_h
|
||||
#define hifi_AudioStreamStats_h
|
||||
|
||||
class AudioMixerJitterBuffersStats {
|
||||
class AudioStreamStats {
|
||||
public:
|
||||
AudioMixerJitterBuffersStats()
|
||||
AudioStreamStats()
|
||||
: _avatarJitterBufferFrames(0), _maxJitterBufferFrames(0), _avgJitterBufferFrames(0)
|
||||
{}
|
||||
|
||||
|
|
|
@ -458,54 +458,47 @@ void ScriptEngine::run() {
|
|||
_numAvatarSoundSentBytes = 0;
|
||||
}
|
||||
}
|
||||
|
||||
QByteArray audioPacket = byteArrayWithPopulatedHeader(silentFrame
|
||||
? PacketTypeSilentAudioFrame
|
||||
: PacketTypeMicrophoneAudioNoEcho);
|
||||
|
||||
char audioPacket[MAX_PACKET_SIZE];
|
||||
QDataStream packetStream(&audioPacket, QIODevice::Append);
|
||||
|
||||
// pack header
|
||||
int numBytesPacketHeader = populatePacketHeader(audioPacket, silentFrame
|
||||
? PacketTypeSilentAudioFrame
|
||||
: PacketTypeMicrophoneAudioNoEcho);
|
||||
char* dataAt = audioPacket + numBytesPacketHeader;
|
||||
|
||||
// skip over sequence number for now; will be packed when destination node is known
|
||||
char* sequenceAt = dataAt;
|
||||
dataAt += sizeof(quint16);
|
||||
// pack a placeholder value for sequence number for now, will be packed when destination node is known
|
||||
int numPreSequenceNumberBytes = audioPacket.size();
|
||||
packetStream << (quint16)0;
|
||||
|
||||
// use the orientation and position of this avatar for the source of this audio
|
||||
memcpy(dataAt, &_avatarData->getPosition(), sizeof(glm::vec3));
|
||||
dataAt += sizeof(glm::vec3);
|
||||
|
||||
packetStream.writeRawData(reinterpret_cast<const char*>(&_avatarData->getPosition()), sizeof(glm::vec3));
|
||||
glm::quat headOrientation = _avatarData->getHeadOrientation();
|
||||
memcpy(dataAt, &headOrientation, sizeof(glm::quat));
|
||||
dataAt += sizeof(glm::quat);
|
||||
packetStream.writeRawData(reinterpret_cast<const char*>(&headOrientation), sizeof(glm::quat));
|
||||
|
||||
if (silentFrame) {
|
||||
if (!_isListeningToAudioStream) {
|
||||
// if we have a silent frame and we're not listening then just send nothing and break out of here
|
||||
break;
|
||||
}
|
||||
|
||||
// write the number of silent samples so the audio-mixer can uphold timing
|
||||
memcpy(dataAt, &SCRIPT_AUDIO_BUFFER_SAMPLES, sizeof(int16_t));
|
||||
dataAt += sizeof(int16_t);
|
||||
packetStream.writeRawData(reinterpret_cast<const char*>(&SCRIPT_AUDIO_BUFFER_SAMPLES), sizeof(int16_t));
|
||||
} else if (nextSoundOutput) {
|
||||
// write the raw audio data
|
||||
int numAvailableBytes = numAvailableSamples * sizeof(int16_t);
|
||||
memcpy(dataAt, nextSoundOutput, numAvailableBytes);
|
||||
dataAt += numAvailableBytes;
|
||||
packetStream.writeRawData(reinterpret_cast<const char*>(nextSoundOutput),
|
||||
numAvailableSamples * sizeof(int16_t));
|
||||
}
|
||||
|
||||
// write audio packet to AudioMixer nodes
|
||||
int audioPacketSize = dataAt - audioPacket;
|
||||
NodeList* nodeList = NodeList::getInstance();
|
||||
foreach(const SharedNodePointer& node, nodeList->getNodeHash()) {
|
||||
// only send to nodes of type AudioMixer
|
||||
if (node->getType() == NodeType::AudioMixer) {
|
||||
// pack sequence number
|
||||
quint16 sequence = _outgoingScriptAudioSequenceNumbers[node->getUUID()]++;
|
||||
memcpy(sequenceAt, &sequence, sizeof(quint16));
|
||||
|
||||
memcpy(audioPacket.data() + numPreSequenceNumberBytes, &sequence, sizeof(quint16));
|
||||
|
||||
// send audio packet
|
||||
nodeList->writeDatagram(audioPacket, audioPacketSize, node);
|
||||
nodeList->writeDatagram(audioPacket, node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue