DSP must be set to LLE to select the decoder
This commit is contained in:
parent
3c9eb37381
commit
2ff646b796
|
@ -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();
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue