in src/backend/mod.rs [2588:2629]
fn remove_devices_changed_listener(&mut self, devtype: DeviceType) -> Result<()> {
if !devtype.intersects(DeviceType::INPUT | DeviceType::OUTPUT) {
return Err(Error::invalid_parameter());
}
let context_ptr = self as *mut AudioUnitContext;
let mut devices = self.devices.lock().unwrap();
if devtype.contains(DeviceType::INPUT) {
devices.input.clear();
}
if devtype.contains(DeviceType::OUTPUT) {
devices.output.clear();
}
if devices.input.changed_callback.is_some() || devices.output.changed_callback.is_some() {
return Ok(());
}
let address = get_property_address(
Property::HardwareDevices,
DeviceType::INPUT | DeviceType::OUTPUT,
);
// Note: unregister a non registered cb is not a problem, not checking.
let r = audio_object_remove_property_listener(
kAudioObjectSystemObject,
&address,
audiounit_collection_changed_callback,
context_ptr,
);
if r == NO_ERR {
Ok(())
} else {
cubeb_log!(
"Cannot remove devices-changed listener for {:?}, Error: {}",
devtype,
r
);
Err(Error::error())
}
}