]> git.sesse.net Git - nageru/blobdiff - alsa_input.cpp
Make sure AudioDevice::name is set for ALSA cards, not just video capture cards.
[nageru] / alsa_input.cpp
index 0ba07b145dc7a0fcc4f198fec772660d1f6088b8..7594bbbd463b08ef7525c5859b500a7cab3b531e 100644 (file)
@@ -468,6 +468,10 @@ ALSAPool::ProbeResult ALSAPool::probe_device_once(unsigned card_index, unsigned
 
        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_name(spec, name + " (" + info + ")");
+       global_audio_mixer->trigger_state_changed_callback();
+
        return ALSAPool::ProbeResult::SUCCESS;
 }
 
@@ -589,6 +593,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 +648,19 @@ void ALSAPool::free_card(unsigned index)
        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();
 }