From b4638105e311c6b309980c39dff6c2fb05f19243 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Mon, 28 Nov 2016 18:40:11 -0500 Subject: [PATCH] expose audio mixer threads to gui --- assignment-client/src/audio/AudioMixer.cpp | 16 +++++++++++-- assignment-client/src/audio/AudioMixer.h | 2 +- .../resources/describe-settings.json | 23 +++++++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 50ef901c2d..a114f836b2 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -41,6 +41,7 @@ static const float DEFAULT_NOISE_MUTING_THRESHOLD = 0.003f; static const QString AUDIO_MIXER_LOGGING_TARGET_NAME = "audio-mixer"; static const QString AUDIO_ENV_GROUP_KEY = "audio_env"; static const QString AUDIO_BUFFER_GROUP_KEY = "audio_buffer"; +static const QString AUDIO_THREADING_GROUP_KEY = "audio_threading"; int AudioMixer::_numStaticJitterFrames{ -1 }; float AudioMixer::_noiseMutingThreshold{ DEFAULT_NOISE_MUTING_THRESHOLD }; @@ -368,11 +369,11 @@ void AudioMixer::start() { }); // mix across slave threads - slavePool.mix(nodes, frame); + _slavePool.mix(nodes, frame); } // gather stats - slavePool.each([&](AudioMixerSlave& slave) { + _slavePool.each([&](AudioMixerSlave& slave) { _stats.accumulate(slave.stats); slave.stats.reset(); }); @@ -469,6 +470,17 @@ int AudioMixer::prepareFrame(const SharedNodePointer& node, unsigned int frame) } void AudioMixer::parseSettingsObject(const QJsonObject &settingsObject) { + if (settingsObject.contains(AUDIO_THREADING_GROUP_KEY)) { + QJsonObject audioThreadingGroupObject = settingsObject[AUDIO_THREADING_GROUP_KEY].toObject(); + const QString AUTO_THREADS = "auto_threads"; + bool autoThreads = audioThreadingGroupObject[AUTO_THREADS].toBool(); + if (!autoThreads) { + const QString NUM_THREADS = "num_threads"; + int numThreads = audioThreadingGroupObject[NUM_THREADS].toInt(); + _slavePool.setNumThreads(numThreads); + } + } + if (settingsObject.contains(AUDIO_BUFFER_GROUP_KEY)) { QJsonObject audioBufferGroupObject = settingsObject[AUDIO_BUFFER_GROUP_KEY].toObject(); diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index c1811b6655..7a4a84e61f 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -88,7 +88,7 @@ private: QString _codecPreferenceOrder; - AudioMixerSlavePool slavePool; + AudioMixerSlavePool _slavePool; static int _numStaticJitterFrames; // -1 denotes dynamic jitter buffering static float _noiseMutingThreshold; diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 8cd9136895..2c9bf3ed4a 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -978,6 +978,29 @@ } ] }, + { + "name": "audio_threading", + "label": "Audio Threading", + "assignment-types": [0], + "settings": [ + { + "name": "auto_threads", + "label": "Automatically determine thread count", + "type": "checkbox", + "help": "Allow system to determine number of threads (recommended)", + "default": true, + "advanced": true + }, + { + "name": "num_threads", + "label": "Number of Threads", + "help": "Threads to spin up for audio mixing (if not automatically set)", + "placeholder": "1", + "default": "1", + "advanced": true + } + ] + }, { "name": "audio_env", "label": "Audio Environment",