Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement MediaStreamAudioDestinationNode, MediaStreamAudioSourceNode, MediaStreamTrackAudioSourceNode #27143

Merged
merged 10 commits into from Jul 3, 2020

Add MedaStreamAudioDestinationNode::stream

  • Loading branch information
Manishearth committed Jul 2, 2020
commit 2a838d935bdb3ac2d74be619a183cacb3fd17bcd
@@ -8,10 +8,12 @@ use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::AudioNodeOptions;
use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::{
ChannelCountMode, ChannelInterpretation,
};
use crate::dom::bindings::codegen::Bindings::MediaStreamAudioDestinationNodeBinding::MediaStreamAudioDestinationNodeMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::mediastream::MediaStream;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use servo_media::audio::node::AudioNodeInit;
@@ -21,6 +23,7 @@ use servo_media::ServoMedia;
#[dom_struct]
pub struct MediaStreamAudioDestinationNode {
node: AudioNode,
stream: Dom<MediaStream>,
}

impl MediaStreamAudioDestinationNode {
@@ -30,7 +33,8 @@ impl MediaStreamAudioDestinationNode {
options: &AudioNodeOptions,
) -> Fallible<MediaStreamAudioDestinationNode> {
let media = ServoMedia::get().unwrap();
let (socket, _id) = media.create_stream_and_socket(MediaStreamType::Audio);
let (socket, id) = media.create_stream_and_socket(MediaStreamType::Audio);
let stream = MediaStream::new_single(&context.global(), id, MediaStreamType::Audio);
let node_options = options.unwrap_or(
2,
ChannelCountMode::Explicit,
@@ -43,7 +47,10 @@ impl MediaStreamAudioDestinationNode {
1, // inputs
0, // outputs
)?;
Ok(MediaStreamAudioDestinationNode { node })
Ok(MediaStreamAudioDestinationNode {
node,
stream: Dom::from_ref(&stream),
})
}

#[allow(unrooted_must_root)]
@@ -65,3 +72,10 @@ impl MediaStreamAudioDestinationNode {
MediaStreamAudioDestinationNode::new(window, context, options)
}
}

impl MediaStreamAudioDestinationNodeMethods for MediaStreamAudioDestinationNode {
/// https://webaudio.github.io/web-audio-api/#dom-mediastreamaudiodestinationnode-stream
fn Stream(&self) -> DomRoot<MediaStream> {
DomRoot::from_ref(&self.stream)
}
}
@@ -9,5 +9,5 @@
[Exposed=Window]
interface MediaStreamAudioDestinationNode : AudioNode {
[Throws] constructor (AudioContext context, optional AudioNodeOptions options = {});
// readonly attribute MediaStream stream;
};
readonly attribute MediaStream stream;
};
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.