DSP must be set to LLE to select the decoder

This commit is contained in:
LAGonauta 2019-06-15 08:36:47 -03:00
parent 3c9eb37381
commit 2ff646b796
7 changed files with 33 additions and 16 deletions

View File

@ -37,7 +37,7 @@ bool CubebStream::Init()
if (!m_ctx) if (!m_ctx)
return false; return false;
m_stereo = !SConfig::GetInstance().bDPL2Decoder; m_stereo = !SConfig::GetInstance().bDPL2Decoder || SConfig::GetInstance().bDSPHLE;
cubeb_stream_params params; cubeb_stream_params params;
params.rate = m_mixer->GetSampleRate(); params.rate = m_mixer->GetSampleRate();

View File

@ -8,8 +8,8 @@ namespace AudioCommon
{ {
enum class DPL2Quality enum class DPL2Quality
{ {
Low = 0, Lowest = 0,
Medium = 1, Low = 1,
High = 2, High = 2,
Highest = 3 Highest = 3
}; };

View File

@ -20,9 +20,9 @@ static u32 DPL2QualityToFrameBlockSize(AudioCommon::DPL2Quality quality)
{ {
switch (quality) switch (quality)
{ {
case AudioCommon::DPL2Quality::Low: case AudioCommon::DPL2Quality::Lowest:
return 512; return 512;
case AudioCommon::DPL2Quality::Medium: case AudioCommon::DPL2Quality::Low:
return 1024; return 1024;
case AudioCommon::DPL2Quality::Highest: case AudioCommon::DPL2Quality::Highest:
return 4096; return 4096;

View File

@ -221,7 +221,8 @@ void OpenALStream::SoundLoop()
bool float32_capable = palIsExtensionPresent("AL_EXT_float32") != 0; bool float32_capable = palIsExtensionPresent("AL_EXT_float32") != 0;
bool surround_capable = palIsExtensionPresent("AL_EXT_MCFORMATS") || IsCreativeXFi(); bool surround_capable = palIsExtensionPresent("AL_EXT_MCFORMATS") || IsCreativeXFi();
bool use_surround = SConfig::GetInstance().bDPL2Decoder && surround_capable; bool use_surround =
SConfig::GetInstance().bDPL2Decoder && surround_capable && !SConfig::GetInstance().bDSPHLE;
// As there is no extension to check for 32-bit fixed point support // As there is no extension to check for 32-bit fixed point support
// and we know that only a X-Fi with hardware OpenAL supports it, // and we know that only a X-Fi with hardware OpenAL supports it,

View File

@ -19,7 +19,7 @@ PulseAudio::PulseAudio() = default;
bool PulseAudio::Init() bool PulseAudio::Init()
{ {
m_stereo = !SConfig::GetInstance().bDPL2Decoder; m_stereo = !SConfig::GetInstance().bDPL2Decoder || SConfig::GetInstance().bDSPHLE;
m_channels = m_stereo ? 2 : 6; // will tell PA we use a Stereo or 5.0 channel setup m_channels = m_stereo ? 2 : 6; // will tell PA we use a Stereo or 5.0 channel setup
NOTICE_LOG(AUDIO, "PulseAudio backend using %d channels", m_channels); NOTICE_LOG(AUDIO, "PulseAudio backend using %d channels", m_channels);

View File

@ -105,7 +105,7 @@ void AudioPane::CreateWidgets()
tr("Quality of the DPLII decoder. Audio latency increases with quality.")); tr("Quality of the DPLII decoder. Audio latency increases with quality."));
m_dolby_quality_slider->setTracking(true); m_dolby_quality_slider->setTracking(true);
m_dolby_quality_low_label = new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Low)); m_dolby_quality_low_label = new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Lowest));
m_dolby_quality_highest_label = m_dolby_quality_highest_label =
new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Highest)); new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Highest));
m_dolby_quality_latency_label = m_dolby_quality_latency_label =
@ -265,6 +265,11 @@ void AudioPane::SaveSettings()
auto& settings = Settings::Instance(); auto& settings = Settings::Instance();
// DSP // DSP
if (SConfig::GetInstance().bDSPHLE != m_dsp_hle->isChecked() ||
SConfig::GetInstance().m_DSPEnableJIT != m_dsp_lle->isChecked())
{
OnDspChanged();
}
SConfig::GetInstance().bDSPHLE = m_dsp_hle->isChecked(); SConfig::GetInstance().bDSPHLE = m_dsp_hle->isChecked();
Config::SetBaseOrCurrent(Config::MAIN_DSP_HLE, m_dsp_hle->isChecked()); Config::SetBaseOrCurrent(Config::MAIN_DSP_HLE, m_dsp_hle->isChecked());
SConfig::GetInstance().m_DSPEnableJIT = m_dsp_lle->isChecked(); SConfig::GetInstance().m_DSPEnableJIT = m_dsp_lle->isChecked();
@ -294,7 +299,7 @@ void AudioPane::SaveSettings()
static_cast<AudioCommon::DPL2Quality>(m_dolby_quality_slider->value())); static_cast<AudioCommon::DPL2Quality>(m_dolby_quality_slider->value()));
m_dolby_quality_latency_label->setText( m_dolby_quality_latency_label->setText(
GetDPL2ApproximateLatencyLabel(Config::Get(Config::MAIN_DPL2_QUALITY))); GetDPL2ApproximateLatencyLabel(Config::Get(Config::MAIN_DPL2_QUALITY)));
if (AudioCommon::SupportsDPL2Decoder(backend)) if (AudioCommon::SupportsDPL2Decoder(backend) && !m_dsp_hle->isChecked())
{ {
EnableDolbyQualityWidgets(m_dolby_pro_logic->isChecked()); EnableDolbyQualityWidgets(m_dolby_pro_logic->isChecked());
} }
@ -324,12 +329,22 @@ void AudioPane::SaveSettings()
AudioCommon::UpdateSoundStream(); AudioCommon::UpdateSoundStream();
} }
void AudioPane::OnDspChanged()
{
const auto backend = SConfig::GetInstance().sBackend;
m_dolby_pro_logic->setEnabled(AudioCommon::SupportsDPL2Decoder(backend) &&
!m_dsp_hle->isChecked());
EnableDolbyQualityWidgets(AudioCommon::SupportsDPL2Decoder(backend) && !m_dsp_hle->isChecked());
}
void AudioPane::OnBackendChanged() void AudioPane::OnBackendChanged()
{ {
const auto backend = SConfig::GetInstance().sBackend; const auto backend = SConfig::GetInstance().sBackend;
m_dolby_pro_logic->setEnabled(AudioCommon::SupportsDPL2Decoder(backend)); m_dolby_pro_logic->setEnabled(AudioCommon::SupportsDPL2Decoder(backend) &&
EnableDolbyQualityWidgets(AudioCommon::SupportsDPL2Decoder(backend)); !m_dsp_hle->isChecked());
EnableDolbyQualityWidgets(AudioCommon::SupportsDPL2Decoder(backend) && !m_dsp_hle->isChecked());
if (m_latency_control_supported) if (m_latency_control_supported)
{ {
m_latency_label->setEnabled(AudioCommon::SupportsLatencyControl(backend)); m_latency_label->setEnabled(AudioCommon::SupportsLatencyControl(backend));
@ -362,7 +377,7 @@ void AudioPane::OnEmulationStateChanged(bool running)
m_dsp_interpreter->setEnabled(!running); m_dsp_interpreter->setEnabled(!running);
m_backend_label->setEnabled(!running); m_backend_label->setEnabled(!running);
m_backend_combo->setEnabled(!running); m_backend_combo->setEnabled(!running);
if (AudioCommon::SupportsDPL2Decoder(SConfig::GetInstance().sBackend)) if (AudioCommon::SupportsDPL2Decoder(SConfig::GetInstance().sBackend) && !m_dsp_hle->isChecked())
{ {
m_dolby_pro_logic->setEnabled(!running); m_dolby_pro_logic->setEnabled(!running);
EnableDolbyQualityWidgets(!running); EnableDolbyQualityWidgets(!running);
@ -395,10 +410,10 @@ QString AudioPane::GetDPL2QualityLabel(AudioCommon::DPL2Quality value) const
{ {
switch (value) switch (value)
{ {
case AudioCommon::DPL2Quality::Lowest:
return tr("Lowest");
case AudioCommon::DPL2Quality::Low: case AudioCommon::DPL2Quality::Low:
return tr("Low"); return tr("Low");
case AudioCommon::DPL2Quality::Medium:
return tr("Medium");
case AudioCommon::DPL2Quality::Highest: case AudioCommon::DPL2Quality::Highest:
return tr("Highest"); return tr("Highest");
default: default:
@ -410,9 +425,9 @@ QString AudioPane::GetDPL2ApproximateLatencyLabel(AudioCommon::DPL2Quality value
{ {
switch (value) switch (value)
{ {
case AudioCommon::DPL2Quality::Low: case AudioCommon::DPL2Quality::Lowest:
return tr("Latency: ~10ms"); return tr("Latency: ~10ms");
case AudioCommon::DPL2Quality::Medium: case AudioCommon::DPL2Quality::Low:
return tr("Latency: ~20ms"); return tr("Latency: ~20ms");
case AudioCommon::DPL2Quality::Highest: case AudioCommon::DPL2Quality::Highest:
return tr("Latency: ~80ms"); return tr("Latency: ~80ms");

View File

@ -35,6 +35,7 @@ private:
void OnEmulationStateChanged(bool running); void OnEmulationStateChanged(bool running);
void OnBackendChanged(); void OnBackendChanged();
void OnDspChanged();
void OnVolumeChanged(int volume); void OnVolumeChanged(int volume);
void CheckNeedForLatencyControl(); void CheckNeedForLatencyControl();