mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Add AudioContext constructors for media stream nodes
This commit is contained in:
parent
0b998a1d1c
commit
718304709e
4 changed files with 48 additions and 17 deletions
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue