limiter(OUTPUT_FREQUENCY),
correlation(OUTPUT_FREQUENCY)
{
+ global_audio_mixer = this;
+
for (unsigned bus_index = 0; bus_index < MAX_BUSES; ++bus_index) {
locut[bus_index].init(FILTER_HPF, 2);
locut_enabled[bus_index] = global_flags.locut_enabled;
return true;
}
+bool AudioMixer::silence_card(DeviceSpec device_spec, bool silence)
+{
+ AudioDevice *device = find_audio_device(device_spec);
+
+ unique_lock<timed_mutex> lock(audio_mutex, defer_lock);
+ if (!lock.try_lock_for(chrono::milliseconds(10))) {
+ return false;
+ }
+
+ if (device->silenced && !silence) {
+ reset_resampler_mutex_held(device_spec);
+ }
+ device->silenced = silence;
+ return true;
+}
+
AudioMixer::AudioDevice *AudioMixer::find_audio_device(DeviceSpec device)
{
switch (device.type) {
for (const DeviceSpec &device_spec : get_active_devices()) {
AudioDevice *device = find_audio_device(device_spec);
samples_card[device_spec].resize(num_samples * device->interesting_channels.size());
- device->resampling_queue->get_output_samples(
- pts,
- &samples_card[device_spec][0],
- num_samples,
- rate_adjustment_policy);
+ if (device->silenced) {
+ memset(&samples_card[device_spec][0], 0, samples_card[device_spec].size() * sizeof(float));
+ } else {
+ device->resampling_queue->get_output_samples(
+ pts,
+ &samples_card[device_spec][0],
+ num_samples,
+ rate_adjustment_policy);
+ }
}
vector<float> samples_out, left, right;
const DeviceSpec spec{ InputSourceType::CAPTURE_CARD, card_index };
const AudioDevice *device = &video_cards[card_index];
DeviceInfo info;
- info.name = device->name;
- info.num_channels = 8; // FIXME: This is wrong for fake cards.
+ info.display_name = device->display_name;
+ info.num_channels = 8;
devices.insert(make_pair(spec, info));
}
vector<ALSAPool::Device> available_alsa_devices = alsa_pool.get_devices();
const DeviceSpec spec{ InputSourceType::ALSA_INPUT, card_index };
const ALSAPool::Device &device = available_alsa_devices[card_index];
DeviceInfo info;
- info.name = device.name + " (" + device.info + ")";
+ info.display_name = device.display_name();
info.num_channels = device.num_channels;
devices.insert(make_pair(spec, info));
}
return devices;
}
-void AudioMixer::set_name(DeviceSpec device_spec, const string &name)
+void AudioMixer::set_display_name(DeviceSpec device_spec, const string &name)
{
AudioDevice *device = find_audio_device(device_spec);
lock_guard<timed_mutex> lock(audio_mutex);
- device->name = name;
+ device->display_name = name;
}
void AudioMixer::set_input_mapping(const InputMapping &new_input_mapping)