mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Update servo-media with MediaElementAudioSourceNode engine
This commit is contained in:
parent
49ec49f637
commit
518ec87cdd
4 changed files with 28 additions and 26 deletions
23
Cargo.lock
generated
23
Cargo.lock
generated
|
@ -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",
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue