Add detailed logging for CPAL device enumeration
Logs now show: - Device index - Device name - Is default - Supported configs (channels/sample rates) This helps identify devices when pretty names aren't clear.
This commit is contained in:
1 parent
1f13370073
commit
cb696aca60
1 file changed
+33
-12
@@ -576,24 +576,45 @@ pub fn get_pipewire_sinks() -> Result<Vec<PipewireSink>, String> {
|
|||||||
let sinks: Vec<PipewireSink> = host
|
let sinks: Vec<PipewireSink> = host
|
||||||
.output_devices()
|
.output_devices()
|
||||||
.map_err(|e| format!("Failed to enumerate devices: {}", e))?
|
.map_err(|e| format!("Failed to enumerate devices: {}", e))?
|
||||||
.filter_map(|device| {
|
.enumerate()
|
||||||
device.name().ok().map(|name| {
|
.filter_map(|(idx, device)| {
|
||||||
let is_default = default_device_name.as_ref().map(|d| d == &name).unwrap_or(false);
|
match device.name() {
|
||||||
|
Ok(name) => {
|
||||||
|
let is_default = default_device_name.as_ref().map(|d| d == &name).unwrap_or(false);
|
||||||
|
|
||||||
// CRITICAL: Use CPAL device name as both name and description
|
// Get detailed device info for logging
|
||||||
// This ensures the name we save is the exact name CPAL can find later
|
let configs_info = device.supported_output_configs()
|
||||||
PipewireSink {
|
.ok()
|
||||||
name: name.clone(),
|
.map(|configs| {
|
||||||
description: name, // CPAL names are already user-friendly in PipeWire
|
let config_strs: Vec<String> = configs
|
||||||
volume: None, // Volume not available via CPAL
|
.take(3) // Just first 3 configs for brevity
|
||||||
is_default,
|
.map(|c| format!("{}ch/{}Hz", c.channels(), c.max_sample_rate().0))
|
||||||
|
.collect();
|
||||||
|
config_strs.join(", ")
|
||||||
|
})
|
||||||
|
.unwrap_or_else(|| "no configs".to_string());
|
||||||
|
|
||||||
|
log::info!(" [{}] Device: '{}' (default: {}) - Configs: {}",
|
||||||
|
idx, name, is_default, configs_info);
|
||||||
|
|
||||||
|
// CRITICAL: Use CPAL device name as both name and description
|
||||||
|
// This ensures the name we save is the exact name CPAL can find later
|
||||||
|
Some(PipewireSink {
|
||||||
|
name: name.clone(),
|
||||||
|
description: name, // CPAL names are already user-friendly in PipeWire
|
||||||
|
volume: None, // Volume not available via CPAL
|
||||||
|
is_default,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
Err(e) => {
|
||||||
|
log::warn!(" [{}] Failed to get device name: {}", idx, e);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
log::info!("Found {} audio output devices via CPAL", sinks.len());
|
log::info!("Found {} audio output devices via CPAL", sinks.len());
|
||||||
log::info!("Devices: {:?}", sinks.iter().map(|s| &s.name).collect::<Vec<_>>());
|
|
||||||
|
|
||||||
Ok(sinks)
|
Ok(sinks)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user