+void AudioMixer::start_or_stop_alsa_capture(DeviceSpec device_spec)
+{
+ assert(device_spec.type == InputSourceType::ALSA_INPUT);
+ AudioDevice *device = find_audio_device(device_spec);
+ bool previously_held = alsa_pool.device_is_held(device_spec.index);
+ bool should_be_held = !device->interesting_channels.empty();
+ if (should_be_held) {
+ alsa_pool.hold_device(device_spec.index);
+ } else {
+ alsa_pool.release_device(device_spec.index);
+ }
+ if (previously_held != should_be_held) {
+ alsa_pool.reset_device(device_spec.index);
+ }
+}
+