mirror of
https://github.com/overte-org/overte.git
synced 2025-04-07 08:12:53 +02:00
fixed issues related to context switching and selection with hmd
This commit is contained in:
parent
39e1092660
commit
4b4b722875
2 changed files with 21 additions and 33 deletions
|
@ -69,18 +69,25 @@ static QString getTargetDevice(bool hmd, QAudio::Mode mode) {
|
|||
return deviceName;
|
||||
}
|
||||
|
||||
static QString getHmdAudioDeviceName(QAudio::Mode mode) {
|
||||
static void checkHmdDefaultsChange(QAudio::Mode mode) {
|
||||
QString name;
|
||||
foreach(DisplayPluginPointer displayPlugin, PluginManager::getInstance()->getAllDisplayPlugins()) {
|
||||
if (displayPlugin && displayPlugin->isHmd()) {
|
||||
if (mode == QAudio::AudioInput) {
|
||||
return displayPlugin->getPreferredAudioInDevice();
|
||||
name = displayPlugin->getPreferredAudioInDevice();
|
||||
} else {
|
||||
return displayPlugin->getPreferredAudioOutDevice();
|
||||
name = displayPlugin->getPreferredAudioOutDevice();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return QString();
|
||||
|
||||
if (!name.isEmpty()) {
|
||||
auto client = DependencyManager::get<AudioClient>().data();
|
||||
QMetaObject::invokeMethod(client, "setHmdAudioName",
|
||||
Q_ARG(QAudio::Mode, mode),
|
||||
Q_ARG(const QString&, name));
|
||||
}
|
||||
}
|
||||
|
||||
Qt::ItemFlags AudioDeviceList::_flags { Qt::ItemIsSelectable | Qt::ItemIsEnabled };
|
||||
|
@ -278,16 +285,8 @@ void AudioDeviceList::onDevicesChanged(QAudio::Mode mode, const QList<HifiAudioD
|
|||
QList<std::shared_ptr<AudioDevice>> newDevices;
|
||||
bool hmdIsSelected = false;
|
||||
bool desktopIsSelected = false;
|
||||
|
||||
QString name = getHmdAudioDeviceName(mode);
|
||||
if (!name.isEmpty()) {
|
||||
auto client = DependencyManager::get<AudioClient>().data();
|
||||
QMetaObject::invokeMethod(client, "setHmdAudioName",
|
||||
Q_ARG(QAudio::Mode, mode),
|
||||
Q_ARG(const QString&, name));
|
||||
}
|
||||
|
||||
|
||||
checkHmdDefaultsChange(mode);
|
||||
if (!_backupSelectedDesktopDeviceName.isEmpty() && !_backupSelectedHMDDeviceName.isEmpty()) {
|
||||
foreach(const HifiAudioDeviceInfo& deviceInfo, devices) {
|
||||
for (bool isHMD : {false, true}) {
|
||||
|
@ -441,6 +440,9 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) {
|
|||
connect(client, &AudioClient::deviceChanged, this, &AudioDevices::onDeviceChanged, Qt::QueuedConnection);
|
||||
connect(client, &AudioClient::devicesChanged, this, &AudioDevices::onDevicesChanged, Qt::QueuedConnection);
|
||||
connect(client, &AudioClient::peakValueListChanged, &_inputs, &AudioInputDeviceList::onPeakValueListChanged, Qt::QueuedConnection);
|
||||
|
||||
checkHmdDefaultsChange(QAudio::AudioInput);
|
||||
checkHmdDefaultsChange(QAudio::AudioOutput);
|
||||
|
||||
_inputs.onDeviceChanged(client->getActiveAudioDevice(QAudio::AudioInput), contextIsHMD);
|
||||
_outputs.onDeviceChanged(client->getActiveAudioDevice(QAudio::AudioOutput), contextIsHMD);
|
||||
|
@ -449,9 +451,11 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) {
|
|||
const QList<HifiAudioDeviceInfo>& devicesInput = client->getAudioDevices(QAudio::AudioInput);
|
||||
const QList<HifiAudioDeviceInfo>& devicesOutput = client->getAudioDevices(QAudio::AudioOutput);
|
||||
|
||||
//setup devices
|
||||
_inputs.onDevicesChanged(QAudio::AudioInput, devicesInput);
|
||||
_outputs.onDevicesChanged(QAudio::AudioOutput,devicesOutput);
|
||||
if (devicesInput.size() > 0 && devicesOutput.size() > 0) {
|
||||
//setup devices
|
||||
_inputs.onDevicesChanged(QAudio::AudioInput, devicesInput);
|
||||
_outputs.onDevicesChanged(QAudio::AudioOutput, devicesOutput);
|
||||
}
|
||||
}
|
||||
|
||||
AudioDevices::~AudioDevices() {}
|
||||
|
|
|
@ -791,23 +791,7 @@ void AudioClient::start() {
|
|||
outputName = _hmdOutputName;
|
||||
}
|
||||
|
||||
HifiAudioDeviceInfo inputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioInput, inputName);
|
||||
qCDebug(audioclient) << "The default audio input device is" << inputDeviceInfo.deviceName();
|
||||
bool inputFormatSupported = switchInputToAudioDevice(inputDeviceInfo);
|
||||
|
||||
HifiAudioDeviceInfo outputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioOutput, outputName);
|
||||
qCDebug(audioclient) << "The default audio output device is" << outputDeviceInfo.deviceName();
|
||||
bool outputFormatSupported = switchOutputToAudioDevice(outputDeviceInfo);
|
||||
|
||||
if (!inputFormatSupported) {
|
||||
qCDebug(audioclient) << "Unable to set up audio input because of a problem with input format.";
|
||||
qCDebug(audioclient) << "The closest format available is" << inputDeviceInfo.getDevice().nearestFormat(_desiredInputFormat);
|
||||
}
|
||||
|
||||
if (!outputFormatSupported) {
|
||||
qCDebug(audioclient) << "Unable to set up audio output because of a problem with output format.";
|
||||
qCDebug(audioclient) << "The closest format available is" << outputDeviceInfo.getDevice().nearestFormat(_desiredOutputFormat);
|
||||
}
|
||||
|
||||
#if defined(Q_OS_ANDROID)
|
||||
connect(&_checkInputTimer, &QTimer::timeout, this, &AudioClient::checkInputTimeout);
|
||||
_checkInputTimer.start(CHECK_INPUT_READS_MSECS);
|
||||
|
|
Loading…
Reference in a new issue