diff options
-rw-r--r-- | Cargo.lock | 10 | ||||
-rw-r--r-- | components/script/dom/bindings/trace.rs | 3 | ||||
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 40 |
3 files changed, 33 insertions, 20 deletions
diff --git a/Cargo.lock b/Cargo.lock index b48002f9fcb..11dbb0af8e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3224,7 +3224,7 @@ dependencies = [ [[package]] name = "servo-media" version = "0.1.0" -source = "git+https://github.com/servo/media#d1524d451cb0493f40000daf4f2a58f59b535ffa" +source = "git+https://github.com/servo/media#ce50f1332cc2b70e859b793425c9ec7086137303" dependencies = [ "servo-media-audio 0.1.0 (git+https://github.com/servo/media)", "servo-media-gstreamer 0.1.0 (git+https://github.com/servo/media)", @@ -3234,7 +3234,7 @@ dependencies = [ [[package]] name = "servo-media-audio" version = "0.1.0" -source = "git+https://github.com/servo/media#d1524d451cb0493f40000daf4f2a58f59b535ffa" +source = "git+https://github.com/servo/media#ce50f1332cc2b70e859b793425c9ec7086137303" dependencies = [ "boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3251,7 +3251,7 @@ dependencies = [ [[package]] name = "servo-media-gstreamer" version = "0.1.0" -source = "git+https://github.com/servo/media#d1524d451cb0493f40000daf4f2a58f59b535ffa" +source = "git+https://github.com/servo/media#ce50f1332cc2b70e859b793425c9ec7086137303" dependencies = [ "byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3269,7 +3269,7 @@ dependencies = [ [[package]] name = "servo-media-player" version = "0.1.0" -source = "git+https://github.com/servo/media#d1524d451cb0493f40000daf4f2a58f59b535ffa" +source = "git+https://github.com/servo/media#ce50f1332cc2b70e859b793425c9ec7086137303" dependencies = [ "ipc-channel 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3365,7 +3365,7 @@ dependencies = [ [[package]] name = "servo_media_derive" version = "0.1.0" -source = "git+https://github.com/servo/media#d1524d451cb0493f40000daf4f2a58f59b535ffa" +source = "git+https://github.com/servo/media#ce50f1332cc2b70e859b793425c9ec7086137303" dependencies = [ "quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index a625de741ab..8e720f28e25 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -91,6 +91,7 @@ use servo_arc::Arc as ServoArc; use servo_atoms::Atom; use servo_channel::{Receiver, Sender}; use servo_media::Backend; +use servo_media::Error as ServoMediaError; use servo_media::audio::analyser_node::AnalysisEngine; use servo_media::audio::buffer_source_node::AudioBuffer; use servo_media::audio::context::AudioContext; @@ -456,7 +457,7 @@ unsafe_no_jsmanaged_fields!(AudioBuffer); unsafe_no_jsmanaged_fields!(AudioContext<Backend>); unsafe_no_jsmanaged_fields!(NodeId); unsafe_no_jsmanaged_fields!(AnalysisEngine, DistanceModel, PanningModel, ParamType); -unsafe_no_jsmanaged_fields!(Player); +unsafe_no_jsmanaged_fields!(Player<Error=ServoMediaError>); unsafe_no_jsmanaged_fields!(Mutex<MediaFrameRenderer>); unsafe_no_jsmanaged_fields!(RenderApiSender); diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 5fea53fad40..97d94995f95 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -44,6 +44,7 @@ use net_traits::request::{CredentialsMode, Destination, RequestInit}; use network_listener::{NetworkListener, PreInvoke}; use script_layout_interface::HTMLMediaData; use script_thread::ScriptThread; +use servo_media::Error as ServoMediaError; use servo_media::ServoMedia; use servo_media::player::{PlaybackState, Player, PlayerEvent}; use servo_media::player::frame::{Frame, FrameRenderer}; @@ -159,7 +160,7 @@ pub struct HTMLMediaElement { #[ignore_malloc_size_of = "promises are hard"] in_flight_play_promises_queue: DomRefCell<VecDeque<(Box<[Rc<Promise>]>, ErrorResult)>>, #[ignore_malloc_size_of = "servo_media"] - player: Box<Player>, + player: Box<Player<Error=ServoMediaError>>, #[ignore_malloc_size_of = "Arc"] frame_renderer: Arc<Mutex<MediaFrameRenderer>>, fetch_canceller: DomRefCell<FetchCanceller>, @@ -316,7 +317,9 @@ impl HTMLMediaElement { } this.fulfill_in_flight_play_promises(|| { - this.player.play(); + if let Err(e) = this.player.play() { + eprintln!("Could not play media {:?}", e); + } }); }), window.upcast(), @@ -369,7 +372,9 @@ impl HTMLMediaElement { // Step 2.3.2. this.upcast::<EventTarget>().fire_event(atom!("pause")); - this.player.pause(); + if let Err(e) = this.player.pause() { + eprintln!("Could not pause player {:?}", e); + } // Step 2.3.3. // Done after running this closure in @@ -406,7 +411,9 @@ impl HTMLMediaElement { this.fulfill_in_flight_play_promises(|| { // Step 2.1. this.upcast::<EventTarget>().fire_event(atom!("playing")); - this.player.play(); + if let Err(e) = this.player.play() { + eprintln!("Could not play media {:?}", e); + } // Step 2.2. // Done after running this closure in @@ -638,7 +645,8 @@ impl HTMLMediaElement { // https://html.spec.whatwg.org/multipage/#concept-media-load-resource fn resource_fetch_algorithm(&self, resource: Resource) { - if self.setup_media_player().is_err() { + if let Err(e) = self.setup_media_player() { + eprintln!("Setup media player error {:?}", e); self.queue_dedicated_media_source_failure_steps(); return; } @@ -774,7 +782,9 @@ impl HTMLMediaElement { // Step 5. this.upcast::<EventTarget>().fire_event(atom!("error")); - this.player.stop(); + if let Err(e) = this.player.stop() { + eprintln!("Could not stop player {:?}", e); + } // Step 6. // Done after running this closure in @@ -936,12 +946,12 @@ impl HTMLMediaElement { } // servo media player - fn setup_media_player(&self) -> Result<(), ()>{ + fn setup_media_player(&self) -> Result<(), ServoMediaError>{ let (action_sender, action_receiver) = ipc::channel().unwrap(); - self.player.register_event_handler(action_sender); + self.player.register_event_handler(action_sender)?; self.player - .register_frame_renderer(self.frame_renderer.clone()); + .register_frame_renderer(self.frame_renderer.clone())?; let trusted_node = Trusted::new(self); let window = window_from_node(self); @@ -1239,7 +1249,9 @@ impl FetchResponseListener for HTMLMediaElementContext { if let Some(metadata) = self.metadata.as_ref() { if let Some(headers) = metadata.headers.as_ref() { if let Some(content_length) = headers.get::<ContentLength>() { - self.elem.root().player.set_input_size(**content_length); + if let Err(e) = self.elem.root().player.set_input_size(**content_length) { + eprintln!("Could not set player input size {:?}", e); + } } } } @@ -1270,8 +1282,8 @@ impl FetchResponseListener for HTMLMediaElementContext { let elem = self.elem.root(); // Push input data into the player. - if let Err(_) = elem.player.push_data(payload) { - eprintln!("Couldn't push input data to player"); + if let Err(e) = elem.player.push_data(payload) { + eprintln!("Could not push input data to player {:?}", e); return; } @@ -1297,8 +1309,8 @@ impl FetchResponseListener for HTMLMediaElementContext { let elem = self.elem.root(); // Signal the eos to player. - if let Err(_) = elem.player.end_of_stream() { - eprintln!("Couldn't signal EOS to player"); + if let Err(e) = elem.player.end_of_stream() { + eprintln!("Could not signal EOS to player {:?}", e); } if status.is_ok() { |