X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=alsa_input.cpp;h=c53b24189da2f43a7335522aecf4aaaf81226a4a;hb=a564f192f808841ad8dfa9a4aa6c8db3335bd6fd;hp=0ba07b145dc7a0fcc4f198fec772660d1f6088b8;hpb=6b99840a3d7af07d51d84b1658ef2b1a7cdb7bcb;p=nageru diff --git a/alsa_input.cpp b/alsa_input.cpp index 0ba07b1..c53b241 100644 --- a/alsa_input.cpp +++ b/alsa_input.cpp @@ -454,6 +454,7 @@ ALSAPool::ProbeResult ALSAPool::probe_device_once(unsigned card_index, unsigned string info = snd_pcm_info_get_name(pcm_info); unsigned internal_dev_index; + string display_name; { lock_guard lock(mu); internal_dev_index = find_free_device_index(name, info, num_channels, address); @@ -462,12 +463,18 @@ ALSAPool::ProbeResult ALSAPool::probe_device_once(unsigned card_index, unsigned 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; } @@ -589,6 +596,7 @@ void ALSAPool::set_card_state(unsigned index, ALSAPool::Device::State state) 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) @@ -643,15 +651,19 @@ void ALSAPool::free_card(unsigned index) while (!global_audio_mixer->silence_card(spec, true)) ; - lock_guard 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 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(); }