X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Faudio_mixer.cpp;fp=nageru%2Faudio_mixer.cpp;h=4d7632fad80a8e643840991284728ea61bb353cc;hb=bd01e11a41a19fef2315319909d8655cac359f0f;hp=35e0a23ee2da2b5b4e361838eae0d5aeeb765246;hpb=a944bad466ba5601a96f6833e1ea2eb31f9b55af;p=nageru diff --git a/nageru/audio_mixer.cpp b/nageru/audio_mixer.cpp index 35e0a23..4d7632f 100644 --- a/nageru/audio_mixer.cpp +++ b/nageru/audio_mixer.cpp @@ -19,6 +19,7 @@ #include #include "decibel.h" +#include "delay_analyzer.h" #include "flags.h" #include "shared/metrics.h" #include "state.pb.h" @@ -263,7 +264,7 @@ AudioMixer::AudioMixer(unsigned num_capture_cards, unsigned num_ffmpeg_inputs) // Must happen after ALSAPool is initialized, as it needs to know the card list. current_mapping_mode = MappingMode::MULTICHANNEL; InputMapping new_input_mapping; - if (!load_input_mapping_from_file(get_devices(), + if (!load_input_mapping_from_file(get_devices(HOLD_ALSA_DEVICES), global_flags.input_mapping_filename, &new_input_mapping)) { fprintf(stderr, "Failed to load input mapping from '%s', exiting.\n", @@ -312,6 +313,10 @@ void AudioMixer::reset_resampler_mutex_held(DeviceSpec device_spec) bool AudioMixer::add_audio(DeviceSpec device_spec, const uint8_t *data, unsigned num_samples, AudioFormat audio_format, steady_clock::time_point frame_time) { + if (delay_analyzer != nullptr && delay_analyzer->is_grabbing()) { + delay_analyzer->add_audio(device_spec, data, num_samples, audio_format, frame_time); + } + AudioDevice *device = find_audio_device(device_spec); unique_lock lock(audio_mutex, defer_lock); @@ -1030,7 +1035,7 @@ void AudioMixer::send_audio_level_callback() correlation.get_correlation()); } -map AudioMixer::get_devices() +map AudioMixer::get_devices(HoldDevices hold_devices) { lock_guard lock(audio_mutex); @@ -1043,7 +1048,7 @@ map AudioMixer::get_devices() info.num_channels = 8; devices.insert(make_pair(spec, info)); } - vector available_alsa_devices = alsa_pool.get_devices(); + vector available_alsa_devices = alsa_pool.get_devices(hold_devices); for (unsigned card_index = 0; card_index < available_alsa_devices.size(); ++card_index) { const DeviceSpec spec{ InputSourceType::ALSA_INPUT, card_index }; const ALSAPool::Device &device = available_alsa_devices[card_index]; @@ -1113,6 +1118,8 @@ void AudioMixer::set_simple_input(unsigned card_index) new_input_mapping.buses.push_back(input); + // NOTE: Delay is implicitly at 0.0 ms, since none has been set in the mapping. + lock_guard lock(audio_mutex); current_mapping_mode = MappingMode::SIMPLE; set_input_mapping_lock_held(new_input_mapping);