mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-06-28 01:49:33 -06:00
Allow user to change DPLII decoding quality
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "AudioCommon/AudioCommon.h"
|
||||
#include "AudioCommon/Enums.h"
|
||||
#include "AudioCommon/WASAPIStream.h"
|
||||
|
||||
#include "Core/Config/MainSettings.h"
|
||||
@ -91,6 +92,29 @@ void AudioPane::CreateWidgets()
|
||||
m_dolby_pro_logic->setToolTip(
|
||||
tr("Enables Dolby Pro Logic II emulation using 5.1 surround. Certain backends only."));
|
||||
|
||||
auto* dolby_quality_layout = new QHBoxLayout;
|
||||
|
||||
m_dolby_quality_label = new QLabel(tr("Decoding Quality:"));
|
||||
|
||||
m_dolby_quality_slider = new QSlider(Qt::Horizontal);
|
||||
m_dolby_quality_slider->setMinimum(0);
|
||||
m_dolby_quality_slider->setMaximum(3);
|
||||
m_dolby_quality_slider->setPageStep(1);
|
||||
m_dolby_quality_slider->setTickPosition(QSlider::TicksBelow);
|
||||
m_dolby_quality_slider->setToolTip(
|
||||
tr("Quality of the DPLII decoder. Audio latency increases with quality."));
|
||||
m_dolby_quality_slider->setTracking(true);
|
||||
|
||||
m_dolby_quality_low_label = new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Low));
|
||||
m_dolby_quality_highest_label =
|
||||
new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Highest));
|
||||
m_dolby_quality_latency_label =
|
||||
new QLabel(GetDPL2ApproximateLatencyLabel(AudioCommon::DPL2Quality::Highest));
|
||||
|
||||
dolby_quality_layout->addWidget(m_dolby_quality_low_label);
|
||||
dolby_quality_layout->addWidget(m_dolby_quality_slider);
|
||||
dolby_quality_layout->addWidget(m_dolby_quality_highest_label);
|
||||
|
||||
backend_layout->setFormAlignment(Qt::AlignLeft | Qt::AlignTop);
|
||||
backend_layout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
|
||||
backend_layout->addRow(m_backend_label, m_backend_combo);
|
||||
@ -105,6 +129,9 @@ void AudioPane::CreateWidgets()
|
||||
#endif
|
||||
|
||||
backend_layout->addRow(m_dolby_pro_logic);
|
||||
backend_layout->addRow(m_dolby_quality_label);
|
||||
backend_layout->addRow(dolby_quality_layout);
|
||||
backend_layout->addRow(m_dolby_quality_latency_label);
|
||||
|
||||
auto* stretching_box = new QGroupBox(tr("Audio Stretching Settings"));
|
||||
auto* stretching_layout = new QGridLayout;
|
||||
@ -152,6 +179,7 @@ void AudioPane::ConnectWidgets()
|
||||
}
|
||||
connect(m_stretching_buffer_slider, &QSlider::valueChanged, this, &AudioPane::SaveSettings);
|
||||
connect(m_dolby_pro_logic, &QCheckBox::toggled, this, &AudioPane::SaveSettings);
|
||||
connect(m_dolby_quality_slider, &QSlider::valueChanged, this, &AudioPane::SaveSettings);
|
||||
connect(m_stretching_enable, &QCheckBox::toggled, this, &AudioPane::SaveSettings);
|
||||
connect(m_dsp_hle, &QRadioButton::toggled, this, &AudioPane::SaveSettings);
|
||||
connect(m_dsp_lle, &QRadioButton::toggled, this, &AudioPane::SaveSettings);
|
||||
@ -201,6 +229,13 @@ void AudioPane::LoadSettings()
|
||||
|
||||
// DPL2
|
||||
m_dolby_pro_logic->setChecked(SConfig::GetInstance().bDPL2Decoder);
|
||||
m_dolby_quality_slider->setValue(int(Config::Get(Config::MAIN_DPL2_QUALITY)));
|
||||
m_dolby_quality_latency_label->setText(
|
||||
GetDPL2ApproximateLatencyLabel(Config::Get(Config::MAIN_DPL2_QUALITY)));
|
||||
if (AudioCommon::SupportsDPL2Decoder(current))
|
||||
{
|
||||
EnableDolbyQualityWidgets(m_dolby_pro_logic->isChecked());
|
||||
}
|
||||
|
||||
// Latency
|
||||
if (m_latency_control_supported)
|
||||
@ -255,6 +290,14 @@ void AudioPane::SaveSettings()
|
||||
|
||||
// DPL2
|
||||
SConfig::GetInstance().bDPL2Decoder = m_dolby_pro_logic->isChecked();
|
||||
Config::SetBase(Config::MAIN_DPL2_QUALITY,
|
||||
static_cast<AudioCommon::DPL2Quality>(m_dolby_quality_slider->value()));
|
||||
m_dolby_quality_latency_label->setText(
|
||||
GetDPL2ApproximateLatencyLabel(Config::Get(Config::MAIN_DPL2_QUALITY)));
|
||||
if (AudioCommon::SupportsDPL2Decoder(backend))
|
||||
{
|
||||
EnableDolbyQualityWidgets(m_dolby_pro_logic->isChecked());
|
||||
}
|
||||
|
||||
// Latency
|
||||
if (m_latency_control_supported)
|
||||
@ -286,6 +329,7 @@ void AudioPane::OnBackendChanged()
|
||||
const auto backend = SConfig::GetInstance().sBackend;
|
||||
|
||||
m_dolby_pro_logic->setEnabled(AudioCommon::SupportsDPL2Decoder(backend));
|
||||
EnableDolbyQualityWidgets(AudioCommon::SupportsDPL2Decoder(backend));
|
||||
if (m_latency_control_supported)
|
||||
{
|
||||
m_latency_label->setEnabled(AudioCommon::SupportsLatencyControl(backend));
|
||||
@ -316,9 +360,13 @@ void AudioPane::OnEmulationStateChanged(bool running)
|
||||
m_dsp_hle->setEnabled(!running);
|
||||
m_dsp_lle->setEnabled(!running);
|
||||
m_dsp_interpreter->setEnabled(!running);
|
||||
m_dolby_pro_logic->setEnabled(!running);
|
||||
m_backend_label->setEnabled(!running);
|
||||
m_backend_combo->setEnabled(!running);
|
||||
if (AudioCommon::SupportsDPL2Decoder(SConfig::GetInstance().sBackend))
|
||||
{
|
||||
m_dolby_pro_logic->setEnabled(!running);
|
||||
EnableDolbyQualityWidgets(!running);
|
||||
}
|
||||
if (m_latency_control_supported)
|
||||
{
|
||||
m_latency_label->setEnabled(!running);
|
||||
@ -342,3 +390,42 @@ void AudioPane::CheckNeedForLatencyControl()
|
||||
m_latency_control_supported =
|
||||
std::any_of(backends.cbegin(), backends.cend(), AudioCommon::SupportsLatencyControl);
|
||||
}
|
||||
|
||||
QString AudioPane::GetDPL2QualityLabel(AudioCommon::DPL2Quality value) const
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case AudioCommon::DPL2Quality::Low:
|
||||
return tr("Low");
|
||||
case AudioCommon::DPL2Quality::Medium:
|
||||
return tr("Medium");
|
||||
case AudioCommon::DPL2Quality::Highest:
|
||||
return tr("Highest");
|
||||
default:
|
||||
return tr("High");
|
||||
}
|
||||
}
|
||||
|
||||
QString AudioPane::GetDPL2ApproximateLatencyLabel(AudioCommon::DPL2Quality value) const
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case AudioCommon::DPL2Quality::Low:
|
||||
return tr("Latency: ~10ms");
|
||||
case AudioCommon::DPL2Quality::Medium:
|
||||
return tr("Latency: ~20ms");
|
||||
case AudioCommon::DPL2Quality::Highest:
|
||||
return tr("Latency: ~80ms");
|
||||
default:
|
||||
return tr("Latency: ~40ms");
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPane::EnableDolbyQualityWidgets(bool enabled) const
|
||||
{
|
||||
m_dolby_quality_label->setEnabled(enabled);
|
||||
m_dolby_quality_slider->setEnabled(enabled);
|
||||
m_dolby_quality_low_label->setEnabled(enabled);
|
||||
m_dolby_quality_highest_label->setEnabled(enabled);
|
||||
m_dolby_quality_latency_label->setEnabled(enabled);
|
||||
}
|
||||
|
Reference in New Issue
Block a user