diff options
-rw-r--r-- | components/script/dom/audiodestinationnode.rs | 4 | ||||
-rw-r--r-- | components/script/dom/audionode.rs | 6 | ||||
-rw-r--r-- | components/script/dom/audioscheduledsourcenode.rs | 3 | ||||
-rw-r--r-- | components/script/dom/baseaudiocontext.rs | 5 |
4 files changed, 15 insertions, 3 deletions
diff --git a/components/script/dom/audiodestinationnode.rs b/components/script/dom/audiodestinationnode.rs index 0d3b5798c87..83cfedb8584 100644 --- a/components/script/dom/audiodestinationnode.rs +++ b/components/script/dom/audiodestinationnode.rs @@ -21,7 +21,9 @@ impl AudioDestinationNode { fn new_inherited(context: &BaseAudioContext, options: &AudioNodeOptions) -> AudioDestinationNode { AudioDestinationNode { - node: AudioNode::new_inherited(AudioNodeType::DestinationNode, context, options, 1, 1), + node: AudioNode::new_inherited(AudioNodeType::DestinationNode, + Some(context.destination_node()), + context, options, 1, 1), } } diff --git a/components/script/dom/audionode.rs b/components/script/dom/audionode.rs index c0c6668106b..e8c03fbd625 100644 --- a/components/script/dom/audionode.rs +++ b/components/script/dom/audionode.rs @@ -34,13 +34,17 @@ pub struct AudioNode { impl AudioNode { pub fn new_inherited(node_type: AudioNodeType, + node_id: Option<NodeId>, context: &BaseAudioContext, options: &AudioNodeOptions, number_of_inputs: u32, number_of_outputs: u32) -> AudioNode { + let node_id = node_id.unwrap_or_else(|| { + context.audio_context_impl().create_node(node_type) + }); AudioNode { reflector_: Reflector::new(), - node_id: context.audio_context_impl().create_node(node_type), + node_id, context: DomRoot::from_ref(context), number_of_inputs, number_of_outputs, diff --git a/components/script/dom/audioscheduledsourcenode.rs b/components/script/dom/audioscheduledsourcenode.rs index c6d495f90a1..6e430cf8fed 100644 --- a/components/script/dom/audioscheduledsourcenode.rs +++ b/components/script/dom/audioscheduledsourcenode.rs @@ -21,7 +21,8 @@ impl AudioScheduledSourceNode { number_of_inputs: u32, number_of_outputs: u32) -> AudioScheduledSourceNode { AudioScheduledSourceNode { - node: AudioNode::new_inherited(node_type, context, options, number_of_inputs, number_of_outputs), + node: AudioNode::new_inherited(node_type, None /* node_id */, + context, options, number_of_inputs, number_of_outputs), } } } diff --git a/components/script/dom/baseaudiocontext.rs b/components/script/dom/baseaudiocontext.rs index 50092b81ebd..e0172b84d1c 100644 --- a/components/script/dom/baseaudiocontext.rs +++ b/components/script/dom/baseaudiocontext.rs @@ -24,6 +24,7 @@ use dom_struct::dom_struct; use servo_media::ServoMedia; use servo_media::audio::context::{AudioContext, ProcessingState}; use servo_media::audio::context::{OfflineAudioContextOptions, RealTimeAudioContextOptions}; +use servo_media::audio::graph::NodeId; use std::cell::Cell; use std::collections::VecDeque; use std::mem; @@ -96,6 +97,10 @@ impl BaseAudioContext { &self.audio_context_impl } + pub fn destination_node(&self) -> NodeId { + self.audio_context_impl.dest_node() + } + // https://webaudio.github.io/web-audio-api/#allowed-to-start pub fn is_allowed_to_start(&self) -> bool { self.state.get() == AudioContextState::Suspended |