}
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
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();
}