string info = snd_pcm_info_get_name(pcm_info);
unsigned internal_dev_index;
+ string display_name;
{
lock_guard<mutex> lock(mu);
internal_dev_index = find_free_device_index(name, info, num_channels, address);
devices[internal_dev_index].info = info;
devices[internal_dev_index].num_channels = num_channels;
// Note: Purposefully does not overwrite held.
+
+ display_name = devices[internal_dev_index].display_name();
}
fprintf(stderr, "%s: Probed successfully.\n", address);
reset_device(internal_dev_index); // Restarts it if it is held (ie., we just replaced a dead card).
+ DeviceSpec spec{InputSourceType::ALSA_INPUT, internal_dev_index};
+ global_audio_mixer->set_display_name(spec, display_name);
+ global_audio_mixer->trigger_state_changed_callback();
+
return ALSAPool::ProbeResult::SUCCESS;
}
bool silence = (state != ALSAPool::Device::State::RUNNING);
while (!global_audio_mixer->silence_card(spec, silence))
;
+ global_audio_mixer->trigger_state_changed_callback();
}
unsigned ALSAPool::find_free_device_index(const string &name, const string &info, unsigned num_channels, const string &address)
while (!global_audio_mixer->silence_card(spec, true))
;
- lock_guard<mutex> lock(mu);
- if (devices[index].held) {
- devices[index].state = Device::State::DEAD;
- } else {
- devices[index].state = Device::State::EMPTY;
- inputs[index].reset();
- }
- while (!devices.empty() && devices.back().state == Device::State::EMPTY) {
- devices.pop_back();
- inputs.pop_back();
+ {
+ lock_guard<mutex> lock(mu);
+ if (devices[index].held) {
+ devices[index].state = Device::State::DEAD;
+ } else {
+ devices[index].state = Device::State::EMPTY;
+ inputs[index].reset();
+ }
+ while (!devices.empty() && devices.back().state == Device::State::EMPTY) {
+ devices.pop_back();
+ inputs.pop_back();
+ }
}
+
+ global_audio_mixer->trigger_state_changed_callback();
}