diff --git a/mythtv/libs/libmyth/audio/audiooutputalsa.cpp b/mythtv/libs/libmyth/audio/audiooutputalsa.cpp index 6beddd4ed35..176252ad05e 100644 --- a/mythtv/libs/libmyth/audio/audiooutputalsa.cpp +++ b/mythtv/libs/libmyth/audio/audiooutputalsa.cpp @@ -458,7 +458,7 @@ AudioOutputSettings* AudioOutputALSA::GetOutputSettings(bool passthrough) QMap *alsadevs = GetDevices("pcm"); while(1) { - QString real_device = (((passthru || enc) && m_discretedigital) ? + QString real_device = ((passthrough && m_discretedigital) ? passthru_device : main_device); QString desc = alsadevs->value(real_device); diff --git a/mythtv/libs/libmyth/audio/audiooutputbase.cpp b/mythtv/libs/libmyth/audio/audiooutputbase.cpp index 1be16f84de6..40242214e96 100644 --- a/mythtv/libs/libmyth/audio/audiooutputbase.cpp +++ b/mythtv/libs/libmyth/audio/audiooutputbase.cpp @@ -170,7 +170,8 @@ void AudioOutputBase::InitSettings(const AudioSettings &settings) output_settings = GetOutputSettingsUsers(false); output_settingsdigital = GetOutputSettingsUsers(true); - max_channels = output_settings->BestSupportedChannels(); + max_channels = max(output_settings->BestSupportedChannels(), + output_settingsdigital->BestSupportedChannels()); configured_channels = max_channels; upmix_default = max_channels > 2 ? @@ -661,7 +662,7 @@ void AudioOutputBase::Reconfigure(const AudioSettings &orig_settings) .arg(output_settingsdigital->FeaturesToString()) .arg(configured_channels) .arg(channels) - .arg(output_settings->IsSupportedChannels(channels)) + .arg(OutputSettings(enc || passthru)->IsSupportedChannels(channels)) .arg(max_channels)); int dest_rate = 0; @@ -670,7 +671,7 @@ void AudioOutputBase::Reconfigure(const AudioSettings &orig_settings) // or if 48k override was checked in settings if ((samplerate != 48000 && gCoreContext->GetNumSetting("Audio48kOverride", false)) || - (enc && (samplerate > 48000 || (need_resampler && dest_rate > 48000)))) + (enc && (samplerate > 48000))) { VBAUDIO("Forcing resample to 48 kHz"); if (src_quality < 0) @@ -678,8 +679,10 @@ void AudioOutputBase::Reconfigure(const AudioSettings &orig_settings) need_resampler = true; dest_rate = 48000; } - else if ( - (need_resampler = !OutputSettings(enc)->IsSupportedRate(samplerate))) + // this will always be false for passthrough audio as + // CanPassthrough() already tested these conditions + else if ((need_resampler = + !OutputSettings(enc || passthru)->IsSupportedRate(samplerate))) { dest_rate = OutputSettings(enc)->NearestSupportedRate(samplerate); } @@ -762,7 +765,7 @@ void AudioOutputBase::Reconfigure(const AudioSettings &orig_settings) if (need_resampler || needs_upmix || needs_downmix || stretchfactor != 1.0f || (internal_vol && SWVolume()) || (enc && output_format != FORMAT_S16) || - !OutputSettings(enc)->IsSupportedFormat(output_format)) + !OutputSettings(enc || passthru)->IsSupportedFormat(output_format)) { VBAUDIO("Audio processing enabled"); processing = true; diff --git a/mythtv/programs/mythfrontend/audiogeneralsettings.cpp b/mythtv/programs/mythfrontend/audiogeneralsettings.cpp index 7a676fdf798..7d40e090028 100644 --- a/mythtv/programs/mythfrontend/audiogeneralsettings.cpp +++ b/mythtv/programs/mythfrontend/audiogeneralsettings.cpp @@ -354,7 +354,8 @@ AudioOutputSettings AudioConfigSettings::UpdateCapabilities( m_MaxAudioChannels->resetMaxCount(3); for (int i = 1; i <= max_speakers; i++) { - if (invalid || settings.IsSupportedChannels(i)) + if (invalid || settings.IsSupportedChannels(i) || + settingsdigital.IsSupportedChannels(i)) { QString txt; @@ -415,6 +416,8 @@ void AudioConfigSettings::AudioAdvanced() if (audiosettings.exec() == kDialogCodeAccepted) { + // Rescan audio list to check of override digital device + AudioRescan(); bool LPCM2 = settings.canFeature(FEATURE_LPCM) && gCoreContext->GetNumSetting("StereoPCM", false); // restore speakers configure only of StereoPCM has changed and