in src/backend/mod.rs [3303:3361]
fn should_block_vpio_for_device_pair(
&self,
in_device: &device_info,
out_device: &device_info,
) -> bool {
self.debug_assert_is_on_stream_queue();
cubeb_log!("Evaluating device pair against VPIO block list");
let log_device_and_get_model_uid = |id, devtype| -> String {
let device_model_uid = get_device_model_uid(id, devtype)
.map(|s| s.into_string())
.unwrap_or_default();
cubeb_log!("{} uid=\"{}\", model_uid=\"{}\", transport_type={:?}, source={:?}, source_name=\"{}\", name=\"{}\", manufacturer=\"{}\"",
if devtype == DeviceType::INPUT {
"Input"
} else {
debug_assert_eq!(devtype, DeviceType::OUTPUT);
"Output"
},
get_device_uid(id, devtype).map(|s| s.into_string()).unwrap_or_default(),
device_model_uid,
convert_uint32_into_string(get_device_transport_type(id, devtype).unwrap_or(0)),
convert_uint32_into_string(get_device_source(id, devtype).unwrap_or(0)),
get_device_source_name(id, devtype).map(|s| s.into_string()).unwrap_or_default(),
get_device_name(id, devtype).map(|s| s.into_string()).unwrap_or_default(),
get_device_manufacturer(id, devtype).map(|s| s.into_string()).unwrap_or_default());
device_model_uid
};
#[allow(non_upper_case_globals)]
let in_id = match in_device.id {
kAudioObjectUnknown => None,
id => Some(id),
};
#[allow(non_upper_case_globals)]
let out_id = match out_device.id {
kAudioObjectUnknown => None,
id => Some(id),
};
let (in_model_uid, out_model_uid) = (
in_id
.map(|id| log_device_and_get_model_uid(id, DeviceType::INPUT))
.unwrap_or_default(),
out_id
.or_else(|| get_default_device(DeviceType::OUTPUT))
.map(|id| log_device_and_get_model_uid(id, DeviceType::OUTPUT))
.unwrap_or_default(),
);
if in_model_uid.contains(APPLE_STUDIO_DISPLAY_USB_ID)
&& out_model_uid.contains(APPLE_STUDIO_DISPLAY_USB_ID)
{
cubeb_log!("Both input and output device is an Apple Studio Display. BLOCKED");
return true;
}
cubeb_log!("Device pair is not blocked");
false
}