bug: invalid mono audio device channel selects

This commit is contained in:
Robin Davies
2024-10-12 03:53:57 -04:00
parent 21f5c9e43a
commit b0107d4490
17 changed files with 163 additions and 68 deletions
+17 -7
View File
@@ -199,14 +199,14 @@ void JackConfiguration::JackInitialize()
JackChannelSelection JackChannelSelection::MakeDefault(const JackConfiguration&config){
JackChannelSelection result;
for (size_t i = 0; i < std::min((size_t)2,config.GetInputAudioPorts().size()); ++i)
for (size_t i = 0; i < std::min((size_t)2,config.inputAudioPorts().size()); ++i)
{
result.inputAudioPorts_.push_back(config.GetInputAudioPorts()[i]);
result.inputAudioPorts_.push_back(config.inputAudioPorts()[i]);
}
for (size_t i = 0; i < std::min((size_t)2,config.GetOutputAudioPorts().size()); ++i)
for (size_t i = 0; i < std::min((size_t)2,config.outputAudioPorts().size()); ++i)
{
result.outputAudioPorts_.push_back(config.GetOutputAudioPorts()[i]);
result.outputAudioPorts_.push_back(config.outputAudioPorts()[i]);
}
return result;
@@ -232,6 +232,16 @@ static std::vector<std::string> makeValid(const std::vector<std::string> & selec
result.push_back(t);
}
}
// if the result is empty, generate a default selection.
if (result.size() == 0)
{
size_t n = std::min(available.size(),(size_t)2);
for (size_t i = 0; i < n; ++i)
{
result.push_back(available[i]);
}
}
return result;
}
static std::vector<AlsaMidiDeviceInfo> makeValid(const std::vector<AlsaMidiDeviceInfo> & selected, const std::vector<AlsaMidiDeviceInfo> &available)
@@ -284,9 +294,9 @@ static std::vector<AlsaMidiDeviceInfo> makeValid(const std::vector<AlsaMidiDevic
JackChannelSelection JackChannelSelection::RemoveInvalidChannels(const JackConfiguration&config) const
{
JackChannelSelection result;
result.inputAudioPorts_ = makeValid(this->inputAudioPorts_,config.GetInputAudioPorts());
result.outputAudioPorts_ = makeValid(this->outputAudioPorts_,config.GetOutputAudioPorts());
result.inputMidiDevices_ = makeValid(this->inputMidiDevices_, config.GetInputMidiDevices());
result.inputAudioPorts_ = makeValid(this->inputAudioPorts_,config.inputAudioPorts());
result.outputAudioPorts_ = makeValid(this->outputAudioPorts_,config.outputAudioPorts());
result.inputMidiDevices_ = makeValid(this->inputMidiDevices_, config.inputMidiDevices());
if (!result.isValid())
{
return this->MakeDefault(config);