aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/audiocontext.rs33
-rw-r--r--components/script/dom/mediastreamaudiosourcenode.rs13
-rw-r--r--components/script/dom/mediastreamtrackaudiosourcenode.rs13
-rw-r--r--components/script/dom/webidls/AudioContext.webidl6
4 files changed, 48 insertions, 17 deletions
diff --git a/components/script/dom/audiocontext.rs b/components/script/dom/audiocontext.rs
index f7fb005f18d..9a5160773f9 100644
--- a/components/script/dom/audiocontext.rs
+++ b/components/script/dom/audiocontext.rs
@@ -9,6 +9,7 @@ use crate::dom::bindings::codegen::Bindings::AudioContextBinding::{
use crate::dom::bindings::codegen::Bindings::AudioContextBinding::{
AudioContextOptions, AudioTimestamp,
};
+use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::AudioNodeOptions;
use crate::dom::bindings::codegen::Bindings::BaseAudioContextBinding::AudioContextState;
use crate::dom::bindings::codegen::Bindings::BaseAudioContextBinding::BaseAudioContextBinding::BaseAudioContextMethods;
use crate::dom::bindings::codegen::UnionTypes::AudioContextLatencyCategoryOrDouble;
@@ -20,6 +21,11 @@ use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
use crate::dom::bindings::root::DomRoot;
use crate::dom::htmlmediaelement::HTMLMediaElement;
use crate::dom::mediaelementaudiosourcenode::MediaElementAudioSourceNode;
+use crate::dom::mediastream::MediaStream;
+use crate::dom::mediastreamaudiodestinationnode::MediaStreamAudioDestinationNode;
+use crate::dom::mediastreamaudiosourcenode::MediaStreamAudioSourceNode;
+use crate::dom::mediastreamtrack::MediaStreamTrack;
+use crate::dom::mediastreamtrackaudiosourcenode::MediaStreamTrackAudioSourceNode;
use crate::dom::promise::Promise;
use crate::dom::window::Window;
use crate::realms::InRealm;
@@ -254,6 +260,33 @@ impl AudioContextMethods for AudioContext {
let window = global.as_window();
MediaElementAudioSourceNode::new(window, self, media_element)
}
+
+ /// https://webaudio.github.io/web-audio-api/#dom-audiocontext-createmediastreamsource
+ fn CreateMediaStreamSource(
+ &self,
+ stream: &MediaStream,
+ ) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
+ let global = self.global();
+ let window = global.as_window();
+ MediaStreamAudioSourceNode::new(window, self, stream)
+ }
+
+ /// https://webaudio.github.io/web-audio-api/#dom-audiocontext-createmediastreamtracksource
+ fn CreateMediaStreamTrackSource(
+ &self,
+ track: &MediaStreamTrack,
+ ) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
+ let global = self.global();
+ let window = global.as_window();
+ MediaStreamTrackAudioSourceNode::new(window, self, track)
+ }
+
+ /// https://webaudio.github.io/web-audio-api/#dom-audiocontext-createmediastreamdestination
+ fn CreateMediaStreamDestination(&self) -> Fallible<DomRoot<MediaStreamAudioDestinationNode>> {
+ let global = self.global();
+ let window = global.as_window();
+ MediaStreamAudioDestinationNode::new(window, self, &AudioNodeOptions::empty())
+ }
}
impl From<AudioContextLatencyCategory> for LatencyCategory {
diff --git a/components/script/dom/mediastreamaudiosourcenode.rs b/components/script/dom/mediastreamaudiosourcenode.rs
index dc0803adec3..f6925af75c3 100644
--- a/components/script/dom/mediastreamaudiosourcenode.rs
+++ b/components/script/dom/mediastreamaudiosourcenode.rs
@@ -27,10 +27,9 @@ impl MediaStreamAudioSourceNode {
#[allow(unrooted_must_root)]
pub fn new_inherited(
context: &AudioContext,
- options: &MediaStreamAudioSourceOptions,
+ stream: &MediaStream,
) -> Fallible<MediaStreamAudioSourceNode> {
- let track = options
- .mediaStream
+ let track = stream
.get_tracks()
.iter()
.find(|t| t.ty() == MediaStreamType::Audio)
@@ -45,7 +44,7 @@ impl MediaStreamAudioSourceNode {
)?;
Ok(MediaStreamAudioSourceNode {
node,
- stream: Dom::from_ref(&options.mediaStream),
+ stream: Dom::from_ref(&stream),
})
}
@@ -53,9 +52,9 @@ impl MediaStreamAudioSourceNode {
pub fn new(
window: &Window,
context: &AudioContext,
- options: &MediaStreamAudioSourceOptions,
+ stream: &MediaStream,
) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
- let node = MediaStreamAudioSourceNode::new_inherited(context, options)?;
+ let node = MediaStreamAudioSourceNode::new_inherited(context, stream)?;
Ok(reflect_dom_object(Box::new(node), window))
}
@@ -65,7 +64,7 @@ impl MediaStreamAudioSourceNode {
context: &AudioContext,
options: &MediaStreamAudioSourceOptions,
) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
- MediaStreamAudioSourceNode::new(window, context, options)
+ MediaStreamAudioSourceNode::new(window, context, &options.mediaStream)
}
}
diff --git a/components/script/dom/mediastreamtrackaudiosourcenode.rs b/components/script/dom/mediastreamtrackaudiosourcenode.rs
index 14cc99df056..6399ee5f6a4 100644
--- a/components/script/dom/mediastreamtrackaudiosourcenode.rs
+++ b/components/script/dom/mediastreamtrackaudiosourcenode.rs
@@ -24,11 +24,10 @@ impl MediaStreamTrackAudioSourceNode {
#[allow(unrooted_must_root)]
pub fn new_inherited(
context: &AudioContext,
- options: &MediaStreamTrackAudioSourceOptions,
+ track: &MediaStreamTrack,
) -> Fallible<MediaStreamTrackAudioSourceNode> {
- let track = options.mediaStreamTrack.id();
let node = AudioNode::new_inherited(
- AudioNodeInit::MediaStreamSourceNode(track),
+ AudioNodeInit::MediaStreamSourceNode(track.id()),
&context.upcast(),
Default::default(),
0, // inputs
@@ -36,7 +35,7 @@ impl MediaStreamTrackAudioSourceNode {
)?;
Ok(MediaStreamTrackAudioSourceNode {
node,
- track: Dom::from_ref(&options.mediaStreamTrack),
+ track: Dom::from_ref(&track),
})
}
@@ -44,9 +43,9 @@ impl MediaStreamTrackAudioSourceNode {
pub fn new(
window: &Window,
context: &AudioContext,
- options: &MediaStreamTrackAudioSourceOptions,
+ track: &MediaStreamTrack,
) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
- let node = MediaStreamTrackAudioSourceNode::new_inherited(context, options)?;
+ let node = MediaStreamTrackAudioSourceNode::new_inherited(context, track)?;
Ok(reflect_dom_object(Box::new(node), window))
}
@@ -56,6 +55,6 @@ impl MediaStreamTrackAudioSourceNode {
context: &AudioContext,
options: &MediaStreamTrackAudioSourceOptions,
) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
- MediaStreamTrackAudioSourceNode::new(window, context, options)
+ MediaStreamTrackAudioSourceNode::new(window, context, &options.mediaStreamTrack)
}
}
diff --git a/components/script/dom/webidls/AudioContext.webidl b/components/script/dom/webidls/AudioContext.webidl
index cd9e18edfa0..09d6693b690 100644
--- a/components/script/dom/webidls/AudioContext.webidl
+++ b/components/script/dom/webidls/AudioContext.webidl
@@ -34,7 +34,7 @@ interface AudioContext : BaseAudioContext {
Promise<void> close();
[Throws] MediaElementAudioSourceNode createMediaElementSource(HTMLMediaElement mediaElement);
- // MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
- // MediaStreamTrackAudioSourceNode createMediaStreamTrackSource(MediaStreamTrack mediaStreamTrack);
- // MediaStreamAudioDestinationNode createMediaStreamDestination();
+ [Throws] MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
+ [Throws] MediaStreamTrackAudioSourceNode createMediaStreamTrackSource(MediaStreamTrack mediaStreamTrack);
+ [Throws] MediaStreamAudioDestinationNode createMediaStreamDestination();
};