]> git.sesse.net Git - nageru/blobdiff - alsa_pool.cpp
Fix an issue where the mixer lagging too much behind CEF would cause us to display...
[nageru] / alsa_pool.cpp
index 3a4a5b0eddf74ff876a9c00f432f1cacb1fe5004..59ae595f029f8ba6cfef0d7aff12f88a97f61799 100644 (file)
@@ -185,19 +185,24 @@ ALSAPool::ProbeResult ALSAPool::probe_device_once(unsigned card_index, unsigned
        }
        unique_ptr<snd_ctl_t, decltype(snd_ctl_close)*> ctl_closer(ctl, snd_ctl_close);
 
+       snprintf(address, sizeof(address), "hw:%d,%d", card_index, dev_index);
+
        snd_pcm_info_t *pcm_info;
        snd_pcm_info_alloca(&pcm_info);
        snd_pcm_info_set_device(pcm_info, dev_index);
        snd_pcm_info_set_subdevice(pcm_info, 0);
        snd_pcm_info_set_stream(pcm_info, SND_PCM_STREAM_CAPTURE);
-       if (snd_ctl_pcm_info(ctl, pcm_info) < 0) {
+       err = snd_ctl_pcm_info(ctl, pcm_info);
+       if (err == -ENOENT) {
+               // Not a capture card.
+               return ALSAPool::ProbeResult::FAILURE;
+       }
+       if (err < 0) {
                // Not available for capture.
                printf("%s: Not available for capture.\n", address);
                return ALSAPool::ProbeResult::DEFER;
        }
 
-       snprintf(address, sizeof(address), "hw:%d,%d", card_index, dev_index);
-
        unsigned num_channels = 0;
 
        // Find all channel maps for this device, and pick out the one
@@ -393,7 +398,7 @@ void ALSAPool::reset_device(unsigned index)
                inputs[index].reset();
        } else {
                // TODO: Put on a background thread instead of locking?
-               auto callback = bind(&AudioMixer::add_audio, global_audio_mixer, DeviceSpec{InputSourceType::ALSA_INPUT, index}, _1, _2, _3, _4);
+               auto callback = bind(&AudioMixer::add_audio, global_audio_mixer, DeviceSpec{InputSourceType::ALSA_INPUT, index}, _1, _2, _3, _4, _5);
                inputs[index].reset(new ALSAInput(device->address.c_str(), OUTPUT_FREQUENCY, device->num_channels, callback, this, index));
                inputs[index]->start_capture_thread();
        }