mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Register and unregister a player in GLPlayer thread
This commit is contained in:
parent
38eb48441c
commit
586d3f8da5
1 changed files with 33 additions and 0 deletions
|
@ -58,6 +58,7 @@ use crate::microtask::{Microtask, MicrotaskRunnable};
|
||||||
use crate::network_listener::{self, NetworkListener, PreInvoke, ResourceTimingListener};
|
use crate::network_listener::{self, NetworkListener, PreInvoke, ResourceTimingListener};
|
||||||
use crate::script_thread::ScriptThread;
|
use crate::script_thread::ScriptThread;
|
||||||
use crate::task_source::TaskSource;
|
use crate::task_source::TaskSource;
|
||||||
|
use canvas_traits::media::*;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use headers::{ContentLength, ContentRange, HeaderMapExt};
|
use headers::{ContentLength, ContentRange, HeaderMapExt};
|
||||||
use html5ever::{LocalName, Prefix};
|
use html5ever::{LocalName, Prefix};
|
||||||
|
@ -294,6 +295,8 @@ pub struct HTMLMediaElement {
|
||||||
next_timeupdate_event: Cell<Timespec>,
|
next_timeupdate_event: Cell<Timespec>,
|
||||||
/// Latest fetch request context.
|
/// Latest fetch request context.
|
||||||
current_fetch_context: DomRefCell<Option<HTMLMediaElementFetchContext>>,
|
current_fetch_context: DomRefCell<Option<HTMLMediaElementFetchContext>>,
|
||||||
|
/// Player Id reported the player thread
|
||||||
|
id: Cell<u64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <https://html.spec.whatwg.org/multipage/#dom-media-networkstate>
|
/// <https://html.spec.whatwg.org/multipage/#dom-media-networkstate>
|
||||||
|
@ -355,6 +358,7 @@ impl HTMLMediaElement {
|
||||||
text_tracks_list: Default::default(),
|
text_tracks_list: Default::default(),
|
||||||
next_timeupdate_event: Cell::new(time::get_time() + Duration::milliseconds(250)),
|
next_timeupdate_event: Cell::new(time::get_time() + Duration::milliseconds(250)),
|
||||||
current_fetch_context: DomRefCell::new(None),
|
current_fetch_context: DomRefCell::new(None),
|
||||||
|
id: Cell::new(0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1290,6 +1294,25 @@ impl HTMLMediaElement {
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// GLPlayer thread setup
|
||||||
|
let player_id = window
|
||||||
|
.get_player_context()
|
||||||
|
.glplayer_chan
|
||||||
|
.map(|pipeline| {
|
||||||
|
let (image_sender, image_receiver) =
|
||||||
|
glplayer_channel::<GLPlayerMsgForward>().unwrap();
|
||||||
|
pipeline
|
||||||
|
.channel()
|
||||||
|
.send(GLPlayerMsg::RegisterPlayer(image_sender))
|
||||||
|
.unwrap();
|
||||||
|
match image_receiver.recv().unwrap() {
|
||||||
|
GLPlayerMsgForward::PlayerId(id) => id,
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.unwrap_or(0);
|
||||||
|
self.id.set(player_id);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1617,6 +1640,16 @@ impl HTMLMediaElement {
|
||||||
|
|
||||||
impl Drop for HTMLMediaElement {
|
impl Drop for HTMLMediaElement {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
|
let window = window_from_node(self);
|
||||||
|
window.get_player_context().glplayer_chan.map(|pipeline| {
|
||||||
|
if let Err(err) = pipeline
|
||||||
|
.channel()
|
||||||
|
.send(GLPlayerMsg::UnregisterPlayer(self.id.get()))
|
||||||
|
{
|
||||||
|
warn!("GLPlayer disappeared!: {:?}", err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if let Some(ref player) = *self.player.borrow() {
|
if let Some(ref player) = *self.player.borrow() {
|
||||||
if let Err(err) = player.shutdown() {
|
if let Err(err) = player.shutdown() {
|
||||||
warn!("Error shutting down player {:?}", err);
|
warn!("Error shutting down player {:?}", err);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue