mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Player does not need to go inside a mutexed Arc
This commit is contained in:
parent
2d709a283b
commit
1f406ef0a0
1 changed files with 13 additions and 21 deletions
|
@ -52,7 +52,7 @@ use std::sync::{Arc, Mutex};
|
||||||
use task_source::{TaskSource, TaskSourceName};
|
use task_source::{TaskSource, TaskSourceName};
|
||||||
use time::{self, Timespec, Duration};
|
use time::{self, Timespec, Duration};
|
||||||
|
|
||||||
unsafe_no_jsmanaged_fields!(Arc<Mutex<Box<Player>>>);
|
unsafe_no_jsmanaged_fields!(Player);
|
||||||
unsafe_no_jsmanaged_fields!(MediaFrameRenderer);
|
unsafe_no_jsmanaged_fields!(MediaFrameRenderer);
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
|
@ -91,7 +91,7 @@ pub struct HTMLMediaElement {
|
||||||
/// Whether the media metadata has been completely received.
|
/// Whether the media metadata has been completely received.
|
||||||
have_metadata: Cell<bool>,
|
have_metadata: Cell<bool>,
|
||||||
#[ignore_malloc_size_of = "servo_media"]
|
#[ignore_malloc_size_of = "servo_media"]
|
||||||
player: Arc<Mutex<Box<Player>>>,
|
player: Box<Player>,
|
||||||
#[ignore_malloc_size_of = "oops"]
|
#[ignore_malloc_size_of = "oops"]
|
||||||
frame_renderer: MediaFrameRenderer,
|
frame_renderer: MediaFrameRenderer,
|
||||||
}
|
}
|
||||||
|
@ -135,9 +135,7 @@ impl HTMLMediaElement {
|
||||||
pending_play_promises: Default::default(),
|
pending_play_promises: Default::default(),
|
||||||
in_flight_play_promises_queue: Default::default(),
|
in_flight_play_promises_queue: Default::default(),
|
||||||
have_metadata: Cell::new(false),
|
have_metadata: Cell::new(false),
|
||||||
player: Arc::new(Mutex::new(
|
player: ServoMedia::get().unwrap().create_player().unwrap(),
|
||||||
ServoMedia::get().unwrap().create_player().unwrap(),
|
|
||||||
)),
|
|
||||||
frame_renderer: MediaFrameRenderer::new(document.window().get_webrender_api_sender()),
|
frame_renderer: MediaFrameRenderer::new(document.window().get_webrender_api_sender()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,7 +233,7 @@ impl HTMLMediaElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.fulfill_in_flight_play_promises(|| {
|
this.fulfill_in_flight_play_promises(|| {
|
||||||
this.player.lock().unwrap().play();
|
this.player.play();
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
window.upcast(),
|
window.upcast(),
|
||||||
|
@ -283,7 +281,7 @@ impl HTMLMediaElement {
|
||||||
this.upcast::<EventTarget>().fire_event(atom!("pause"));
|
this.upcast::<EventTarget>().fire_event(atom!("pause"));
|
||||||
|
|
||||||
//FIXME(victor)
|
//FIXME(victor)
|
||||||
//this.player.lock().unwrap().pause();
|
//this.player.pause();
|
||||||
|
|
||||||
// Step 2.3.3.
|
// Step 2.3.3.
|
||||||
// Done after running this closure in
|
// Done after running this closure in
|
||||||
|
@ -320,7 +318,7 @@ impl HTMLMediaElement {
|
||||||
this.fulfill_in_flight_play_promises(|| {
|
this.fulfill_in_flight_play_promises(|| {
|
||||||
// Step 2.1.
|
// Step 2.1.
|
||||||
this.upcast::<EventTarget>().fire_event(atom!("playing"));
|
this.upcast::<EventTarget>().fire_event(atom!("playing"));
|
||||||
this.player.lock().unwrap().play();
|
this.player.play();
|
||||||
|
|
||||||
// Step 2.2.
|
// Step 2.2.
|
||||||
// Done after running this closure in
|
// Done after running this closure in
|
||||||
|
@ -672,7 +670,7 @@ impl HTMLMediaElement {
|
||||||
// Step 5.
|
// Step 5.
|
||||||
this.upcast::<EventTarget>().fire_event(atom!("error"));
|
this.upcast::<EventTarget>().fire_event(atom!("error"));
|
||||||
|
|
||||||
this.player.lock().unwrap().stop();
|
this.player.stop();
|
||||||
|
|
||||||
// Step 6.
|
// Step 6.
|
||||||
// Done after running this closure in
|
// Done after running this closure in
|
||||||
|
@ -837,15 +835,10 @@ impl HTMLMediaElement {
|
||||||
fn setup_media_player(&self) {
|
fn setup_media_player(&self) {
|
||||||
let (action_sender, action_receiver) = ipc::channel().unwrap();
|
let (action_sender, action_receiver) = ipc::channel().unwrap();
|
||||||
|
|
||||||
self.player
|
self.player.register_event_handler(action_sender);
|
||||||
.lock()
|
self.player.register_frame_renderer(Arc::new(self.frame_renderer.clone()));
|
||||||
.unwrap()
|
// XXXferjm this can fail.
|
||||||
.register_event_handler(action_sender);
|
self.player.setup().unwrap();
|
||||||
self.player
|
|
||||||
.lock()
|
|
||||||
.unwrap()
|
|
||||||
.register_frame_renderer(Arc::new(self.frame_renderer.clone()));
|
|
||||||
self.player.lock().unwrap().setup().unwrap();
|
|
||||||
|
|
||||||
let trusted_node = Trusted::new(self);
|
let trusted_node = Trusted::new(self);
|
||||||
let window = window_from_node(self);
|
let window = window_from_node(self);
|
||||||
|
@ -1132,7 +1125,7 @@ impl FetchResponseListener for HTMLMediaElementContext {
|
||||||
let elem = self.elem.root();
|
let elem = self.elem.root();
|
||||||
|
|
||||||
// push input data into the player
|
// push input data into the player
|
||||||
if let Err(_) = elem.player.lock().unwrap().push_data(payload) {
|
if let Err(_) = elem.player.push_data(payload) {
|
||||||
eprintln!("Couldn't push input data to player");
|
eprintln!("Couldn't push input data to player");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1156,10 +1149,9 @@ impl FetchResponseListener for HTMLMediaElementContext {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let elem = self.elem.root();
|
let elem = self.elem.root();
|
||||||
let player = elem.player.lock().unwrap();
|
|
||||||
|
|
||||||
// signal the eos to player
|
// signal the eos to player
|
||||||
if let Err(_) = player.end_of_stream() {
|
if let Err(_) = elem.player.end_of_stream() {
|
||||||
eprintln!("Couldn't signal EOS to player");
|
eprintln!("Couldn't signal EOS to player");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue