in src/backend/mod.rs [3179:3211]
fn start_audiounits(&mut self) -> Result<()> {
self.debug_assert_is_on_stream_queue();
// Only allowed to be called after the stream is initialized
// and before the stream is destroyed.
debug_assert!(!self.input_unit.is_null() || !self.output_unit.is_null());
if !self.input_unit.is_null() {
start_audiounit(self.input_unit)?;
}
if self.using_voice_processing_unit() {
// Handle the VoiceProcessIO case where there is a single unit.
// Always try to remember the applied input processing params. If they cannot
// be applied in the new device pair, we notify the client of an error and it
// will have to open a new stream.
if let Err(r) =
set_input_processing_params(self.input_unit, self.input_processing_params)
{
cubeb_log!(
"({:p}) Failed to set params of voiceprocessing. Error: {}",
self.stm_ptr,
r
);
return Err(r);
}
return Ok(());
}
if !self.output_unit.is_null() {
start_audiounit(self.output_unit)?;
}
self.units_running = true;
Ok(())
}