mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01: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::{
|
use crate::dom::bindings::codegen::Bindings::AudioContextBinding::{
|
||||||
AudioContextOptions, AudioTimestamp,
|
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::AudioContextState;
|
||||||
use crate::dom::bindings::codegen::Bindings::BaseAudioContextBinding::BaseAudioContextBinding::BaseAudioContextMethods;
|
use crate::dom::bindings::codegen::Bindings::BaseAudioContextBinding::BaseAudioContextBinding::BaseAudioContextMethods;
|
||||||
use crate::dom::bindings::codegen::UnionTypes::AudioContextLatencyCategoryOrDouble;
|
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::bindings::root::DomRoot;
|
||||||
use crate::dom::htmlmediaelement::HTMLMediaElement;
|
use crate::dom::htmlmediaelement::HTMLMediaElement;
|
||||||
use crate::dom::mediaelementaudiosourcenode::MediaElementAudioSourceNode;
|
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::promise::Promise;
|
||||||
use crate::dom::window::Window;
|
use crate::dom::window::Window;
|
||||||
use crate::realms::InRealm;
|
use crate::realms::InRealm;
|
||||||
|
@ -254,6 +260,33 @@ impl AudioContextMethods for AudioContext {
|
||||||
let window = global.as_window();
|
let window = global.as_window();
|
||||||
MediaElementAudioSourceNode::new(window, self, media_element)
|
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 {
|
impl From<AudioContextLatencyCategory> for LatencyCategory {
|
||||||
|
|
|
@ -27,10 +27,9 @@ impl MediaStreamAudioSourceNode {
|
||||||
#[allow(unrooted_must_root)]
|
#[allow(unrooted_must_root)]
|
||||||
pub fn new_inherited(
|
pub fn new_inherited(
|
||||||
context: &AudioContext,
|
context: &AudioContext,
|
||||||
options: &MediaStreamAudioSourceOptions,
|
stream: &MediaStream,
|
||||||
) -> Fallible<MediaStreamAudioSourceNode> {
|
) -> Fallible<MediaStreamAudioSourceNode> {
|
||||||
let track = options
|
let track = stream
|
||||||
.mediaStream
|
|
||||||
.get_tracks()
|
.get_tracks()
|
||||||
.iter()
|
.iter()
|
||||||
.find(|t| t.ty() == MediaStreamType::Audio)
|
.find(|t| t.ty() == MediaStreamType::Audio)
|
||||||
|
@ -45,7 +44,7 @@ impl MediaStreamAudioSourceNode {
|
||||||
)?;
|
)?;
|
||||||
Ok(MediaStreamAudioSourceNode {
|
Ok(MediaStreamAudioSourceNode {
|
||||||
node,
|
node,
|
||||||
stream: Dom::from_ref(&options.mediaStream),
|
stream: Dom::from_ref(&stream),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,9 +52,9 @@ impl MediaStreamAudioSourceNode {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
window: &Window,
|
window: &Window,
|
||||||
context: &AudioContext,
|
context: &AudioContext,
|
||||||
options: &MediaStreamAudioSourceOptions,
|
stream: &MediaStream,
|
||||||
) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
|
) -> 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))
|
Ok(reflect_dom_object(Box::new(node), window))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +64,7 @@ impl MediaStreamAudioSourceNode {
|
||||||
context: &AudioContext,
|
context: &AudioContext,
|
||||||
options: &MediaStreamAudioSourceOptions,
|
options: &MediaStreamAudioSourceOptions,
|
||||||
) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
|
) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
|
||||||
MediaStreamAudioSourceNode::new(window, context, options)
|
MediaStreamAudioSourceNode::new(window, context, &options.mediaStream)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,11 +24,10 @@ impl MediaStreamTrackAudioSourceNode {
|
||||||
#[allow(unrooted_must_root)]
|
#[allow(unrooted_must_root)]
|
||||||
pub fn new_inherited(
|
pub fn new_inherited(
|
||||||
context: &AudioContext,
|
context: &AudioContext,
|
||||||
options: &MediaStreamTrackAudioSourceOptions,
|
track: &MediaStreamTrack,
|
||||||
) -> Fallible<MediaStreamTrackAudioSourceNode> {
|
) -> Fallible<MediaStreamTrackAudioSourceNode> {
|
||||||
let track = options.mediaStreamTrack.id();
|
|
||||||
let node = AudioNode::new_inherited(
|
let node = AudioNode::new_inherited(
|
||||||
AudioNodeInit::MediaStreamSourceNode(track),
|
AudioNodeInit::MediaStreamSourceNode(track.id()),
|
||||||
&context.upcast(),
|
&context.upcast(),
|
||||||
Default::default(),
|
Default::default(),
|
||||||
0, // inputs
|
0, // inputs
|
||||||
|
@ -36,7 +35,7 @@ impl MediaStreamTrackAudioSourceNode {
|
||||||
)?;
|
)?;
|
||||||
Ok(MediaStreamTrackAudioSourceNode {
|
Ok(MediaStreamTrackAudioSourceNode {
|
||||||
node,
|
node,
|
||||||
track: Dom::from_ref(&options.mediaStreamTrack),
|
track: Dom::from_ref(&track),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,9 +43,9 @@ impl MediaStreamTrackAudioSourceNode {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
window: &Window,
|
window: &Window,
|
||||||
context: &AudioContext,
|
context: &AudioContext,
|
||||||
options: &MediaStreamTrackAudioSourceOptions,
|
track: &MediaStreamTrack,
|
||||||
) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
|
) -> 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))
|
Ok(reflect_dom_object(Box::new(node), window))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +55,6 @@ impl MediaStreamTrackAudioSourceNode {
|
||||||
context: &AudioContext,
|
context: &AudioContext,
|
||||||
options: &MediaStreamTrackAudioSourceOptions,
|
options: &MediaStreamTrackAudioSourceOptions,
|
||||||
) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
|
) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
|
||||||
MediaStreamTrackAudioSourceNode::new(window, context, options)
|
MediaStreamTrackAudioSourceNode::new(window, context, &options.mediaStreamTrack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ interface AudioContext : BaseAudioContext {
|
||||||
Promise<void> close();
|
Promise<void> close();
|
||||||
|
|
||||||
[Throws] MediaElementAudioSourceNode createMediaElementSource(HTMLMediaElement mediaElement);
|
[Throws] MediaElementAudioSourceNode createMediaElementSource(HTMLMediaElement mediaElement);
|
||||||
// MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
|
[Throws] MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
|
||||||
// MediaStreamTrackAudioSourceNode createMediaStreamTrackSource(MediaStreamTrack mediaStreamTrack);
|
[Throws] MediaStreamTrackAudioSourceNode createMediaStreamTrackSource(MediaStreamTrack mediaStreamTrack);
|
||||||
// MediaStreamAudioDestinationNode createMediaStreamDestination();
|
[Throws] MediaStreamAudioDestinationNode createMediaStreamDestination();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue