servo_media_audio/
media_stream_source_node.rs1use crate::AudioStreamReader;
2use crate::block::Chunk;
3use crate::node::{AudioNodeEngine, BlockInfo};
4use crate::node::{AudioNodeType, ChannelInfo};
5use crate::param::{Param, ParamType};
6
7#[derive(AudioNodeCommon)]
8pub(crate) struct MediaStreamSourceNode {
9 channel_info: ChannelInfo,
10 reader: Box<dyn AudioStreamReader + Send>,
11 playing: bool,
12}
13
14impl MediaStreamSourceNode {
15 pub fn new(reader: Box<dyn AudioStreamReader + Send>, channel_info: ChannelInfo) -> Self {
16 Self {
17 channel_info,
18 reader,
19 playing: false,
20 }
21 }
22}
23
24impl AudioNodeEngine for MediaStreamSourceNode {
25 fn node_type(&self) -> AudioNodeType {
26 AudioNodeType::MediaStreamSourceNode
27 }
28
29 fn process(&mut self, mut inputs: Chunk, _: &BlockInfo) -> Chunk {
30 debug_assert!(inputs.len() == 0);
31
32 if !self.playing {
33 self.playing = true;
34 self.reader.start();
35 }
36
37 let block = self.reader.pull();
38 inputs.blocks.push(block);
39
40 inputs
41 }
42
43 fn input_count(&self) -> u32 {
44 0
45 }
46
47 fn get_param(&mut self, _: ParamType) -> &mut Param {
48 panic!("No params on MediaStreamSourceNode");
49 }
50}