mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 18:41:10 +02:00
maxFramesOverDesired added; settable from domain page and preferences
This commit is contained in:
parent
bb2adb2721
commit
d49970d010
22 changed files with 149 additions and 22 deletions
|
@ -36,7 +36,7 @@ Agent::Agent(const QByteArray& packet) :
|
||||||
_voxelEditSender(),
|
_voxelEditSender(),
|
||||||
_particleEditSender(),
|
_particleEditSender(),
|
||||||
_modelEditSender(),
|
_modelEditSender(),
|
||||||
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 1, false),
|
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 1, false, 0),
|
||||||
_avatarHashMap()
|
_avatarHashMap()
|
||||||
{
|
{
|
||||||
// be the parent of the script engine so it gets moved when we do
|
// be the parent of the script engine so it gets moved when we do
|
||||||
|
|
|
@ -68,6 +68,7 @@ void attachNewNodeDataToNode(Node *newNode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioMixer::_useDynamicJitterBuffers = false;
|
bool AudioMixer::_useDynamicJitterBuffers = false;
|
||||||
|
int AudioMixer::_maxFramesOverDesired = 20;
|
||||||
|
|
||||||
AudioMixer::AudioMixer(const QByteArray& packet) :
|
AudioMixer::AudioMixer(const QByteArray& packet) :
|
||||||
ThreadedAssignment(packet),
|
ThreadedAssignment(packet),
|
||||||
|
@ -469,6 +470,10 @@ void AudioMixer::run() {
|
||||||
qDebug() << "Dynamic jitter buffers disabled, using old behavior.";
|
qDebug() << "Dynamic jitter buffers disabled, using old behavior.";
|
||||||
_useDynamicJitterBuffers = false;
|
_useDynamicJitterBuffers = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QString MAX_FRAMES_OVER_DESIRED_JSON_KEY = "max-frames-over-desired";
|
||||||
|
_maxFramesOverDesired = audioGroupObject[MAX_FRAMES_OVER_DESIRED_JSON_KEY].toString().toInt();
|
||||||
|
qDebug() << "Max frames over desired:" << _maxFramesOverDesired;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nextFrame = 0;
|
int nextFrame = 0;
|
||||||
|
|
|
@ -38,6 +38,7 @@ public slots:
|
||||||
void sendStatsPacket();
|
void sendStatsPacket();
|
||||||
|
|
||||||
static bool getUseDynamicJitterBuffers() { return _useDynamicJitterBuffers; }
|
static bool getUseDynamicJitterBuffers() { return _useDynamicJitterBuffers; }
|
||||||
|
static int getMaxFramesOverDesired() { return _maxFramesOverDesired; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// adds one stream to the mix for a listening node
|
/// adds one stream to the mix for a listening node
|
||||||
|
@ -59,7 +60,9 @@ private:
|
||||||
int _sumMixes;
|
int _sumMixes;
|
||||||
AABox* _sourceUnattenuatedZone;
|
AABox* _sourceUnattenuatedZone;
|
||||||
AABox* _listenerUnattenuatedZone;
|
AABox* _listenerUnattenuatedZone;
|
||||||
|
|
||||||
static bool _useDynamicJitterBuffers;
|
static bool _useDynamicJitterBuffers;
|
||||||
|
static int _maxFramesOverDesired;
|
||||||
|
|
||||||
quint64 _lastSendAudioStreamStatsTime;
|
quint64 _lastSendAudioStreamStatsTime;
|
||||||
};
|
};
|
||||||
|
|
|
@ -74,7 +74,7 @@ int AudioMixerClientData::parseData(const QByteArray& packet) {
|
||||||
bool isStereo = channelFlag == 1;
|
bool isStereo = channelFlag == 1;
|
||||||
|
|
||||||
_audioStreams.insert(nullUUID,
|
_audioStreams.insert(nullUUID,
|
||||||
matchingStream = new AvatarAudioStream(isStereo, AudioMixer::getUseDynamicJitterBuffers()));
|
matchingStream = new AvatarAudioStream(isStereo, AudioMixer::getUseDynamicJitterBuffers(), AudioMixer::getMaxFramesOverDesired()));
|
||||||
} else {
|
} else {
|
||||||
matchingStream = _audioStreams.value(nullUUID);
|
matchingStream = _audioStreams.value(nullUUID);
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ int AudioMixerClientData::parseData(const QByteArray& packet) {
|
||||||
|
|
||||||
if (!_audioStreams.contains(streamIdentifier)) {
|
if (!_audioStreams.contains(streamIdentifier)) {
|
||||||
_audioStreams.insert(streamIdentifier,
|
_audioStreams.insert(streamIdentifier,
|
||||||
matchingStream = new InjectedAudioStream(streamIdentifier, AudioMixer::getUseDynamicJitterBuffers()));
|
matchingStream = new InjectedAudioStream(streamIdentifier, AudioMixer::getUseDynamicJitterBuffers(), AudioMixer::getMaxFramesOverDesired()));
|
||||||
} else {
|
} else {
|
||||||
matchingStream = _audioStreams.value(streamIdentifier);
|
matchingStream = _audioStreams.value(streamIdentifier);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
|
|
||||||
#include "AvatarAudioStream.h"
|
#include "AvatarAudioStream.h"
|
||||||
|
|
||||||
AvatarAudioStream::AvatarAudioStream(bool isStereo, bool dynamicJitterBuffer) :
|
AvatarAudioStream::AvatarAudioStream(bool isStereo, bool dynamicJitterBuffer, int maxFramesOverDesired) :
|
||||||
PositionalAudioStream(PositionalAudioStream::Microphone, isStereo, dynamicJitterBuffer)
|
PositionalAudioStream(PositionalAudioStream::Microphone, isStereo, dynamicJitterBuffer, maxFramesOverDesired)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
class AvatarAudioStream : public PositionalAudioStream {
|
class AvatarAudioStream : public PositionalAudioStream {
|
||||||
public:
|
public:
|
||||||
AvatarAudioStream(bool isStereo = false, bool dynamicJitterBuffer = false);
|
AvatarAudioStream(bool isStereo, bool dynamicJitterBuffer, int maxFramesOverDesired);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// disallow copying of AvatarAudioStream objects
|
// disallow copying of AvatarAudioStream objects
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
"help": "Boxes for source and listener (corner x, corner y, corner z, size x, size y, size z, corner x, corner y, corner z, size x, size y, size z)",
|
"help": "Boxes for source and listener (corner x, corner y, corner z, size x, size y, size z, corner x, corner y, corner z, size x, size y, size z)",
|
||||||
"placeholder": "no zone",
|
"placeholder": "no zone",
|
||||||
"default": ""
|
"default": ""
|
||||||
|
},
|
||||||
|
"max-frames-over-desired": {
|
||||||
|
"label": "Max Frames Over Desired",
|
||||||
|
"help": "The highest number of frames an AudioMixer's ringbuffer can exceed the desired jitter buffer frames by",
|
||||||
|
"placeholder": "20",
|
||||||
|
"default": ""
|
||||||
},
|
},
|
||||||
"dynamic-jitter-buffer": {
|
"dynamic-jitter-buffer": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
|
|
|
@ -1711,6 +1711,9 @@ void Application::init() {
|
||||||
if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) {
|
if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) {
|
||||||
_audio.overrideDesiredJitterBufferFramesTo(Menu::getInstance()->getAudioJitterBufferFrames());
|
_audio.overrideDesiredJitterBufferFramesTo(Menu::getInstance()->getAudioJitterBufferFrames());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_audio.setMaxFramesOverDesired(Menu::getInstance()->getMaxFramesOverDesired());
|
||||||
|
|
||||||
qDebug("Loaded settings");
|
qDebug("Loaded settings");
|
||||||
|
|
||||||
// initialize our face trackers after loading the menu settings
|
// initialize our face trackers after loading the menu settings
|
||||||
|
|
|
@ -76,9 +76,9 @@ Audio::Audio(QObject* parent) :
|
||||||
// this delay will slowly add up and the longer someone runs, they more delayed their audio will be.
|
// this delay will slowly add up and the longer someone runs, they more delayed their audio will be.
|
||||||
_inputRingBuffer(0),
|
_inputRingBuffer(0),
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 100, true, true),
|
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 100, true, 20, true),
|
||||||
#else
|
#else
|
||||||
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 10, true, true), // DO NOT CHANGE THIS UNLESS YOU SOLVE THE AUDIO DEVICE DRIFT PROBLEM!!!
|
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 10, true, 20, true), // DO NOT CHANGE THIS UNLESS YOU SOLVE THE AUDIO DEVICE DRIFT PROBLEM!!!
|
||||||
#endif
|
#endif
|
||||||
_isStereoInput(false),
|
_isStereoInput(false),
|
||||||
_averagedLatency(0.0),
|
_averagedLatency(0.0),
|
||||||
|
|
|
@ -59,6 +59,9 @@ public:
|
||||||
|
|
||||||
void overrideDesiredJitterBufferFramesTo(int desired) { _receivedAudioStream.overrideDesiredJitterBufferFramesTo(desired); }
|
void overrideDesiredJitterBufferFramesTo(int desired) { _receivedAudioStream.overrideDesiredJitterBufferFramesTo(desired); }
|
||||||
void unoverrideDesiredJitterBufferFrames() { _receivedAudioStream.unoverrideDesiredJitterBufferFrames(); }
|
void unoverrideDesiredJitterBufferFrames() { _receivedAudioStream.unoverrideDesiredJitterBufferFrames(); }
|
||||||
|
|
||||||
|
void setMaxFramesOverDesired(int maxFramesOverDesired) { _receivedAudioStream.setMaxFramesOverDesired(maxFramesOverDesired); }
|
||||||
|
|
||||||
int getDesiredJitterBufferFrames() const { return _receivedAudioStream.getDesiredJitterBufferFrames(); }
|
int getDesiredJitterBufferFrames() const { return _receivedAudioStream.getDesiredJitterBufferFrames(); }
|
||||||
|
|
||||||
float getCollisionSoundMagnitude() { return _collisionSoundMagnitude; }
|
float getCollisionSoundMagnitude() { return _collisionSoundMagnitude; }
|
||||||
|
|
|
@ -83,6 +83,7 @@ const int CONSOLE_HEIGHT = 200;
|
||||||
Menu::Menu() :
|
Menu::Menu() :
|
||||||
_actionHash(),
|
_actionHash(),
|
||||||
_audioJitterBufferFrames(0),
|
_audioJitterBufferFrames(0),
|
||||||
|
_maxFramesOverDesired(0),
|
||||||
_bandwidthDialog(NULL),
|
_bandwidthDialog(NULL),
|
||||||
_fieldOfView(DEFAULT_FIELD_OF_VIEW_DEGREES),
|
_fieldOfView(DEFAULT_FIELD_OF_VIEW_DEGREES),
|
||||||
_realWorldFieldOfView(DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES),
|
_realWorldFieldOfView(DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES),
|
||||||
|
@ -628,6 +629,7 @@ void Menu::loadSettings(QSettings* settings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_audioJitterBufferFrames = loadSetting(settings, "audioJitterBufferFrames", 0);
|
_audioJitterBufferFrames = loadSetting(settings, "audioJitterBufferFrames", 0);
|
||||||
|
_maxFramesOverDesired = loadSetting(settings, "maxFramesOverDesired", 0);
|
||||||
_fieldOfView = loadSetting(settings, "fieldOfView", DEFAULT_FIELD_OF_VIEW_DEGREES);
|
_fieldOfView = loadSetting(settings, "fieldOfView", DEFAULT_FIELD_OF_VIEW_DEGREES);
|
||||||
_realWorldFieldOfView = loadSetting(settings, "realWorldFieldOfView", DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES);
|
_realWorldFieldOfView = loadSetting(settings, "realWorldFieldOfView", DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES);
|
||||||
_faceshiftEyeDeflection = loadSetting(settings, "faceshiftEyeDeflection", DEFAULT_FACESHIFT_EYE_DEFLECTION);
|
_faceshiftEyeDeflection = loadSetting(settings, "faceshiftEyeDeflection", DEFAULT_FACESHIFT_EYE_DEFLECTION);
|
||||||
|
@ -678,6 +680,7 @@ void Menu::saveSettings(QSettings* settings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
settings->setValue("audioJitterBufferFrames", _audioJitterBufferFrames);
|
settings->setValue("audioJitterBufferFrames", _audioJitterBufferFrames);
|
||||||
|
settings->setValue("maxFramesOverDesired", _maxFramesOverDesired);
|
||||||
settings->setValue("fieldOfView", _fieldOfView);
|
settings->setValue("fieldOfView", _fieldOfView);
|
||||||
settings->setValue("faceshiftEyeDeflection", _faceshiftEyeDeflection);
|
settings->setValue("faceshiftEyeDeflection", _faceshiftEyeDeflection);
|
||||||
settings->setValue("maxVoxels", _maxVoxels);
|
settings->setValue("maxVoxels", _maxVoxels);
|
||||||
|
|
|
@ -87,6 +87,8 @@ public:
|
||||||
|
|
||||||
float getAudioJitterBufferFrames() const { return _audioJitterBufferFrames; }
|
float getAudioJitterBufferFrames() const { return _audioJitterBufferFrames; }
|
||||||
void setAudioJitterBufferFrames(float audioJitterBufferSamples) { _audioJitterBufferFrames = audioJitterBufferSamples; }
|
void setAudioJitterBufferFrames(float audioJitterBufferSamples) { _audioJitterBufferFrames = audioJitterBufferSamples; }
|
||||||
|
int getMaxFramesOverDesired() const { return _maxFramesOverDesired; }
|
||||||
|
void setMaxFramesOverDesired(int maxFramesOverDesired) { _maxFramesOverDesired = maxFramesOverDesired; }
|
||||||
float getFieldOfView() const { return _fieldOfView; }
|
float getFieldOfView() const { return _fieldOfView; }
|
||||||
void setFieldOfView(float fieldOfView) { _fieldOfView = fieldOfView; }
|
void setFieldOfView(float fieldOfView) { _fieldOfView = fieldOfView; }
|
||||||
float getRealWorldFieldOfView() const { return _realWorldFieldOfView; }
|
float getRealWorldFieldOfView() const { return _realWorldFieldOfView; }
|
||||||
|
@ -258,6 +260,7 @@ private:
|
||||||
|
|
||||||
QHash<QString, QAction*> _actionHash;
|
QHash<QString, QAction*> _actionHash;
|
||||||
int _audioJitterBufferFrames; /// number of extra samples to wait before starting audio playback
|
int _audioJitterBufferFrames; /// number of extra samples to wait before starting audio playback
|
||||||
|
int _maxFramesOverDesired;
|
||||||
BandwidthDialog* _bandwidthDialog;
|
BandwidthDialog* _bandwidthDialog;
|
||||||
float _fieldOfView; /// in Degrees, doesn't apply to HMD like Oculus
|
float _fieldOfView; /// in Degrees, doesn't apply to HMD like Oculus
|
||||||
float _realWorldFieldOfView; // The actual FOV set by the user's monitor size and view distance
|
float _realWorldFieldOfView; // The actual FOV set by the user's monitor size and view distance
|
||||||
|
|
|
@ -151,6 +151,8 @@ void PreferencesDialog::loadPreferences() {
|
||||||
|
|
||||||
ui.audioJitterSpin->setValue(menuInstance->getAudioJitterBufferFrames());
|
ui.audioJitterSpin->setValue(menuInstance->getAudioJitterBufferFrames());
|
||||||
|
|
||||||
|
ui.maxFramesOverDesiredSpin->setValue(menuInstance->getMaxFramesOverDesired());
|
||||||
|
|
||||||
ui.realWorldFieldOfViewSpin->setValue(menuInstance->getRealWorldFieldOfView());
|
ui.realWorldFieldOfViewSpin->setValue(menuInstance->getRealWorldFieldOfView());
|
||||||
|
|
||||||
ui.fieldOfViewSpin->setValue(menuInstance->getFieldOfView());
|
ui.fieldOfViewSpin->setValue(menuInstance->getFieldOfView());
|
||||||
|
@ -241,11 +243,14 @@ void PreferencesDialog::savePreferences() {
|
||||||
|
|
||||||
Menu::getInstance()->setAudioJitterBufferFrames(ui.audioJitterSpin->value());
|
Menu::getInstance()->setAudioJitterBufferFrames(ui.audioJitterSpin->value());
|
||||||
if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) {
|
if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) {
|
||||||
Application::getInstance()->getAudio()->overrideDesiredJitterBufferFramesTo(ui.audioJitterSpin->value());
|
Application::getInstance()->getAudio()->overrideDesiredJitterBufferFramesTo(Menu::getInstance()->getAudioJitterBufferFrames());
|
||||||
} else {
|
} else {
|
||||||
Application::getInstance()->getAudio()->unoverrideDesiredJitterBufferFrames();
|
Application::getInstance()->getAudio()->unoverrideDesiredJitterBufferFrames();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Menu::getInstance()->setMaxFramesOverDesired(ui.maxFramesOverDesiredSpin->value());
|
||||||
|
Application::getInstance()->getAudio()->setMaxFramesOverDesired(Menu::getInstance()->getMaxFramesOverDesired());
|
||||||
|
|
||||||
Application::getInstance()->resizeGL(Application::getInstance()->getGLWidget()->width(),
|
Application::getInstance()->resizeGL(Application::getInstance()->getGLWidget()->width(),
|
||||||
Application::getInstance()->getGLWidget()->height());
|
Application::getInstance()->getGLWidget()->height());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1543,7 +1543,7 @@ padding: 10px;margin-top:10px</string>
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>-10000</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>10000</number>
|
<number>10000</number>
|
||||||
|
@ -1555,6 +1555,99 @@ padding: 10px;margin-top:10px</string>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_13">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<item alignment="Qt::AlignLeft">
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Arial</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">color: rgb(51, 51, 51)</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Max Frames Over Desired</string>
|
||||||
|
</property>
|
||||||
|
<property name="indent">
|
||||||
|
<number>15</number>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>maxFramesOverDesiredSpin</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_12">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Arial</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="maxFramesOverDesiredSpin">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>95</width>
|
||||||
|
<height>36</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>70</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Arial</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>10000</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "PacketHeaders.h"
|
#include "PacketHeaders.h"
|
||||||
|
|
||||||
InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacity,
|
InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacity,
|
||||||
bool dynamicJitterBuffers, /*int maxFramesOverDesired,*/ bool useStDevForJitterCalc) :
|
bool dynamicJitterBuffers, int maxFramesOverDesired, bool useStDevForJitterCalc) :
|
||||||
_ringBuffer(numFrameSamples, false, numFramesCapacity),
|
_ringBuffer(numFrameSamples, false, numFramesCapacity),
|
||||||
_lastPopSucceeded(false),
|
_lastPopSucceeded(false),
|
||||||
_lastPopOutput(),
|
_lastPopOutput(),
|
||||||
|
@ -23,7 +23,7 @@ InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacit
|
||||||
_calculatedJitterBufferFramesUsingMaxGap(0),
|
_calculatedJitterBufferFramesUsingMaxGap(0),
|
||||||
_calculatedJitterBufferFramesUsingStDev(0),
|
_calculatedJitterBufferFramesUsingStDev(0),
|
||||||
_desiredJitterBufferFrames(1),
|
_desiredJitterBufferFrames(1),
|
||||||
_maxFramesOverDesired(20),//maxFramesOverDesired), // PLACEHOLDER!!!!!!!!!
|
_maxFramesOverDesired(maxFramesOverDesired),
|
||||||
_isStarved(true),
|
_isStarved(true),
|
||||||
_hasStarted(false),
|
_hasStarted(false),
|
||||||
_consecutiveNotMixedCount(0),
|
_consecutiveNotMixedCount(0),
|
||||||
|
|
|
@ -50,7 +50,7 @@ class InboundAudioStream : public NodeData {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
InboundAudioStream(int numFrameSamples, int numFramesCapacity,
|
InboundAudioStream(int numFrameSamples, int numFramesCapacity,
|
||||||
bool dynamicJitterBuffers, //int maxFramesOverDesired,
|
bool dynamicJitterBuffers, int maxFramesOverDesired,
|
||||||
bool useStDevForJitterCalc = false);
|
bool useStDevForJitterCalc = false);
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
|
@ -75,6 +75,8 @@ public:
|
||||||
/// this function should be called once per second to ensure the seq num stats history spans ~30 seconds
|
/// this function should be called once per second to ensure the seq num stats history spans ~30 seconds
|
||||||
AudioStreamStats updateSeqHistoryAndGetAudioStreamStats();
|
AudioStreamStats updateSeqHistoryAndGetAudioStreamStats();
|
||||||
|
|
||||||
|
void setMaxFramesOverDesired(int maxFramesOverDesired) { _maxFramesOverDesired = maxFramesOverDesired; }
|
||||||
|
|
||||||
virtual AudioStreamStats getAudioStreamStats() const;
|
virtual AudioStreamStats getAudioStreamStats() const;
|
||||||
|
|
||||||
/// returns the desired number of jitter buffer frames under the dyanmic jitter buffers scheme
|
/// returns the desired number of jitter buffer frames under the dyanmic jitter buffers scheme
|
||||||
|
@ -88,6 +90,7 @@ public:
|
||||||
int getCalculatedJitterBufferFramesUsingMaxGap() const { return _calculatedJitterBufferFramesUsingMaxGap; }
|
int getCalculatedJitterBufferFramesUsingMaxGap() const { return _calculatedJitterBufferFramesUsingMaxGap; }
|
||||||
|
|
||||||
int getDesiredJitterBufferFrames() const { return _desiredJitterBufferFrames; }
|
int getDesiredJitterBufferFrames() const { return _desiredJitterBufferFrames; }
|
||||||
|
int getMaxFramesOverDesired() const { return _maxFramesOverDesired; }
|
||||||
int getNumFrameSamples() const { return _ringBuffer.getNumFrameSamples(); }
|
int getNumFrameSamples() const { return _ringBuffer.getNumFrameSamples(); }
|
||||||
int getFrameCapacity() const { return _ringBuffer.getFrameCapacity(); }
|
int getFrameCapacity() const { return _ringBuffer.getFrameCapacity(); }
|
||||||
int getFramesAvailable() const { return _ringBuffer.framesAvailable(); }
|
int getFramesAvailable() const { return _ringBuffer.framesAvailable(); }
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
|
|
||||||
#include "InjectedAudioStream.h"
|
#include "InjectedAudioStream.h"
|
||||||
|
|
||||||
InjectedAudioStream::InjectedAudioStream(const QUuid& streamIdentifier, bool dynamicJitterBuffer) :
|
InjectedAudioStream::InjectedAudioStream(const QUuid& streamIdentifier, bool dynamicJitterBuffer, int maxFramesOverDesired) :
|
||||||
PositionalAudioStream(PositionalAudioStream::Injector, false, dynamicJitterBuffer),
|
PositionalAudioStream(PositionalAudioStream::Injector, false, dynamicJitterBuffer, maxFramesOverDesired),
|
||||||
_streamIdentifier(streamIdentifier),
|
_streamIdentifier(streamIdentifier),
|
||||||
_radius(0.0f),
|
_radius(0.0f),
|
||||||
_attenuationRatio(0)
|
_attenuationRatio(0)
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
class InjectedAudioStream : public PositionalAudioStream {
|
class InjectedAudioStream : public PositionalAudioStream {
|
||||||
public:
|
public:
|
||||||
InjectedAudioStream(const QUuid& streamIdentifier = QUuid(), bool dynamicJitterBuffer = false);
|
InjectedAudioStream(const QUuid& streamIdentifier, bool dynamicJitterBuffer, int maxFramesOverDesired);
|
||||||
|
|
||||||
float getRadius() const { return _radius; }
|
float getRadius() const { return _radius; }
|
||||||
float getAttenuationRatio() const { return _attenuationRatio; }
|
float getAttenuationRatio() const { return _attenuationRatio; }
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
#include "MixedAudioStream.h"
|
#include "MixedAudioStream.h"
|
||||||
|
|
||||||
MixedAudioStream::MixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers, bool useStDevForJitterCalc)
|
MixedAudioStream::MixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers, int maxFramesOverDesired, bool useStDevForJitterCalc)
|
||||||
: InboundAudioStream(numFrameSamples, numFramesCapacity, dynamicJitterBuffers, useStDevForJitterCalc)
|
: InboundAudioStream(numFrameSamples, numFramesCapacity, dynamicJitterBuffers, maxFramesOverDesired, useStDevForJitterCalc)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
class MixedAudioStream : public InboundAudioStream {
|
class MixedAudioStream : public InboundAudioStream {
|
||||||
public:
|
public:
|
||||||
MixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers, bool useStDevForJitterCalc = false);
|
MixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers, int maxFramesOverDesired, bool useStDevForJitterCalc = false);
|
||||||
|
|
||||||
float getNextOutputFrameLoudness() const { return _ringBuffer.getNextOutputFrameLoudness(); }
|
float getNextOutputFrameLoudness() const { return _ringBuffer.getNextOutputFrameLoudness(); }
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,9 @@
|
||||||
#include <PacketHeaders.h>
|
#include <PacketHeaders.h>
|
||||||
#include <UUID.h>
|
#include <UUID.h>
|
||||||
|
|
||||||
PositionalAudioStream::PositionalAudioStream(PositionalAudioStream::Type type, bool isStereo, bool dynamicJitterBuffers) :
|
PositionalAudioStream::PositionalAudioStream(PositionalAudioStream::Type type, bool isStereo, bool dynamicJitterBuffers, int maxFramesOverDesired) :
|
||||||
InboundAudioStream(isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL,
|
InboundAudioStream(isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL,
|
||||||
AUDIOMIXER_INBOUND_RING_BUFFER_FRAME_CAPACITY, dynamicJitterBuffers),
|
AUDIOMIXER_INBOUND_RING_BUFFER_FRAME_CAPACITY, dynamicJitterBuffers, maxFramesOverDesired),
|
||||||
_type(type),
|
_type(type),
|
||||||
_position(0.0f, 0.0f, 0.0f),
|
_position(0.0f, 0.0f, 0.0f),
|
||||||
_orientation(0.0f, 0.0f, 0.0f, 0.0f),
|
_orientation(0.0f, 0.0f, 0.0f, 0.0f),
|
||||||
|
|
|
@ -27,7 +27,7 @@ public:
|
||||||
Injector
|
Injector
|
||||||
};
|
};
|
||||||
|
|
||||||
PositionalAudioStream(PositionalAudioStream::Type type, bool isStereo = false, bool dynamicJitterBuffers = false);
|
PositionalAudioStream(PositionalAudioStream::Type type, bool isStereo, bool dynamicJitterBuffers, int maxFramesOverDesired);
|
||||||
|
|
||||||
virtual AudioStreamStats getAudioStreamStats() const;
|
virtual AudioStreamStats getAudioStreamStats() const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue