in src/backend/mod.rs [4635:4677]
fn new(
context: &'ctx mut AudioUnitContext,
user_ptr: *mut c_void,
data_callback: ffi::cubeb_data_callback,
state_callback: ffi::cubeb_state_callback,
latency_frames: u32,
) -> Self {
let output_callback_timing_data =
triple_buffer::TripleBuffer::new(OutputCallbackTimingData {
frames_queued: 0,
timestamp: 0,
buffer_size: 0,
});
let (output_callback_timing_data_write, output_callback_timing_data_read) =
output_callback_timing_data.split();
let queue = context.serial_queue.clone();
AudioUnitStream {
context,
user_ptr,
queue,
data_callback,
state_callback,
device_changed_callback: Mutex::new(None),
frames_queued: 0,
frames_read: AtomicUsize::new(0),
frames_written: AtomicUsize::new(0),
stopped: AtomicBool::new(true),
draining: AtomicBool::new(false),
reinit_pending: AtomicBool::new(false),
delayed_reinit: false,
destroy_pending: AtomicBool::new(false),
latency_frames,
output_device_latency_frames: AtomicU32::new(0),
input_device_latency_frames: AtomicU32::new(0),
total_output_latency_frames: AtomicU32::new(0),
total_input_latency_frames: AtomicU32::new(0),
output_callback_timing_data_write,
output_callback_timing_data_read,
prev_position: 0,
switching_device: AtomicBool::new(false),
core_stream_data: CoreStreamData::default(),
}
}