Skip to content

Commit 028f2e5

Browse files
committed
ALSA: hardcode builtins virtual devices
1 parent b996a61 commit 028f2e5

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

src/host/alsa/enumerate.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ use std::sync::{Arc, Mutex};
55

66
/// ALSA's implementation for `Devices`.
77
pub struct Devices {
8+
builtin_pos: usize,
89
card_iter: alsa::card::Iter,
910
}
1011

1112
impl Devices {
1213
pub fn new() -> Result<Self, DevicesError> {
1314
Ok(Devices {
15+
builtin_pos: 0,
1416
card_iter: alsa::card::Iter::new(),
1517
})
1618
}
@@ -19,10 +21,27 @@ impl Devices {
1921
unsafe impl Send for Devices {}
2022
unsafe impl Sync for Devices {}
2123

24+
const BUILTINS : [&'static str; 5] = ["default", "pipewire", "pulse", "jack", "oss"];
25+
2226
impl Iterator for Devices {
2327
type Item = Device;
2428

2529
fn next(&mut self) -> Option<Device> {
30+
while (self.builtin_pos < BUILTINS.len())
31+
{
32+
let pos = self.builtin_pos;
33+
self.builtin_pos += 1;
34+
let name = BUILTINS[pos];
35+
36+
if let Ok(handles) = DeviceHandles::open(&name) {
37+
return Some(Device {
38+
name: name.to_string(),
39+
pcm_id: name.to_string(),
40+
handles: Arc::new(Mutex::new(handles)),
41+
});
42+
}
43+
}
44+
2645
loop {
2746
let Some(res) = self.card_iter.next() else {
2847
return None;

0 commit comments

Comments
 (0)