use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct PipewireConfig {
#[serde(default = "PipewireConfig::default_bit_perfect_enabled")]
pub bit_perfect_enabled: bool,
}
impl PipewireConfig {
fn default_bit_perfect_enabled() -> bool {
false
}
pub fn is_available(&self) -> bool {
#[cfg(target_os = "linux")]
{
self.bit_perfect_enabled
}
#[cfg(not(target_os = "linux"))]
{
false
}
}
}
pub fn resolve_bit_perfect_rate(song_rate: u32, supported_rates: &[u32]) -> u32 {
if supported_rates.contains(&song_rate) {
return song_rate;
}
let best_rate = supported_rates
.iter()
.filter(|&&rate| song_rate.is_multiple_of(rate))
.max()
.copied();
if let Some(rate) = best_rate {
return rate;
}
if supported_rates.contains(&44100) {
44100
} else {
supported_rates.first().copied().unwrap_or(44100)
}
}
impl Default for PipewireConfig {
fn default() -> Self {
Self {
bit_perfect_enabled: Self::default_bit_perfect_enabled(),
}
}
}