1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//! Windows device backend orchestrator: cross-domain capability/permission probing
//! ([`support`]/[`request_permission`]), cross-domain device enumeration ([`enumerate`]),
//! and audio hotplug ([`WindowsDeviceHotplug`]).
//!
//! **Split out of the original unified `mediaway-device-windows`** — see
//! `mediaway-device/adr/0007-domain-crate-split.md`. Per-domain capture backends now live
//! in their own crates: `mediaway-device-windows-camera`, `mediaway-device-windows-desktop`,
//! `mediaway-device-windows-audio`. This crate depends on all three (for [`support`]/
//! [`request_permission`]/[`enumerate`]'s cross-`DeviceKind` dispatch) — none of them depend
//! back on this one, so there is no cycle.
//!
//! - [`WindowsDeviceHotplug::open`] — `IMMNotificationClient` audio hotplug watcher
//! (Microphone/Loopback only, `mediaway-device` ADR-0005 § Hotplug). Stays here (not one
//! of the domain crates) because it watches kinds spanning both Audio I/O and Desktop.
//! - [`enumerate`] — live device listing (`mediaway-device` ADR-0005), dispatching by
//! `DeviceKind` to `crate::windows_camera::enumerate_cameras`/
//! `crate::windows_desktop::enumerate_outputs`/this crate's own WASAPI endpoint
//! enumeration.
//! - [`support`]/[`request_permission`] — live capability/permission probes
//! ([`mediaway-device` ADR-0003](../../mediaway-device/adr/0003-capability-and-permission-probe.md)).
//!
//! Policy: [ADR-0001](adr/0001-dxgi-desktop-duplication.md), [ADR-0002](adr/0002-wasapi-capture.md),
//! [ADR-0003](adr/0003-capture-exclusion.md), [ADR-0004](adr/0004-wgc-window-capture.md),
//! [ADR-0005](adr/0005-wasapi-playback.md) — historical, from before this crate split;
//! superseded in scope (not content) by the crates named above.
// crate-root doc became module doc (ADR-0021 merge)
pub use ;
pub use enumerate;
pub use WindowsDeviceHotplug;
pub use ;
/// Serializes tests that touch real hardware (WASAPI hotplug/`MMDeviceEnumerator`) across
/// `lib_tests.rs`/`capabilities_tests.rs`/`enumeration_tests.rs`. Rust's default test
/// harness runs `#[test]`s concurrently on separate threads; concurrent real WASAPI
/// sessions from this crate's `_or_skip` tests reproduced a genuine `STATUS_ACCESS_VIOLATION`
/// crash before this lock was added — this is not a hypothetical concern.
pub static HARDWARE_TEST_LOCK: Mutex = new;