servo_media_audio/
sink.rs1use crate::block::Chunk;
2use crate::render_thread::AudioRenderThreadMsg;
3use servo_media_streams::MediaSocket;
4use std::sync::mpsc::Sender;
5
6#[derive(Debug, PartialEq)]
7pub enum AudioSinkError {
8 Backend(String),
10 BufferPushFailed,
12 StateChangeFailed,
14}
15
16pub trait AudioSink: Send {
17 fn init(
18 &self,
19 sample_rate: f32,
20 render_thread_channel: Sender<AudioRenderThreadMsg>,
21 ) -> Result<(), AudioSinkError>;
22 fn init_stream(
23 &self,
24 channels: u8,
25 sample_rate: f32,
26 socket: Box<dyn MediaSocket>,
27 ) -> Result<(), AudioSinkError>;
28 fn play(&self) -> Result<(), AudioSinkError>;
29 fn stop(&self) -> Result<(), AudioSinkError>;
30 fn has_enough_data(&self) -> bool;
31 fn push_data(&self, chunk: Chunk) -> Result<(), AudioSinkError>;
32 fn set_eos_callback(
33 &self,
34 callback: Box<dyn Fn(Box<dyn AsRef<[f32]>>) + Send + Sync + 'static>,
35 );
36}