diff --git a/Cargo.lock b/Cargo.lock index 519d19c7..2d38fc85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -303,6 +303,7 @@ dependencies = [ "euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "glutin 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ipc-channel 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "servo-media 0.1.0", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -324,6 +325,11 @@ dependencies = [ "miniz_oxide_c_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "foreign-types" version = "0.3.2" @@ -624,6 +630,30 @@ dependencies = [ "pkg-config 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ipc-channel" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", + "uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "jni" version = "0.5.3" @@ -660,6 +690,11 @@ name = "lazy_static" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "lazycell" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "libc" version = "0.2.42" @@ -749,6 +784,35 @@ dependencies = [ "miniz_oxide 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "mio" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "msdos_time" version = "0.1.6" @@ -763,6 +827,16 @@ name = "muldiv" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "nix" version = "0.11.0" @@ -1077,7 +1151,8 @@ dependencies = [ "gstreamer-app 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", "gstreamer-audio 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", "gstreamer-player 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "ipc-channel 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo-media-audio 0.1.0", "servo-media-player 0.1.0", @@ -1087,6 +1162,11 @@ dependencies = [ [[package]] name = "servo-media-player" version = "0.1.0" +dependencies = [ + "ipc-channel 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "servo_media_android" @@ -1113,6 +1193,11 @@ dependencies = [ "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "slab" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "smallvec" version = "0.6.3" @@ -1222,6 +1307,15 @@ name = "utf8-ranges" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "uuid" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "void" version = "1.0.2" @@ -1375,6 +1469,15 @@ dependencies = [ "x11-dl 2.18.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "x11-dl" version = "2.18.3" @@ -1447,6 +1550,7 @@ dependencies = [ "checksum euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70a2ebdf55fb9d6329046e026329a55ef8fbaae5ea833f56e170beb3125a8a5f" "checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" "checksum flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fac2277e84e5e858483756647a9d0aa8d9a2b7cba517fd84325a0aaa69a0909" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" "checksum freetype 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b659e75b7a7338fe75afd7f909fc2b71937845cffb6ebe54ba2e50f13d8e903d" @@ -1472,11 +1576,14 @@ dependencies = [ "checksum gstreamer-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b2f51e25a6f97dd4bfd640cba96f192f8759b8766afd66d6d9ea0f82ca14a37" "checksum gstreamer-video 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75300cf1ed8d8d65811349fc755fac22be05ea55df551ab29e43664d4a575c92" "checksum gstreamer-video-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ed798787e78a0f1c8be06bd3adcab03f962f049a820743aae9f690f56a0d538" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum ipc-channel 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d9633343cecbb46ef880c08483adaeec7befdf5ecededf34cc62e1dfe61aa224" "checksum jni 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cffc930ce6a38a4013e30567b559bdc79f601013ba4a81e65dbda9207263efd4" "checksum jni-sys 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "de0aaaba8809ab8d83a53fe2b313b996b79e8632b855eae9f70ad4323dca91b8" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum khronos_api 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "037ab472c33f67b5fbd3e9163a2645319e5356fcd355efa6d4eb7fff4bbcb554" "checksum lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fb497c35d362b6a331cfd94956a07fc2c78a4604cdbee844a81170386b996dd3" +"checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" "checksum libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1" "checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2" "checksum lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "949826a5ccf18c1b3a7c3d57692778d21768b79e46eb9dd07bfc4c2160036c54" @@ -1488,8 +1595,11 @@ dependencies = [ "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" "checksum miniz_oxide 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9ba430291c9d6cedae28bcd2d49d1c32fc57d60cd49086646c5dd5673a870eb5" "checksum miniz_oxide_c_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5a5b8234d6103ebfba71e29786da4608540f862de5ce980a1c94f86a40ca0d51" +"checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum msdos_time 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aad9dfe950c057b1bfe9c1f2aa51583a8468ef2a5baba2ebbe06d775efeb7729" "checksum muldiv 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1cbef5aa2e8cd82a18cc20e26434cc9843e1ef46e55bfabe5bddb022236c5b3e" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum nix 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d37e713a259ff641624b6cb20e3b12b2952313ba36b6823c0f16e6cfd9e5de17" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" @@ -1526,6 +1636,7 @@ dependencies = [ "checksum serde_derive 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)" = "0a90213fa7e0f5eac3f7afe2d5ff6b088af515052cc7303bd68c7e3b91a3fb79" "checksum servo-freetype-sys 4.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9232032c2e85118c0282c6562c84cab12316e655491ba0a5d1905b2320060d1b" "checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" +"checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" "checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8" "checksum smithay-client-toolkit 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2051bffc6cbf271176e8ba1527f801b6444567daee15951ff5152aaaf7777b2f" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" @@ -1539,6 +1650,7 @@ dependencies = [ "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" +"checksum uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e1436e58182935dcd9ce0add9ea0b558e8a87befe01c1a301e6020aeb0876363" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum wayland-client 0.20.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b4ff113a1c1c5e5104c7abfc2a80ba5e2bf78e1ac725ebbf934772dbd2983847" "checksum wayland-commons 0.20.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9892d32d32dd45121fdaee5c3e7acf9923e3fc9d8f0ab09e4148b6a5e9aebb9c" @@ -1553,6 +1665,7 @@ dependencies = [ "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" "checksum winit 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ec43db5991cc509f5b0c68cb0a0d3614f697c888999990a186a2e895c7f723c0" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" "checksum x11-dl 2.18.3 (registry+https://github.com/rust-lang/crates.io-index)" = "940586acb859ea05c53971ac231685799a7ec1dee66ac0bccc0e6ad96e06b4e3" "checksum xml-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c1cb601d29fe2c2ac60a2b2e5e293994d87a1f6fa9687a31a15270f909be9c2" "checksum zip 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "77ce0ceee93c995954a31f77903925a6a8bb094709445238e344f2107910e29e" diff --git a/audio/src/lib.rs b/audio/src/lib.rs index 1ab27f08..36489454 100644 --- a/audio/src/lib.rs +++ b/audio/src/lib.rs @@ -31,5 +31,4 @@ pub trait AudioBackend { type Sink: sink::AudioSink; fn make_decoder() -> Self::Decoder; fn make_sink() -> Result; - fn init(); } diff --git a/backends/gstreamer/Cargo.toml b/backends/gstreamer/Cargo.toml index 79c4ec17..af8ba8e2 100644 --- a/backends/gstreamer/Cargo.toml +++ b/backends/gstreamer/Cargo.toml @@ -28,6 +28,9 @@ version = "0.11" [dependencies.gstreamer-player] version = "0.11" +[dependencies.ipc-channel] +version = "0.10" + [dependencies.servo-media-audio] path = "../../audio" diff --git a/backends/gstreamer/src/lib.rs b/backends/gstreamer/src/lib.rs index ad662741..53354f23 100644 --- a/backends/gstreamer/src/lib.rs +++ b/backends/gstreamer/src/lib.rs @@ -1,13 +1,13 @@ #![feature(extern_prelude)] extern crate byte_slice_cast; -extern crate num_traits; extern crate glib; extern crate gstreamer as gst; extern crate gstreamer_app as gst_app; extern crate gstreamer_audio as gst_audio; extern crate gstreamer_player as gst_player; +extern crate ipc_channel; extern crate servo_media_audio; extern crate servo_media_player; @@ -30,9 +30,6 @@ impl AudioBackend for GStreamerBackend { fn make_sink() -> Result { audio_sink::GStreamerAudioSink::new() } - fn init() { - gst::init().unwrap(); - } } impl PlayerBackend for GStreamerBackend { @@ -41,3 +38,9 @@ impl PlayerBackend for GStreamerBackend { player::GStreamerPlayer::new() } } + +impl GStreamerBackend { + pub fn init() { + gst::init().unwrap(); + } +} diff --git a/backends/gstreamer/src/player.rs b/backends/gstreamer/src/player.rs index c95de358..43655e22 100644 --- a/backends/gstreamer/src/player.rs +++ b/backends/gstreamer/src/player.rs @@ -3,10 +3,11 @@ use gst; use gst_app; use gst_player; use gst_player::{PlayerMediaInfo, PlayerStreamInfoExt}; +use ipc_channel::ipc::IpcSender; use servo_media_player::frame::{Frame, FrameRenderer}; use servo_media_player::metadata::Metadata; use servo_media_player::{PlaybackState, Player, PlayerEvent}; -use std::sync::mpsc::{self, Sender}; +use std::sync::mpsc; use std::sync::{Arc, Mutex}; use std::time; use std::u64; @@ -81,13 +82,13 @@ struct PlayerInner { appsrc: Option, appsink: gst_app::AppSink, input_size: u64, - subscribers: Vec>, + subscribers: Vec>, renderers: Vec>, last_metadata: Option, } impl PlayerInner { - pub fn register_event_handler(&mut self, sender: Sender) { + pub fn register_event_handler(&mut self, sender: IpcSender) { self.subscribers.push(sender); } @@ -183,7 +184,7 @@ impl GStreamerPlayer { } impl Player for GStreamerPlayer { - fn register_event_handler(&self, sender: Sender) { + fn register_event_handler(&self, sender: IpcSender) { self.inner.lock().unwrap().register_event_handler(sender); } @@ -365,7 +366,7 @@ impl Player for GStreamerPlayer { fn push_data(&self, data: Vec) -> Result<(), ()> { if let Some(ref mut appsrc) = self.inner.lock().unwrap().appsrc { - let buffer = gst::Buffer::from_slice(data).expect("Unable to create a buffer"); + let buffer = gst::Buffer::from_slice(data).ok_or_else(|| ())?; if appsrc.push_buffer(buffer) == gst::FlowReturn::Ok { return Ok(()); } diff --git a/examples/Cargo.toml b/examples/Cargo.toml index 42a355f0..05b49180 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -12,6 +12,7 @@ time = "0.1.40" servo-media = { path = "../servo-media" } webrender = { git = "https://github.com/servo/webrender/" } winit = "0.16.2" +ipc-channel = "0.10" [[bin]] name = "audio_decoder" diff --git a/examples/player/main.rs b/examples/player/main.rs index e47f3608..39cd2ddb 100644 --- a/examples/player/main.rs +++ b/examples/player/main.rs @@ -6,12 +6,14 @@ extern crate gleam; extern crate glutin; +extern crate ipc_channel; extern crate servo_media; extern crate time; extern crate webrender; extern crate winit; use gleam::gl; +use ipc_channel::ipc; use servo_media::player::frame::{Frame, FrameRenderer}; use servo_media::player::{Player, PlayerEvent}; use servo_media::ServoMedia; @@ -21,7 +23,6 @@ use std::io::BufReader; use std::io::Read; use std::path::Path; use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::mpsc; use std::sync::{Arc, Mutex}; use std::thread::Builder; use ui::HandyDandyRectBuilder; @@ -42,7 +43,7 @@ impl PlayerWrapper { let file = File::open(&path).unwrap(); let metadata = file.metadata().unwrap(); player.lock().unwrap().set_input_size(metadata.len()); - let (sender, receiver) = mpsc::channel(); + let (sender, receiver) = ipc::channel().unwrap(); player.lock().unwrap().register_event_handler(sender); player .lock() diff --git a/player/Cargo.toml b/player/Cargo.toml index 346c9ace..d802f292 100644 --- a/player/Cargo.toml +++ b/player/Cargo.toml @@ -7,3 +7,8 @@ license = "MPL-2.0" [lib] name = "servo_media_player" + +[dependencies] +serde = "1.0" +serde_derive = "1.0" +ipc-channel = "0.10" diff --git a/player/src/lib.rs b/player/src/lib.rs index ca54a35c..2e8b0e7f 100644 --- a/player/src/lib.rs +++ b/player/src/lib.rs @@ -1,10 +1,14 @@ +extern crate ipc_channel; +#[macro_use] +extern crate serde_derive; + pub mod frame; pub mod metadata; +use ipc_channel::ipc::IpcSender; use std::sync::Arc; -use std::sync::mpsc::Sender; -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub enum PlaybackState { Stopped, // Buffering, @@ -12,7 +16,7 @@ pub enum PlaybackState { Playing, } -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub enum PlayerEvent { EndOfStream, MetadataUpdated(metadata::Metadata), @@ -22,7 +26,7 @@ pub enum PlayerEvent { } pub trait Player: Send { - fn register_event_handler(&self, sender: Sender); + fn register_event_handler(&self, sender: IpcSender); fn register_frame_renderer(&self, renderer: Arc); fn setup(&self) -> Result<(), ()>; @@ -37,7 +41,7 @@ pub trait Player: Send { pub struct DummyPlayer {} impl Player for DummyPlayer { - fn register_event_handler(&self, _: Sender) {} + fn register_event_handler(&self, _: IpcSender) {} fn register_frame_renderer(&self, _: Arc) {} fn setup(&self) -> Result<(), ()> { diff --git a/player/src/metadata.rs b/player/src/metadata.rs index 9a0ce527..39577081 100644 --- a/player/src/metadata.rs +++ b/player/src/metadata.rs @@ -1,6 +1,6 @@ use std::{string, time}; -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] pub struct Metadata { pub duration: Option, pub width: u32, diff --git a/servo-media/src/lib.rs b/servo-media/src/lib.rs index 522a2271..16bf28fe 100644 --- a/servo-media/src/lib.rs +++ b/servo-media/src/lib.rs @@ -27,7 +27,6 @@ impl AudioBackend for DummyBackend { fn make_sink() -> Result { Ok(DummyAudioSink) } - fn init() {} } impl PlayerBackend for DummyBackend { @@ -37,6 +36,10 @@ impl PlayerBackend for DummyBackend { } } +impl DummyBackend { + pub fn init() {} +} + #[cfg(all(not(target_os = "android"), target_arch = "x86_64"))] pub type Backend = servo_media_gstreamer::GStreamerBackend; #[cfg(not(all(not(target_os = "android"), target_arch = "x86_64")))]