diff --git a/Cargo.lock b/Cargo.lock
index 33099432..4faee7bf 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -159,7 +159,7 @@ name = "cgl"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "gleam 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "gleam 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -382,7 +382,7 @@ version = "0.1.0"
dependencies = [
"env_logger 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)",
"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)",
+ "gleam 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
"glutin 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -464,16 +464,6 @@ dependencies = [
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "gl_generator"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "khronos_api 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "xml-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "gl_generator"
version = "0.10.0"
@@ -486,10 +476,10 @@ dependencies = [
[[package]]
name = "gleam"
-version = "0.6.0"
+version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "gl_generator 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "gl_generator 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -775,11 +765,6 @@ dependencies = [
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "khronos_api"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "khronos_api"
version = "3.0.0"
@@ -1288,6 +1273,7 @@ dependencies = [
"gstreamer-app 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gstreamer-audio 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gstreamer-player 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "gstreamer-video 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.11.0 (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",
@@ -1534,7 +1520,7 @@ name = "wayland-scanner"
version = "0.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "xml-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1563,7 +1549,7 @@ dependencies = [
"euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
"freetype 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "gleam 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "gleam 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1685,14 +1671,6 @@ name = "xdg"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-[[package]]
-name = "xml-rs"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "xml-rs"
version = "0.8.0"
@@ -1769,8 +1747,7 @@ dependencies = [
"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
"checksum gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518"
"checksum gl_generator 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a0ffaf173cf76c73a73e080366bf556b4776ece104b06961766ff11449f38604"
-"checksum gl_generator 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a795170cbd85b5a7baa58d6d7525cae6a03e486859860c220f7ebbbdd379d0a"
-"checksum gleam 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0d41e7ac812597988fdae31c9baec3c6d35cadb8ad9ab88a9bf9c0f119ed66c2"
+"checksum gleam 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4b47f5b15742aee359c7895ab98cf2cceecc89bb4feb6f4e42f802d7899877da"
"checksum glib 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "740f7fda8dde5f5e3944dabdb4a73ac6094a8a7fdf0af377468e98ca93733e61"
"checksum glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3573351e846caed9f11207b275cd67bc07f0c2c94fb628e5d7c92ca056c7882d"
"checksum glutin 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "535c6eda58adbb227604b2db10a022ffd6339d7ea3e970f338e7d98aeb24fcc3"
@@ -1793,7 +1770,6 @@ dependencies = [
"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 khronos_api 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62237e6d326bd5871cd21469323bf096de81f1618cd82cbaf5d87825335aeb49"
"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"
@@ -1891,6 +1867,5 @@ dependencies = [
"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 xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a66b7c2281ebde13cf4391d70d4c7e5946c3c25e72a7b859ca8f677dcd0b0c61"
-"checksum xml-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c1cb601d29fe2c2ac60a2b2e5e293994d87a1f6fa9687a31a15270f909be9c2"
"checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5"
"checksum zip 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "77ce0ceee93c995954a31f77903925a6a8bb094709445238e344f2107910e29e"
diff --git a/backends/gstreamer/Cargo.toml b/backends/gstreamer/Cargo.toml
index 75211d4c..3347dcbd 100644
--- a/backends/gstreamer/Cargo.toml
+++ b/backends/gstreamer/Cargo.toml
@@ -25,6 +25,9 @@ version = "0.12"
[dependencies.gstreamer-player]
version = "0.12"
+[dependencies.gstreamer-video]
+version = "0.12"
+
[dependencies.ipc-channel]
version = "0.11"
diff --git a/backends/gstreamer/src/lib.rs b/backends/gstreamer/src/lib.rs
index 9b9219fd..747ab509 100644
--- a/backends/gstreamer/src/lib.rs
+++ b/backends/gstreamer/src/lib.rs
@@ -5,6 +5,7 @@ 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 gstreamer_video as gst_video;
extern crate ipc_channel;
extern crate servo_media_audio;
diff --git a/backends/gstreamer/src/player.rs b/backends/gstreamer/src/player.rs
index 3261fe58..01a9ab10 100644
--- a/backends/gstreamer/src/player.rs
+++ b/backends/gstreamer/src/player.rs
@@ -5,6 +5,7 @@ use gst;
use gst_app::{self, AppSrcCallbacks, AppStreamType};
use gst_player;
use gst_player::{PlayerMediaInfo, PlayerStreamInfoExt};
+use gst_video::{VideoFrame, VideoInfo};
use ipc_channel::ipc::IpcSender;
use servo_media_player::frame::{Frame, FrameRenderer};
use servo_media_player::metadata::Metadata;
@@ -17,16 +18,19 @@ use std::time;
use std::u64;
fn frame_from_sample(sample: &gst::Sample) -> Result {
- let caps = sample.get_caps().ok_or_else(|| ())?;
- let s = caps.get_structure(0).ok_or_else(|| ())?;
- let width = s.get("width").ok_or_else(|| ())?;
- let height = s.get("height").ok_or_else(|| ())?;
-
let buffer = sample.get_buffer().ok_or_else(|| ())?;
- let map = buffer.map_readable().ok_or_else(|| ())?;
- let data = Vec::from(map.as_slice());
-
- Ok(Frame::new(width, height, Arc::new(data)))
+ let info = sample
+ .get_caps()
+ .and_then(|caps| VideoInfo::from_caps(caps.as_ref()))
+ .ok_or_else(|| ())?;
+ let frame = VideoFrame::from_buffer_readable(buffer, &info).or_else(|_| Err(()))?;
+ let data = frame.plane_data(0).ok_or_else(|| ())?;
+
+ Ok(Frame::new(
+ info.width() as i32,
+ info.height() as i32,
+ Arc::new(data.to_vec()),
+ ))
}
fn metadata_from_media_info(media_info: &PlayerMediaInfo) -> Result {
diff --git a/examples/Cargo.toml b/examples/Cargo.toml
index 52cdd3c9..13b2f024 100644
--- a/examples/Cargo.toml
+++ b/examples/Cargo.toml
@@ -6,7 +6,7 @@ license = "MPL-2.0"
[dependencies]
env_logger = "0.5"
euclid = "0.19.0"
-gleam = "0.6.0"
+gleam = "0.6.8"
rand = "0.5.0"
time = "0.1.40"
servo-media = { path = "../servo-media" }
diff --git a/player/Cargo.toml b/player/Cargo.toml
index 82e59fe4..ed9db886 100644
--- a/player/Cargo.toml
+++ b/player/Cargo.toml
@@ -9,6 +9,6 @@ license = "MPL-2.0"
name = "servo_media_player"
[dependencies]
-serde = "1.0"
-serde_derive = "1.0"
+serde = "1.0.66"
+serde_derive = "1.0.66"
ipc-channel = "0.11"