use std::sync::Arc;
use crate::audio_io::{AudioIo, AudioIoPtr};
use crate::PwBuffers;
#[cfg(not(feature = "pipewire"))]
pub fn ensure(
_sample_rate: u32,
_buf_size: u32,
_channels: u32,
) -> Option<(Box<dyn AudioIo>, Arc<PwBuffers>, AudioIoPtr)> {
None
}
#[cfg(feature = "pipewire")]
pub fn ensure(
sample_rate: u32,
buf_size: u32,
channels: u32,
) -> Option<(Box<dyn AudioIo>, Arc<PwBuffers>, AudioIoPtr)> {
use crate::backends::PipewireBackend;
use crate::config::AudioConfig;
let config = AudioConfig::new()
.with_sample_rate(sample_rate)
.with_buffer_size(buf_size)
.with_channels(channels);
let backend = PipewireBackend::new(config).ok()?;
let ptr = AudioIoPtr::from_ref(&backend as &dyn AudioIo);
let rings = backend.rings();
backend.start().ok()?;
Some((Box::new(backend) as Box<dyn AudioIo>, rings, ptr))
}