use crate::CaptureError;
use crate::audio::{
AudioCapture, AudioCaptureConfig, AudioPlayback, AudioPlaybackConfig, PlaybackError,
};
use mediaway_common::{Bytes, CodecKind, Rational, StreamInfo};
pub struct WindowsWasapiCapture {
_priv: (),
}
impl WindowsWasapiCapture {
pub const fn open_microphone(_config: &AudioCaptureConfig) -> Result<Self, CaptureError> {
Err(CaptureError::Unsupported)
}
}
impl AudioCapture for WindowsWasapiCapture {
fn stream_info(&self) -> &StreamInfo {
closed_audio_info()
}
fn poll_frame(&mut self) -> Result<Option<mediaway_common::AudioFrame>, CaptureError> {
Err(CaptureError::Unsupported)
}
fn close(&mut self) -> Result<(), CaptureError> {
Err(CaptureError::Unsupported)
}
}
pub struct WindowsWasapiPlayback {
_priv: (),
}
impl WindowsWasapiPlayback {
pub const fn open(_config: &AudioPlaybackConfig) -> Result<Self, PlaybackError> {
Err(PlaybackError::Unsupported)
}
}
impl AudioPlayback for WindowsWasapiPlayback {
fn stream_info(&self) -> &StreamInfo {
closed_audio_info()
}
fn write_frame(&mut self, _frame: mediaway_common::AudioFrame) -> Result<(), PlaybackError> {
Err(PlaybackError::Unsupported)
}
fn underrun_count(&self) -> u64 {
0
}
fn close(&mut self) -> Result<(), PlaybackError> {
Err(PlaybackError::Unsupported)
}
}
fn closed_audio_info() -> &'static StreamInfo {
use std::sync::OnceLock;
static INFO: OnceLock<StreamInfo> = OnceLock::new();
INFO.get_or_init(|| StreamInfo::Audio {
id: 0,
codec: CodecKind::RawAudio,
time_base: Rational::new(1, 48_000),
sample_rate: 0,
channels: 0,
extra_data: Bytes::new(),
})
}