Skip to content

Commit 4d97b50

Browse files
committed
refactor: merge create_device_id as method of internal DeviceId struct
1 parent d7cd471 commit 4d97b50

File tree

3 files changed

+34
-30
lines changed

3 files changed

+34
-30
lines changed

src/io/cpal.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use super::{AudioBackendManager, RenderThreadInit};
1515
use crate::buffer::AudioBuffer;
1616
use crate::context::AudioContextOptions;
1717
use crate::io::microphone::MicrophoneRender;
18-
use crate::media_devices::{create_device_id, MediaDeviceInfo, MediaDeviceInfoKind};
18+
use crate::media_devices::{MediaDeviceInfo, MediaDeviceInfoKind};
1919
use crate::render::RenderThread;
2020
use crate::{AtomicF64, MAX_CHANNELS};
2121

@@ -419,7 +419,7 @@ impl AudioBackendManager for CpalBackend {
419419
let mut index = 0;
420420

421421
loop {
422-
let device_id = create_device_id(
422+
let device_id = crate::media_devices::DeviceId::as_string(
423423
kind as u8,
424424
"cpal".to_string(),
425425
device.name().unwrap(),

src/io/cubeb.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use super::{AudioBackendManager, RenderThreadInit};
55
use crate::buffer::AudioBuffer;
66
use crate::context::AudioContextOptions;
77
use crate::io::microphone::MicrophoneRender;
8-
use crate::media_devices::{create_device_id, MediaDeviceInfo, MediaDeviceInfoKind};
8+
use crate::media_devices::{MediaDeviceInfo, MediaDeviceInfoKind};
99
use crate::render::RenderThread;
1010
use crate::{MAX_CHANNELS, RENDER_QUANTUM_SIZE};
1111

@@ -410,7 +410,7 @@ impl AudioBackendManager for CubebBackend {
410410
let mut index = 0;
411411

412412
loop {
413-
let device_id = create_device_id(
413+
let device_id = crate::media_devices::DeviceId::as_string(
414414
kind as u8,
415415
"cubeb".to_string(),
416416
device.friendly_name().unwrap().into(),

src/media_devices/mod.rs

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,41 +27,45 @@ pub fn enumerate_devices_sync() -> Vec<MediaDeviceInfo> {
2727
crate::io::enumerate_devices_sync()
2828
}
2929

30-
/// Describes input/output type of a media device
31-
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
32-
pub enum MediaDeviceInfoKind {
33-
VideoInput,
34-
AudioInput,
35-
AudioOutput,
36-
}
37-
30+
// Internal struct to derive a stable id for a given input / output device
31+
// cf. https://github.com/orottier/web-audio-api-rs/issues/356
3832
#[derive(Hash)]
39-
struct DeviceIdInfo {
33+
pub(crate) struct DeviceId {
4034
kind: u8,
4135
host: String,
4236
device_name: String,
4337
num_channels: u16,
4438
index: u8,
4539
}
4640

47-
pub(crate) fn create_device_id(
48-
kind: u8,
49-
host: String,
50-
device_name: String,
51-
num_channels: u16,
52-
index: u8,
53-
) -> String {
54-
let device_info = DeviceIdInfo {
55-
kind,
56-
host,
57-
device_name,
58-
num_channels,
59-
index,
60-
};
41+
impl DeviceId {
42+
pub(crate) fn as_string(
43+
kind: u8,
44+
host: String,
45+
device_name: String,
46+
num_channels: u16,
47+
index: u8,
48+
) -> String {
49+
let device_info = Self {
50+
kind,
51+
host,
52+
device_name,
53+
num_channels,
54+
index,
55+
};
56+
57+
let mut hasher = FxHasher::default();
58+
device_info.hash(&mut hasher);
59+
format!("{}", hasher.finish())
60+
}
61+
}
6162

62-
let mut hasher = FxHasher::default();
63-
device_info.hash(&mut hasher);
64-
format!("{}", hasher.finish())
63+
/// Describes input/output type of a media device
64+
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
65+
pub enum MediaDeviceInfoKind {
66+
VideoInput,
67+
AudioInput,
68+
AudioOutput,
6569
}
6670

6771
/// Describes a single media input or output device

0 commit comments

Comments
 (0)