in src/backend/mod.rs [1272:1322]
fn get_voiceprocessing_audiounit(
shared_voice_processing_unit: &mut SharedVoiceProcessingUnitManager,
in_device: &device_info,
out_device: &device_info,
) -> Result<OwningHandle<VoiceProcessingUnit>> {
debug_assert_running_serially();
assert!(in_device.flags.contains(device_flags::DEV_INPUT));
assert!(!in_device.flags.contains(device_flags::DEV_OUTPUT));
assert!(!out_device.flags.contains(device_flags::DEV_INPUT));
let unit_handle = shared_voice_processing_unit.take_or_create();
if let Err(e) = unit_handle {
cubeb_log!(
"Failed to create shared voiceprocessing audiounit. Error: {}",
e
);
return Err(Error::error());
}
let mut unit_handle = unit_handle.unwrap();
if let Err(e) = set_device_to_audiounit(unit_handle.as_mut().unit, in_device.id, AU_IN_BUS) {
cubeb_log!(
"Failed to set in device {} to the created audiounit. Error: {}",
in_device.id,
e
);
return Err(Error::error());
}
let has_output = out_device.id != kAudioObjectUnknown;
if let Err(e) =
enable_audiounit_scope(unit_handle.as_mut().unit, DeviceType::OUTPUT, has_output)
{
cubeb_log!("Failed to enable audiounit input scope. Error: {}", e);
return Err(Error::error());
}
if has_output {
if let Err(e) =
set_device_to_audiounit(unit_handle.as_mut().unit, out_device.id, AU_OUT_BUS)
{
cubeb_log!(
"Failed to set out device {} to the created audiounit. Error: {}",
out_device.id,
e
);
return Err(Error::error());
}
}
Ok(unit_handle)
}