use super::audio::AudioQualitySettings;
use super::network::NetworkThresholds;
use super::spatial::SpatialQualitySettings;
use super::types::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualitySettings {
pub audio_quality: AudioQualitySettings,
pub spatial_quality: SpatialQualitySettings,
pub adaptive_quality: AdaptiveQualitySettings,
pub performance_monitoring: PerformanceMonitoringSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdaptiveQualitySettings {
pub enabled: bool,
pub algorithm: QualityAdaptationAlgorithm,
pub adaptation_speed: AdaptationSpeed,
pub quality_bounds: QualityBounds,
pub network_thresholds: NetworkThresholds,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualityBounds {
pub min_quality: f32,
pub max_quality: f32,
pub step_size: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceMonitoringSettings {
pub enabled: bool,
pub interval: u32,
pub metrics: Vec<PerformanceMetric>,
pub history_retention: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualityInfo {
pub quality_score: f32,
pub estimated_latency: f32,
pub packet_loss: f32,
pub jitter: f32,
pub snr: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceStats {
pub avg_cpu_usage: f32,
pub peak_cpu_usage: f32,
pub avg_memory_usage: f32,
pub peak_memory_usage: f32,
pub audio_processing_time: f32,
pub network_processing_time: f32,
}
impl Default for QualitySettings {
fn default() -> Self {
Self {
audio_quality: AudioQualitySettings::default(),
spatial_quality: SpatialQualitySettings::default(),
adaptive_quality: AdaptiveQualitySettings::default(),
performance_monitoring: PerformanceMonitoringSettings::default(),
}
}
}
impl Default for AdaptiveQualitySettings {
fn default() -> Self {
Self {
enabled: true,
algorithm: QualityAdaptationAlgorithm::Hybrid,
adaptation_speed: AdaptationSpeed::Medium,
quality_bounds: QualityBounds::default(),
network_thresholds: NetworkThresholds::default(),
}
}
}
impl Default for QualityBounds {
fn default() -> Self {
Self {
min_quality: 0.3,
max_quality: 1.0,
step_size: 0.1,
}
}
}
impl Default for PerformanceMonitoringSettings {
fn default() -> Self {
Self {
enabled: true,
interval: 1000, metrics: vec![
PerformanceMetric::AudioLatency,
PerformanceMetric::NetworkLatency,
PerformanceMetric::PacketLoss,
PerformanceMetric::AudioQuality,
],
history_retention: 300, }
}
}