servo_media_audio/
media_stream_destination_node.rs1use crate::block::Chunk;
2use crate::node::{AudioNodeEngine, BlockInfo};
3use crate::node::{AudioNodeType, ChannelInfo};
4use servo_media_streams::MediaSocket;
5use crate::sink::AudioSink;
6
7#[derive(AudioNodeCommon)]
8pub(crate) struct MediaStreamDestinationNode {
9 channel_info: ChannelInfo,
10 sink: Box<dyn AudioSink + 'static>,
11}
12
13impl MediaStreamDestinationNode {
14 pub fn new(
15 socket: Box<dyn MediaSocket>,
16 sample_rate: f32,
17 sink: Box<dyn AudioSink + 'static>,
18 channel_info: ChannelInfo,
19 ) -> Self {
20 sink.init_stream(channel_info.count, sample_rate, socket)
21 .expect("init_stream failed");
22 sink.play().expect("Sink didn't start");
23 MediaStreamDestinationNode { channel_info, sink }
24 }
25}
26
27impl AudioNodeEngine for MediaStreamDestinationNode {
28 fn node_type(&self) -> AudioNodeType {
29 AudioNodeType::MediaStreamDestinationNode
30 }
31
32 fn process(&mut self, inputs: Chunk, _: &BlockInfo) -> Chunk {
33 self.sink
34 .push_data(inputs)
35 .expect("Pushing to stream failed");
36 Chunk::default()
37 }
38
39 fn output_count(&self) -> u32 {
40 0
41 }
42}