Update servo-media with MediaElementAudioSourceNode engine

This commit is contained in:
Fernando Jiménez Moreno 2019-11-07 06:00:11 +01:00
parent 49ec49f637
commit 518ec87cdd
4 changed files with 28 additions and 26 deletions

23
Cargo.lock generated
View file

@ -4446,7 +4446,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media" name = "servo-media"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"servo-media-audio", "servo-media-audio",
"servo-media-player", "servo-media-player",
@ -4458,7 +4458,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-audio" name = "servo-media-audio"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"boxfnonce", "boxfnonce",
"byte-slice-cast", "byte-slice-cast",
@ -4467,6 +4467,7 @@ dependencies = [
"petgraph", "petgraph",
"serde", "serde",
"serde_derive", "serde_derive",
"servo-media-player",
"servo-media-traits", "servo-media-traits",
"servo_media_derive", "servo_media_derive",
"smallvec", "smallvec",
@ -4490,7 +4491,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-gstreamer" name = "servo-media-gstreamer"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"boxfnonce", "boxfnonce",
"byte-slice-cast", "byte-slice-cast",
@ -4526,7 +4527,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-gstreamer-render" name = "servo-media-gstreamer-render"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"gstreamer", "gstreamer",
"gstreamer-video", "gstreamer-video",
@ -4536,7 +4537,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-gstreamer-render-android" name = "servo-media-gstreamer-render-android"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"glib", "glib",
"gstreamer", "gstreamer",
@ -4549,7 +4550,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-gstreamer-render-unix" name = "servo-media-gstreamer-render-unix"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"glib", "glib",
"gstreamer", "gstreamer",
@ -4562,7 +4563,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-player" name = "servo-media-player"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"ipc-channel", "ipc-channel",
"serde", "serde",
@ -4574,7 +4575,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-streams" name = "servo-media-streams"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"uuid", "uuid",
@ -4583,12 +4584,12 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-traits" name = "servo-media-traits"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
[[package]] [[package]]
name = "servo-media-webrtc" name = "servo-media-webrtc"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"boxfnonce", "boxfnonce",
"log", "log",
@ -4685,7 +4686,7 @@ dependencies = [
[[package]] [[package]]
name = "servo_media_derive" name = "servo_media_derive"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#5380170bb42286ce9009d83e1034904bea8f00ee" source = "git+https://github.com/servo/media#220ed1388f2ba008b05f5e94aca21dd14aa37290"
dependencies = [ dependencies = [
"proc-macro2 1.0.1", "proc-macro2 1.0.1",
"quote 1.0.2", "quote 1.0.2",

View file

@ -107,7 +107,7 @@ use servo_media::audio::context::AudioContext;
use servo_media::audio::graph::NodeId; use servo_media::audio::graph::NodeId;
use servo_media::audio::panner_node::{DistanceModel, PanningModel}; use servo_media::audio::panner_node::{DistanceModel, PanningModel};
use servo_media::audio::param::ParamType; use servo_media::audio::param::ParamType;
use servo_media::player::frame::Frame; use servo_media::player::video::VideoFrame;
use servo_media::player::Player; use servo_media::player::Player;
use servo_media::streams::registry::MediaStreamId; use servo_media::streams::registry::MediaStreamId;
use servo_media::streams::MediaStreamType; use servo_media::streams::MediaStreamType;
@ -532,7 +532,7 @@ unsafe_no_jsmanaged_fields!(Point2D<f32>, Rect<Au>);
unsafe_no_jsmanaged_fields!(Rect<f32>); unsafe_no_jsmanaged_fields!(Rect<f32>);
unsafe_no_jsmanaged_fields!(CascadeData); unsafe_no_jsmanaged_fields!(CascadeData);
unsafe_no_jsmanaged_fields!(WindowGLContext); unsafe_no_jsmanaged_fields!(WindowGLContext);
unsafe_no_jsmanaged_fields!(Frame); unsafe_no_jsmanaged_fields!(VideoFrame);
unsafe_no_jsmanaged_fields!(WebGLContextId); unsafe_no_jsmanaged_fields!(WebGLContextId);
unsafe impl<'a> JSTraceable for &'a str { unsafe impl<'a> JSTraceable for &'a str {

View file

@ -79,7 +79,7 @@ use net_traits::{CoreResourceMsg, FetchChannels, FetchMetadata, FetchResponseLis
use net_traits::{NetworkError, ResourceFetchTiming, ResourceTimingType}; use net_traits::{NetworkError, ResourceFetchTiming, ResourceTimingType};
use script_layout_interface::HTMLMediaData; use script_layout_interface::HTMLMediaData;
use servo_config::pref; use servo_config::pref;
use servo_media::player::frame::{Frame, FrameRenderer}; use servo_media::player::video::{VideoFrame, VideoFrameRenderer};
use servo_media::player::{PlaybackState, Player, PlayerError, PlayerEvent, SeekLock, StreamType}; use servo_media::player::{PlaybackState, Player, PlayerError, PlayerEvent, SeekLock, StreamType};
use servo_media::{ClientContextId, ServoMedia, SupportsMediaType}; use servo_media::{ClientContextId, ServoMedia, SupportsMediaType};
use servo_url::ServoUrl; use servo_url::ServoUrl;
@ -100,10 +100,10 @@ enum FrameStatus {
Unlocked, Unlocked,
} }
struct FrameHolder(FrameStatus, Frame); struct FrameHolder(FrameStatus, VideoFrame);
impl FrameHolder { impl FrameHolder {
fn new(frame: Frame) -> FrameHolder { fn new(frame: VideoFrame) -> FrameHolder {
FrameHolder(FrameStatus::Unlocked, frame) FrameHolder(FrameStatus::Unlocked, frame)
} }
@ -119,7 +119,7 @@ impl FrameHolder {
}; };
} }
fn set(&mut self, new_frame: Frame) { fn set(&mut self, new_frame: VideoFrame) {
if self.0 == FrameStatus::Unlocked { if self.0 == FrameStatus::Unlocked {
self.1 = new_frame self.1 = new_frame
}; };
@ -137,7 +137,7 @@ impl FrameHolder {
} }
} }
fn get_frame(&self) -> Frame { fn get_frame(&self) -> VideoFrame {
self.1.clone() self.1.clone()
} }
} }
@ -170,8 +170,8 @@ impl MediaFrameRenderer {
} }
} }
impl FrameRenderer for MediaFrameRenderer { impl VideoFrameRenderer for MediaFrameRenderer {
fn render(&mut self, frame: Frame) { fn render(&mut self, frame: VideoFrame) {
let mut txn = Transaction::new(); let mut txn = Transaction::new();
if let Some(old_image_key) = mem::replace(&mut self.very_old_frame, self.old_frame.take()) { if let Some(old_image_key) = mem::replace(&mut self.very_old_frame, self.old_frame.take()) {
@ -1325,7 +1325,7 @@ impl HTMLMediaElement {
let window = window_from_node(self); let window = window_from_node(self);
let (action_sender, action_receiver) = ipc::channel::<PlayerEvent>().unwrap(); let (action_sender, action_receiver) = ipc::channel::<PlayerEvent>().unwrap();
let renderer: Option<Arc<Mutex<dyn FrameRenderer>>> = match self.media_type_id() { let renderer: Option<Arc<Mutex<dyn VideoFrameRenderer>>> = match self.media_type_id() {
HTMLMediaElementTypeId::HTMLAudioElement => None, HTMLMediaElementTypeId::HTMLAudioElement => None,
HTMLMediaElementTypeId::HTMLVideoElement => Some(self.frame_renderer.clone()), HTMLMediaElementTypeId::HTMLVideoElement => Some(self.frame_renderer.clone()),
}; };
@ -1340,6 +1340,7 @@ impl HTMLMediaElement {
stream_type, stream_type,
action_sender, action_sender,
renderer, renderer,
None,
Box::new(window.get_player_context()), Box::new(window.get_player_context()),
); );
@ -1527,7 +1528,7 @@ impl HTMLMediaElement {
))); )));
self.upcast::<EventTarget>().fire_event(atom!("error")); self.upcast::<EventTarget>().fire_event(atom!("error"));
}, },
PlayerEvent::FrameUpdated => { PlayerEvent::VideoFrameUpdated => {
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage); self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}, },
PlayerEvent::MetadataUpdated(ref metadata) => { PlayerEvent::MetadataUpdated(ref metadata) => {
@ -1855,7 +1856,7 @@ impl HTMLMediaElement {
} }
} }
pub fn get_current_frame(&self) -> Option<Frame> { pub fn get_current_frame(&self) -> Option<VideoFrame> {
match self.frame_renderer.lock().unwrap().current_frame_holder { match self.frame_renderer.lock().unwrap().current_frame_holder {
Some(ref holder) => Some(holder.get_frame()), Some(ref holder) => Some(holder.get_frame()),
None => return None, None => return None,

View file

@ -35,7 +35,7 @@ use net_traits::{
CoreResourceMsg, FetchChannels, FetchMetadata, FetchResponseListener, FetchResponseMsg, CoreResourceMsg, FetchChannels, FetchMetadata, FetchResponseListener, FetchResponseMsg,
}; };
use net_traits::{NetworkError, ResourceFetchTiming, ResourceTimingType}; use net_traits::{NetworkError, ResourceFetchTiming, ResourceTimingType};
use servo_media::player::frame::Frame; use servo_media::player::video::VideoFrame;
use servo_url::ServoUrl; use servo_url::ServoUrl;
use std::cell::Cell; use std::cell::Cell;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
@ -58,8 +58,8 @@ pub struct HTMLVideoElement {
/// is being fetched. /// is being fetched.
load_blocker: DomRefCell<Option<LoadBlocker>>, load_blocker: DomRefCell<Option<LoadBlocker>>,
/// A copy of the last frame /// A copy of the last frame
#[ignore_malloc_size_of = "Frame"] #[ignore_malloc_size_of = "VideoFrame"]
last_frame: DomRefCell<Option<Frame>>, last_frame: DomRefCell<Option<VideoFrame>>,
} }
impl HTMLVideoElement { impl HTMLVideoElement {