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 MediaStreamAudioDestinationNode

  • Loading branch information
Manishearth committed Jul 2, 2020
commit 6a001e7523e321059e915ffd86627a2609c4137c
@@ -0,0 +1,67 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */

use crate::dom::audiocontext::AudioContext;
use crate::dom::audionode::AudioNode;
use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::AudioNodeOptions;
use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::{
ChannelCountMode, ChannelInterpretation,
};
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::window::Window;
use dom_struct::dom_struct;
use servo_media::audio::node::AudioNodeInit;
use servo_media::streams::MediaStreamType;
use servo_media::ServoMedia;

#[dom_struct]
pub struct MediaStreamAudioDestinationNode {
node: AudioNode,
}

impl MediaStreamAudioDestinationNode {
#[allow(unrooted_must_root)]
pub fn new_inherited(
context: &AudioContext,
options: &AudioNodeOptions,
) -> Fallible<MediaStreamAudioDestinationNode> {
let media = ServoMedia::get().unwrap();
let (socket, _id) = media.create_stream_and_socket(MediaStreamType::Audio);
let node_options = options.unwrap_or(
2,
ChannelCountMode::Explicit,
ChannelInterpretation::Speakers,
);
let node = AudioNode::new_inherited(
AudioNodeInit::MediaStreamDestinationNode(socket),
&context.upcast(),
node_options,
1, // inputs
0, // outputs
)?;
Ok(MediaStreamAudioDestinationNode { node })
}

#[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &AudioContext,
options: &AudioNodeOptions,
) -> Fallible<DomRoot<MediaStreamAudioDestinationNode>> {
let node = MediaStreamAudioDestinationNode::new_inherited(context, options)?;
Ok(reflect_dom_object(Box::new(node), window))
}

#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
context: &AudioContext,
options: &AudioNodeOptions,
) -> Fallible<DomRoot<MediaStreamAudioDestinationNode>> {
MediaStreamAudioDestinationNode::new(window, context, options)
}
}
@@ -435,6 +435,7 @@ pub mod mediaquerylist;
pub mod mediaquerylistevent;
pub mod mediasession;
pub mod mediastream;
pub mod mediastreamaudiodestinationnode;
pub mod mediastreamtrack;
pub mod messagechannel;
pub mod messageevent;
@@ -0,0 +1,13 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
/*
* The origin of this IDL file is
* https://webaudio.github.io/web-audio-api/#mediastreamaudiodestinationnode
*/

[Exposed=Window]
interface MediaStreamAudioDestinationNode : AudioNode {
[Throws] constructor (AudioContext context, optional AudioNodeOptions options = {});
// readonly attribute MediaStream stream;
};

This comment has been minimized.

Copy link
@ferjm

ferjm Jul 2, 2020

Member

No newline at end of file

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.