From 145b7f8a0e27abc47d88dd4fc0fe92c12656b398 Mon Sep 17 00:00:00 2001 From: wangyix Date: Mon, 28 Jul 2014 14:05:17 -0700 Subject: [PATCH] got Preferences jitter buffer frames override working --- interface/src/DatagramProcessor.cpp | 2 +- interface/src/Menu.cpp | 6 +++--- interface/src/Menu.h | 6 +++--- interface/src/ui/PreferencesDialog.cpp | 10 +++++++--- interface/src/ui/Stats.cpp | 5 ++--- libraries/audio/src/InboundAudioStream.h | 2 ++ 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/interface/src/DatagramProcessor.cpp b/interface/src/DatagramProcessor.cpp index 6c39994bf3..8fda094f42 100644 --- a/interface/src/DatagramProcessor.cpp +++ b/interface/src/DatagramProcessor.cpp @@ -48,7 +48,7 @@ void DatagramProcessor::processDatagrams() { // only process this packet if we have a match on the packet version switch (packetTypeForPacket(incomingPacket)) { case PacketTypeMixedAudio: - QMetaObject::invokeMethod(&application->_audio, "addReceivedAudioToBuffer", Qt::QueuedConnection, + QMetaObject::invokeMethod(&application->_audio, "addReceivedAudioToStream", Qt::QueuedConnection, Q_ARG(QByteArray, incomingPacket)); break; case PacketTypeAudioStreamStats: diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index f0fcc20201..fb1bbd07cf 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -82,7 +82,7 @@ const int CONSOLE_HEIGHT = 200; Menu::Menu() : _actionHash(), - _audioJitterBufferSamples(0), + _audioJitterBufferFrames(0), _bandwidthDialog(NULL), _fieldOfView(DEFAULT_FIELD_OF_VIEW_DEGREES), _realWorldFieldOfView(DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES), @@ -627,7 +627,7 @@ void Menu::loadSettings(QSettings* settings) { lockedSettings = true; } - _audioJitterBufferSamples = loadSetting(settings, "audioJitterBufferSamples", 0); + _audioJitterBufferFrames = loadSetting(settings, "audioJitterBufferFrames", 0); _fieldOfView = loadSetting(settings, "fieldOfView", DEFAULT_FIELD_OF_VIEW_DEGREES); _realWorldFieldOfView = loadSetting(settings, "realWorldFieldOfView", DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES); _faceshiftEyeDeflection = loadSetting(settings, "faceshiftEyeDeflection", DEFAULT_FACESHIFT_EYE_DEFLECTION); @@ -677,7 +677,7 @@ void Menu::saveSettings(QSettings* settings) { lockedSettings = true; } - settings->setValue("audioJitterBufferSamples", _audioJitterBufferSamples); + settings->setValue("audioJitterBufferFrames", _audioJitterBufferFrames); settings->setValue("fieldOfView", _fieldOfView); settings->setValue("faceshiftEyeDeflection", _faceshiftEyeDeflection); settings->setValue("maxVoxels", _maxVoxels); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 81dd26dc01..6d5ad4e78c 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -85,8 +85,8 @@ public: void triggerOption(const QString& menuOption); QAction* getActionForOption(const QString& menuOption); - float getAudioJitterBufferSamples() const { return _audioJitterBufferSamples; } - void setAudioJitterBufferSamples(float audioJitterBufferSamples) { _audioJitterBufferSamples = audioJitterBufferSamples; } + float getAudioJitterBufferFrames() const { return _audioJitterBufferFrames; } + void setAudioJitterBufferFrames(float audioJitterBufferSamples) { _audioJitterBufferFrames = audioJitterBufferSamples; } float getFieldOfView() const { return _fieldOfView; } void setFieldOfView(float fieldOfView) { _fieldOfView = fieldOfView; } float getRealWorldFieldOfView() const { return _realWorldFieldOfView; } @@ -257,7 +257,7 @@ private: QHash _actionHash; - int _audioJitterBufferSamples; /// number of extra samples to wait before starting audio playback + int _audioJitterBufferFrames; /// number of extra samples to wait before starting audio playback BandwidthDialog* _bandwidthDialog; 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 diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 01e80ae5e5..6f87b08093 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -149,7 +149,7 @@ void PreferencesDialog::loadPreferences() { ui.faceshiftEyeDeflectionSider->setValue(menuInstance->getFaceshiftEyeDeflection() * ui.faceshiftEyeDeflectionSider->maximum()); - ui.audioJitterSpin->setValue(menuInstance->getAudioJitterBufferSamples()); + ui.audioJitterSpin->setValue(menuInstance->getAudioJitterBufferFrames()); ui.realWorldFieldOfViewSpin->setValue(menuInstance->getRealWorldFieldOfView()); @@ -239,8 +239,12 @@ void PreferencesDialog::savePreferences() { Menu::getInstance()->setInvertSixenseButtons(ui.invertSixenseButtonsCheckBox->isChecked()); - Menu::getInstance()->setAudioJitterBufferSamples(ui.audioJitterSpin->value()); - Application::getInstance()->getAudio()->setJitterBufferSamples(ui.audioJitterSpin->value()); + Menu::getInstance()->setAudioJitterBufferFrames(ui.audioJitterSpin->value()); + if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) { + Application::getInstance()->getAudio()->overrideDesiredJitterBufferFramesTo(ui.audioJitterSpin->value()); + } else { + Application::getInstance()->getAudio()->unoverrideDesiredJitterBufferFrames(); + } Application::getInstance()->resizeGL(Application::getInstance()->getGLWidget()->width(), Application::getInstance()->getGLWidget()->height()); diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index 77598e0c5e..15e441c638 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -285,9 +285,8 @@ void Stats::display( char audioJitter[30]; sprintf(audioJitter, - "Buffer msecs %.1f", - (float) (audio->getNetworkBufferLengthSamplesPerChannel() + (float) audio->getJitterBufferSamples()) / - (float) audio->getNetworkSampleRate() * 1000.f); + "Buffer msecs %.1f", + audio->getDesiredJitterBufferFrames() * BUFFER_SEND_INTERVAL_USECS / (float)USECS_PER_MSEC); drawText(30, glWidget->height() - 22, scale, rotation, font, audioJitter, color); diff --git a/libraries/audio/src/InboundAudioStream.h b/libraries/audio/src/InboundAudioStream.h index 82ebbc5ab0..958491bca1 100644 --- a/libraries/audio/src/InboundAudioStream.h +++ b/libraries/audio/src/InboundAudioStream.h @@ -64,6 +64,7 @@ public: /// turns off dyanmic jitter buffers and sets the desired jitter buffer frames to specified value void overrideDesiredJitterBufferFramesTo(int desired); + void unoverrideDesiredJitterBufferFrames(); /// this function should be called once per second to ensure the seq num stats history spans ~30 seconds AudioStreamStats updateSeqHistoryAndGetAudioStreamStats(); @@ -124,6 +125,7 @@ protected: AudioRingBuffer::ConstIterator _lastPopOutput; bool _dynamicJitterBuffers; + bool _dynamicJitterBuffersOverride; bool _useStDevForJitterCalc; int _calculatedJitterBufferFramesUsingMaxGap;