Skip to content

Commit

Permalink
Merge PR mumble-voip#6611: FIX(client): Fix AudioWizard echo cancella…
Browse files Browse the repository at this point in the history
…tion checkbox
  • Loading branch information
Hartmnt authored Nov 1, 2024
2 parents 74a917c + 2e67671 commit 546df4d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 25 deletions.
54 changes: 29 additions & 25 deletions src/mumble/AudioWizard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,26 +44,8 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) {
qcbUsage->setChecked(Global::get().s.bUsage);

// Device
if (AudioInputRegistrar::qmNew) {
foreach (AudioInputRegistrar *air, *AudioInputRegistrar::qmNew) {
qcbInput->addItem(air->name);
if (air->name == AudioInputRegistrar::current) {
qcbInput->setCurrentIndex(qcbInput->count() - 1);
EchoCancelOptionID echoCancelOptionId = firstUsableEchoCancellation(air, qcbOutput->currentText());
if (echoCancelOptionId != EchoCancelOptionID::DISABLED) {
qcbEcho->setEnabled(true);
qcbEcho->setChecked(Global::get().s.echoOption != EchoCancelOptionID::DISABLED);
}
}
QList< audioDevice > ql = air->getDeviceChoices();
}
}
if (qcbInput->count() < 2) {
qcbInput->setEnabled(false);
}

if (AudioOutputRegistrar::qmNew) {
foreach (AudioOutputRegistrar *aor, *AudioOutputRegistrar::qmNew) {
for (AudioOutputRegistrar *aor : *AudioOutputRegistrar::qmNew) {
qcbOutput->addItem(aor->name);
if (aor->name == AudioOutputRegistrar::current) {
qcbOutput->setCurrentIndex(qcbOutput->count() - 1);
Expand All @@ -73,11 +55,24 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) {
QList< audioDevice > ql = aor->getDeviceChoices();
}
}

if (qcbOutput->count() < 2) {
qcbOutput->setEnabled(false);
}

if (AudioInputRegistrar::qmNew) {
for (AudioInputRegistrar *air : *AudioInputRegistrar::qmNew) {
qcbInput->addItem(air->name);
if (air->name == AudioInputRegistrar::current) {
qcbInput->setCurrentIndex(qcbInput->count() - 1);
updateEchoCheckbox(air);
}
QList< audioDevice > ql = air->getDeviceChoices();
}
}
if (qcbInput->count() < 2) {
qcbInput->setEnabled(false);
}

qcbHighContrast->setChecked(Global::get().s.bHighContrast);
on_qcbHighContrast_clicked(Global::get().s.bHighContrast);
#ifdef Q_OS_WIN
Expand Down Expand Up @@ -243,8 +238,7 @@ void AudioWizard::on_qcbInputDevice_activated(int) {
air->setDeviceChoice(qcbInputDevice->itemData(idx), Global::get().s);
}

EchoCancelOptionID echoCancelOptionId = firstUsableEchoCancellation(air, qcbOutput->currentText());
qcbEcho->setEnabled(echoCancelOptionId != EchoCancelOptionID::DISABLED);
updateEchoCheckbox(air);

Global::get().ai = AudioInputPtr(air->create());
Global::get().ai->start(QThread::HighestPriority);
Expand Down Expand Up @@ -284,9 +278,7 @@ void AudioWizard::on_qcbOutputDevice_activated(int) {
bDelay = aor->usesOutputDelay();
}

AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qcbInput->currentText());
EchoCancelOptionID echoCancelOptionId = firstUsableEchoCancellation(air, qcbOutput->currentText());
qcbEcho->setEnabled(echoCancelOptionId != EchoCancelOptionID::DISABLED);
updateEchoCheckbox(AudioInputRegistrar::qmNew->value(qcbInput->currentText()));

Global::get().ao = AudioOutputPtr(aor->create());
Global::get().ao->start(QThread::HighPriority);
Expand Down Expand Up @@ -767,6 +759,18 @@ void AudioWizard::on_qrbQualityCustom_clicked() {
restartAudio(true);
}

void AudioWizard::updateEchoCheckbox(AudioInputRegistrar *air) {
bool echoCancelPossible =
firstUsableEchoCancellation(air, qcbOutput->currentText()) != EchoCancelOptionID::DISABLED;

qcbEcho->setEnabled(echoCancelPossible);
if (echoCancelPossible) {
qcbEcho->setChecked(Global::get().s.echoOption != EchoCancelOptionID::DISABLED);
} else {
qcbEcho->setChecked(false);
}
}

EchoCancelOptionID AudioWizard::firstUsableEchoCancellation(AudioInputRegistrar *air, const QString outputSys) {
for (EchoCancelOptionID ecoid : air->echoOptions) {
if (air->canEcho(ecoid, outputSys)) {
Expand Down
2 changes: 2 additions & 0 deletions src/mumble/AudioWizard.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ class AudioWizard : public QWizard, public Ui::AudioWizard {
Q_OBJECT
Q_DISABLE_COPY(AudioWizard)

void updateEchoCheckbox(AudioInputRegistrar *air);

/// Which echo cancellation is usable depends on the audio backend and the device combination.
/// This function will iterate through the list of available echo cancellation in the audio backend and check with
/// the backend whether this echo cancellation option works for current device combination.
Expand Down

0 comments on commit 546df4d

Please sign in to comment.