]> git.sesse.net Git - nageru/blobdiff - alsa_input.cpp
Move InputMapping and friends into its own header file.
[nageru] / alsa_input.cpp
index 0ba07b145dc7a0fcc4f198fec772660d1f6088b8..c53b24189da2f43a7335522aecf4aaaf81226a4a 100644 (file)
@@ -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<mutex> 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<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();
 }