aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-03-26 19:04:33 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-07-30 14:21:37 +0200
commitd8365111c91696011883fd4d313f36929ebc2b16 (patch)
tree7efd05bed15591b9ed4655cc5074e21e71e637e3
parente9c40665baefc387fa42be4030b5fd2da7a1c140 (diff)
downloadservo-d8365111c91696011883fd4d313f36929ebc2b16.tar.gz
servo-d8365111c91696011883fd4d313f36929ebc2b16.zip
Test OscillatorNode with servo_media
-rw-r--r--components/script/Cargo.toml2
-rw-r--r--components/script/dom/audioscheduledsourcenode.rs13
-rw-r--r--components/script/dom/baseaudiocontext.rs10
-rw-r--r--components/script/dom/webidls/BaseAudioContext.webidl2
-rw-r--r--components/script/lib.rs1
5 files changed, 26 insertions, 2 deletions
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml
index f4048fb6523..71d0456d679 100644
--- a/components/script/Cargo.toml
+++ b/components/script/Cargo.toml
@@ -87,7 +87,7 @@ servo_arc = {path = "../servo_arc"}
servo_atoms = {path = "../atoms"}
servo_config = {path = "../config"}
servo_geometry = {path = "../geometry" }
-servo_media = {git = "https://github.com/ferjm/media"}
+servo_media = {path = "../../../media/servo-media"}
servo_rand = {path = "../rand"}
servo_url = {path = "../url"}
smallvec = "0.6"
diff --git a/components/script/dom/audioscheduledsourcenode.rs b/components/script/dom/audioscheduledsourcenode.rs
index e25cae8fe5e..ca506374964 100644
--- a/components/script/dom/audioscheduledsourcenode.rs
+++ b/components/script/dom/audioscheduledsourcenode.rs
@@ -7,6 +7,7 @@ use dom::bindings::codegen::Bindings::AudioScheduledSourceNodeBinding::AudioSche
use dom::bindings::codegen::Bindings::AudioNodeBinding::AudioNodeOptions;
use dom::bindings::num::Finite;
use dom_struct::dom_struct;
+use servo_media::ServoMedia;
#[dom_struct]
pub struct AudioScheduledSourceNode {
@@ -30,6 +31,18 @@ impl AudioScheduledSourceNodeMethods for AudioScheduledSourceNode {
// https://webaudio.github.io/web-audio-api/#dom-audioscheduledsourcenode-start
fn Start(&self, _when: Finite<f64>) {
+ // XXX This is just here to test servo_media from servo.
+ // ServoMedia needs to expose a way to feed the audio stream and
+ // we need to implement all the AudioContext logic to connect
+ // AudioNodes.
+ match ServoMedia::get().get_audio_stream() {
+ Ok(stream) => {
+ stream.play();
+ },
+ Err(_) => {
+ println!("OH NOES");
+ }
+ };
}
// https://webaudio.github.io/web-audio-api/#dom-audioscheduledsourcenode-stop
diff --git a/components/script/dom/baseaudiocontext.rs b/components/script/dom/baseaudiocontext.rs
index 7e23b2a3274..2bc1cb5343c 100644
--- a/components/script/dom/baseaudiocontext.rs
+++ b/components/script/dom/baseaudiocontext.rs
@@ -7,11 +7,13 @@ use dom::bindings::codegen::Bindings::AudioNodeBinding::AudioNodeOptions;
use dom::bindings::codegen::Bindings::AudioNodeBinding::{ChannelCountMode, ChannelInterpretation};
use dom::bindings::codegen::Bindings::BaseAudioContextBinding::BaseAudioContextMethods;
use dom::bindings::codegen::Bindings::BaseAudioContextBinding::AudioContextState;
+use dom::bindings::codegen::Bindings::OscillatorNodeBinding::OscillatorOptions;
use dom::bindings::num::Finite;
use dom::bindings::reflector::{DomObject, Reflector};
use dom::bindings::root::DomRoot;
use dom::globalscope::GlobalScope;
use dom::promise::Promise;
+use dom::oscillatornode::OscillatorNode;
use dom_struct::dom_struct;
use std::rc::Rc;
@@ -76,4 +78,12 @@ impl BaseAudioContextMethods for BaseAudioContext {
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-onstatechange
event_handler!(statechange, GetOnstatechange, SetOnstatechange);
+
+ #[allow(unsafe_code)]
+ fn CreateOscillator(&self) -> DomRoot<OscillatorNode> {
+ let global = self.global();
+ let window = global.as_window();
+ let options = unsafe { OscillatorOptions::empty(window.get_cx()) };
+ OscillatorNode::new(&window, &self, &options)
+ }
}
diff --git a/components/script/dom/webidls/BaseAudioContext.webidl b/components/script/dom/webidls/BaseAudioContext.webidl
index 288b5771fdc..61ec03346c2 100644
--- a/components/script/dom/webidls/BaseAudioContext.webidl
+++ b/components/script/dom/webidls/BaseAudioContext.webidl
@@ -48,7 +48,7 @@ interface BaseAudioContext : EventTarget {
// ChannelSplitterNode createChannelSplitter(optional unsigned long numberOfOutputs = 6);
// ChannelMergerNode createChannelMerger(optional unsigned long numberOfInputs = 6);
// DynamicsCompressorNode createDynamicsCompressor();
- // OscillatorNode createOscillator();
+ OscillatorNode createOscillator();
// PeriodicWave createPeriodicWave(sequence<float> real,
// sequence<float> imag,
// optional PeriodicWaveConstraints constraints);
diff --git a/components/script/lib.rs b/components/script/lib.rs
index d151734da80..5125607219b 100644
--- a/components/script/lib.rs
+++ b/components/script/lib.rs
@@ -86,6 +86,7 @@ extern crate servo_arc;
#[macro_use] extern crate servo_atoms;
extern crate servo_config;
extern crate servo_geometry;
+extern crate servo_media;
extern crate servo_rand;
extern crate servo_url;
extern crate smallvec;