From 20ab47cb1aa038e546eb43531813648b1b4cd06e Mon Sep 17 00:00:00 2001 From: ggomez Date: Tue, 5 Jul 2016 17:24:32 +0200 Subject: [PATCH 01/10] Add video-metadata-rs dependencies --- .travis.yml | 3 +++ README.md | 5 +++-- components/script/Cargo.toml | 1 + components/script/lib.rs | 1 + components/servo/Cargo.lock | 11 +++++++++++ ports/cef/Cargo.lock | 11 +++++++++++ 6 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 44bb3c52ccb..7796d98cd23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,6 +36,9 @@ matrix: - xorg-dev - ccache - libdbus-glib-1-dev + - libavformat-dev + - libavcodec-dev + - libavutil-dev branches: only: diff --git a/README.md b/README.md index 0af2c5032a9..887a638c063 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,8 @@ sudo apt-get install git curl freeglut3-dev autoconf \ libfreetype6-dev libgl1-mesa-dri libglib2.0-dev xorg-dev \ gperf g++ build-essential cmake virtualenv python-pip \ libssl-dev libbz2-dev libosmesa6-dev libxmu6 libxmu-dev \ - libglu1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev + libglu1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev \ + libavformat-dev ``` If you are on **Ubuntu 14.04** and encountered errors on installing these dependencies involving `libcheese`, see [#6158](https://github.com/servo/servo/issues/6158) for a workaround. @@ -56,7 +57,7 @@ sudo dnf install curl freeglut-devel libtool gcc-c++ libXi-devel \ freetype-devel mesa-libGL-devel mesa-libEGL-devel glib2-devel libX11-devel libXrandr-devel gperf \ fontconfig-devel cabextract ttmkfdir python python-virtualenv python-pip expat-devel \ rpm-build openssl-devel cmake bzip2-devel libXcursor-devel libXmu-devel mesa-libOSMesa-devel \ - dbus-devel + dbus-devel ffmpeg-devel ``` On Arch Linux: diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 0640fb17f60..96d81f76366 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -67,6 +67,7 @@ time = "0.1.12" url = {version = "1.0.0", features = ["heap_size", "query_encoding"]} util = {path = "../util"} uuid = {version = "0.2", features = ["v4"]} +video-metadata = {git = "https://github.com/GuillaumeGomez/video-metadata-rs"} websocket = "0.17" xml5ever = {version = "0.1.2", features = ["unstable"]} diff --git a/components/script/lib.rs b/components/script/lib.rs index 78a84f83586..0b0a45f701c 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -88,6 +88,7 @@ extern crate url; #[macro_use] extern crate util; extern crate uuid; +extern crate video_metadata; extern crate webrender_traits; extern crate websocket; extern crate xml5ever; diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index b881a7c3ac4..44c4d9080a5 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -1904,6 +1904,7 @@ dependencies = [ "url 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "video-metadata 0.1.2 (git+https://github.com/GuillaumeGomez/video-metadata-rs)", "webrender_traits 0.2.0 (git+https://github.com/servo/webrender_traits)", "websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)", "xml5ever 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2441,6 +2442,16 @@ dependencies = [ "serde 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "video-metadata" +version = "0.1.2" +source = "git+https://github.com/GuillaumeGomez/video-metadata-rs#c613de6a20c85ddda2db3b592ae595e8f993a699" +dependencies = [ + "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "void" version = "1.0.2" diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index 61cbc98c96e..d63caa7e42c 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -1758,6 +1758,7 @@ dependencies = [ "url 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "video-metadata 0.1.0 (git+https://github.com/GuillaumeGomez/video-metadata-rs)", "webrender_traits 0.2.0 (git+https://github.com/servo/webrender_traits)", "websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)", "xml5ever 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2303,6 +2304,16 @@ dependencies = [ "serde 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "video-metadata" +version = "0.1.0" +source = "git+https://github.com/GuillaumeGomez/video-metadata-rs#b5669bc88f33901ed4c45da74eedaadeabb162b1" +dependencies = [ + "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "void" version = "1.0.2" From 1d9d77ee787beffc0ad9d4f1a2a9f4d0c95f7d87 Mon Sep 17 00:00:00 2001 From: ggomez Date: Tue, 5 Jul 2016 17:25:31 +0200 Subject: [PATCH 02/10] Implement video-metadata check --- README.md | 2 +- components/script/dom/bindings/trace.rs | 3 ++ components/script/dom/htmlmediaelement.rs | 37 ++++++++++++++++++++--- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 887a638c063..5164f01c958 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ pacman -Su pacman -Sy git mingw-w64-x86_64-toolchain mingw-w64-x86_64-freetype \ mingw-w64-x86_64-icu mingw-w64-x86_64-nspr mingw-w64-x86_64-ca-certificates \ mingw-w64-x86_64-expat mingw-w64-x86_64-cmake tar diffutils patch \ - patchutils make python2-setuptools + patchutils make python2-setuptools mingw-w64-x86_64-ffmpeg export GCC_URL=http://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-gcc export GCC_EXT=5.4.0-1-any.pkg.tar.xz pacman -U --noconfirm $GCC_URL-$GCC_EXT $GCC_URL-ada-$GCC_EXT \ diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 3c13572bf37..618061fe769 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -91,6 +91,7 @@ use style::element_state::*; use style::properties::PropertyDeclarationBlock; use style::selector_impl::{PseudoElement, ElementSnapshot}; use style::values::specified::Length; +use time::Duration; use url::Origin as UrlOrigin; use url::Url; use uuid::Uuid; @@ -109,6 +110,8 @@ no_jsmanaged_fields!(EncodingRef); no_jsmanaged_fields!(Reflector); +no_jsmanaged_fields!(Duration); + /// Trace a `JSVal`. pub fn trace_jsval(tracer: *mut JSTracer, description: &str, val: &Heap) { unsafe { diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 7a94768c13a..cc8bed31ebd 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -35,6 +35,7 @@ use string_cache::Atom; use task_source::TaskSource; use time::{self, Timespec, Duration}; use url::Url; +use video_metadata; struct HTMLMediaElementContext { /// The element that initiated the request. @@ -88,11 +89,24 @@ impl AsyncResponseListener for HTMLMediaElementContext { // https://html.spec.whatwg.org/multipage/#media-data-processing-steps-list // => "Once enough of the media data has been fetched to determine the duration..." if !self.have_metadata { - //TODO: actually check if the payload contains the full metadata - - // Step 6 - elem.change_ready_state(HAVE_METADATA); - self.have_metadata = true; + match video_metadata::get_format_from_slice(&self.data) { + Ok(meta) => { + let dur = meta.duration.unwrap_or(::std::time::Duration::new(0, 0)); + *elem.video.borrow_mut() = Some(VideoMedia { + format: format!("{:?}", meta.format), + duration: Duration::seconds(dur.as_secs() as i64) + + Duration::nanoseconds(dur.subsec_nanos() as i64), + width: meta.size.width, + height: meta.size.height, + video: meta.video, + audio: meta.audio, + }); + // Step 6 + elem.change_ready_state(HAVE_METADATA); + self.have_metadata = true; + } + _ => {} + } } else { elem.change_ready_state(HAVE_CURRENT_DATA); } @@ -164,6 +178,17 @@ impl HTMLMediaElementContext { } } +#[derive(JSTraceable, HeapSizeOf)] +pub struct VideoMedia { + format: String, + #[ignore_heap_size_of = "defined in time"] + duration: Duration, + width: u32, + height: u32, + video: String, + audio: Option, +} + #[dom_struct] pub struct HTMLMediaElement { htmlelement: HTMLElement, @@ -175,6 +200,7 @@ pub struct HTMLMediaElement { error: MutNullableHeap>, paused: Cell, autoplaying: Cell, + video: DOMRefCell>, } impl HTMLMediaElement { @@ -192,6 +218,7 @@ impl HTMLMediaElement { error: Default::default(), paused: Cell::new(true), autoplaying: Cell::new(true), + video: DOMRefCell::new(None), } } From 95362ba3ce1224ec6f449e9857b870bfc989df1d Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 8 Jul 2016 17:00:45 +0200 Subject: [PATCH 03/10] Update cargo libc --- components/servo/Cargo.lock | 2 +- ports/cef/Cargo.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 44c4d9080a5..b62ecdd942e 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -2449,7 +2449,7 @@ source = "git+https://github.com/GuillaumeGomez/video-metadata-rs#c613de6a20c85d dependencies = [ "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index d63caa7e42c..4bd06709304 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -2311,7 +2311,7 @@ source = "git+https://github.com/GuillaumeGomez/video-metadata-rs#b5669bc88f3390 dependencies = [ "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] From 5e010027d5ec7237d640ae5d579f8c6efaa2b45a Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 14 Jul 2016 18:07:52 +0200 Subject: [PATCH 04/10] Update to last video-metadata crate version --- components/servo/Cargo.lock | 2 +- ports/cef/Cargo.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index b62ecdd942e..95b93d1f4cf 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -2445,7 +2445,7 @@ dependencies = [ [[package]] name = "video-metadata" version = "0.1.2" -source = "git+https://github.com/GuillaumeGomez/video-metadata-rs#c613de6a20c85ddda2db3b592ae595e8f993a699" +source = "git+https://github.com/GuillaumeGomez/video-metadata-rs#bc7f45023765b0ff7a7235e02bac3bfe9f24acd7" dependencies = [ "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index 4bd06709304..e90fe2313f0 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -1758,7 +1758,7 @@ dependencies = [ "url 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "video-metadata 0.1.0 (git+https://github.com/GuillaumeGomez/video-metadata-rs)", + "video-metadata 0.1.2 (git+https://github.com/GuillaumeGomez/video-metadata-rs)", "webrender_traits 0.2.0 (git+https://github.com/servo/webrender_traits)", "websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)", "xml5ever 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2306,8 +2306,8 @@ dependencies = [ [[package]] name = "video-metadata" -version = "0.1.0" -source = "git+https://github.com/GuillaumeGomez/video-metadata-rs#b5669bc88f33901ed4c45da74eedaadeabb162b1" +version = "0.1.2" +source = "git+https://github.com/GuillaumeGomez/video-metadata-rs#bc7f45023765b0ff7a7235e02bac3bfe9f24acd7" dependencies = [ "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", From 9a6037958d6ee0b145adc1d586fabbbdaf592d1a Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 23 Jul 2016 22:49:27 +0200 Subject: [PATCH 05/10] Add ffmpeg build for android --- support/android/ffmpeg.makefile | 13 +++ support/android/ffmpeg.sh | 187 ++++++++++++++++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 support/android/ffmpeg.makefile create mode 100755 support/android/ffmpeg.sh diff --git a/support/android/ffmpeg.makefile b/support/android/ffmpeg.makefile new file mode 100644 index 00000000000..eb6cbd81b02 --- /dev/null +++ b/support/android/ffmpeg.makefile @@ -0,0 +1,13 @@ +.PHONY: all +all: ffmpeg + @: # No-op to silence the "make: Nothing to be done for 'all'." message. + +.PHONY: ffmpeg +ffmpeg: ffmpeg-libs + +ffmpeg-libs: ffmpeg-libs/Configure + ./ffmpeg.sh ${ANDROID_NDK} + +ffmpeg-libs/Configure: + wget https://www.guillaume-gomez.fr/ffmpeg-android.tar.gz + tar -zxf ffmpeg-android.tar.gz diff --git a/support/android/ffmpeg.sh b/support/android/ffmpeg.sh new file mode 100755 index 00000000000..7d569928091 --- /dev/null +++ b/support/android/ffmpeg.sh @@ -0,0 +1,187 @@ +#!/bin/bash +# Wrote by Guillaume Gomez for ffmpeg +# build for android build server + +##################################################################### + +# Set ANDROID_NDK_ROOT to you NDK location. For example, +# /opt/android-ndk-r8e or /opt/android-ndk-r9. This can be done in a +# login script. If ANDROID_NDK_ROOT is not specified, the script will +# try to pick it up with the value of _ANDROID_NDK_ROOT below. If +# ANDROID_NDK_ROOT is set, then the value is ignored. +# _ANDROID_NDK="android-ndk-r8e" +_ANDROID_NDK="android-ndk-r9" +# _ANDROID_NDK="android-ndk-r10" + +# Set _ANDROID_EABI to the EABI you want to use. You can find the +# list in $ANDROID_NDK_ROOT/toolchains. This value is always used. +# _ANDROID_EABI="x86-4.6" +# _ANDROID_EABI="arm-linux-androideabi-4.6" +_ANDROID_EABI="arm-linux-androideabi-4.8" + +# Set _ANDROID_ARCH to the architecture you are building for. +# This value is always used. +# _ANDROID_ARCH=arch-x86 +_ANDROID_ARCH=arch-arm + +# Set _ANDROID_API to the API you want to use. You should set it +# to one of: android-14, android-9, android-8, android-14, android-5 +# android-4, or android-3. You can't set it to the latest (for +# example, API-17) because the NDK does not supply the platform. At +# Android 5.0, there will likely be another platform added (android-22?). +# This value is always used. +# _ANDROID_API="android-14" +_ANDROID_API="$ANDROID_PLATFORM" +# _ANDROID_API="android-19" + +##################################################################### + +# If the user did not specify the NDK location, try and pick it up. +# We expect something like ANDROID_NDK_ROOT=/opt/android-ndk-r8e +# or ANDROID_NDK_ROOT=/usr/local/android-ndk-r8e. +export ANDROID_NDK_ROOT=$1 +echo $ANDROID_NDK_ROOT +# Error checking +# ANDROID_NDK_ROOT should always be set by the user (even when not running this script) +# http://groups.google.com/group/android-ndk/browse_thread/thread/a998e139aca71d77 +if [ -z "$ANDROID_NDK_ROOT" ] || [ ! -d "$ANDROID_NDK_ROOT" ]; then + echo "Error: ANDROID_NDK_ROOT is not a valid path. Please edit this script." + # echo "$ANDROID_NDK_ROOT" + # exit 1 +fi + +# Error checking +if [ ! -d "$ANDROID_NDK_ROOT/toolchains" ]; then + echo "Error: ANDROID_NDK_ROOT/toolchains is not a valid path. Please edit this script." + # echo "$ANDROID_NDK_ROOT/toolchains" + # exit 1 +fi + +# Error checking +if [ ! -d "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI" ]; then + echo "Error: ANDROID_EABI is not a valid path. Please edit this script." + # echo "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI" + # exit 1 +fi + +##################################################################### + +# Based on ANDROID_NDK_ROOT, try and pick up the required toolchain. We expect something like: +# /opt/android-ndk-r83/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin +# Once we locate the toolchain, we add it to the PATH. Note: this is the 'hard way' of +# doing things according to the NDK documentation for Ice Cream Sandwich. +# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html + +ANDROID_TOOLCHAIN="" +for host in "linux-x86_64" "linux-x86" "darwin-x86_64" "darwin-x86" +do + if [ -d "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/bin" ]; then + ANDROID_TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/bin" + break + fi +done + +# Error checking +if [ -z "$ANDROID_TOOLCHAIN" ] || [ ! -d "$ANDROID_TOOLCHAIN" ]; then + echo "Error: ANDROID_TOOLCHAIN is not valid. Please edit this script." + # echo "$ANDROID_TOOLCHAIN" + # exit 1 +fi + +case $_ANDROID_ARCH in + arch-arm) + ANDROID_TOOLS="arm-linux-androideabi-gcc arm-linux-androideabi-ranlib arm-linux-androideabi-ld" + ;; + arch-x86) + ANDROID_TOOLS="i686-linux-android-gcc i686-linux-android-ranlib i686-linux-android-ld" + ;; + *) + echo "ERROR ERROR ERROR" + ;; +esac + +for tool in $ANDROID_TOOLS +do + # Error checking + if [ ! -e "$ANDROID_TOOLCHAIN/$tool" ]; then + echo "Error: Failed to find $tool. Please edit this script." + # echo "$ANDROID_TOOLCHAIN/$tool" + # exit 1 + fi +done + +# Only modify/export PATH if ANDROID_TOOLCHAIN good +if [ ! -z "$ANDROID_TOOLCHAIN" ]; then + export ANDROID_TOOLCHAIN="$ANDROID_TOOLCHAIN" + export PATH="$ANDROID_TOOLCHAIN":"$PATH" +fi + +##################################################################### + +# For the Android SYSROOT. Can be used on the command line with --sysroot +# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html +export ANDROID_SYSROOT="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH" +export SYSROOT="$ANDROID_SYSROOT" +export NDK_SYSROOT="$ANDROID_SYSROOT" + +# Error checking +if [ -z "$ANDROID_SYSROOT" ] || [ ! -d "$ANDROID_SYSROOT" ]; then + echo "Error: ANDROID_SYSROOT is not valid. Please edit this script." + # echo "$ANDROID_SYSROOT" + # exit 1 +fi + +##################################################################### + +##################################################################### + +# Most of these should be OK (MACHINE, SYSTEM, ARCH). RELEASE is ignored. +export MACHINE=armv7 +export RELEASE=2.6.37 +export SYSTEM=android +export ARCH=arm +export CROSS_COMPILE="arm-linux-androideabi-" + +if [ "$_ANDROID_ARCH" == "arch-x86" ]; then + export MACHINE=i686 + export RELEASE=2.6.37 + export SYSTEM=android + export ARCH=x86 + export CROSS_COMPILE="i686-linux-android-" +fi + +# For the Android toolchain +# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html +export ANDROID_SYSROOT="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH" +export SYSROOT="$ANDROID_SYSROOT" +export NDK_SYSROOT="$ANDROID_SYSROOT" +export ANDROID_NDK_SYSROOT="$ANDROID_SYSROOT" +export ANDROID_API="$_ANDROID_API" + +export HOSTCC=gcc + +VERBOSE=1 +if [ ! -z "$VERBOSE" ] && [ "$VERBOSE" != "0" ]; then + echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT" + echo "ANDROID_ARCH: $_ANDROID_ARCH" + echo "ANDROID_EABI: $_ANDROID_EABI" + echo "ANDROID_API: $ANDROID_API" + echo "ANDROID_SYSROOT: $ANDROID_SYSROOT" + echo "ANDROID_TOOLCHAIN: $ANDROID_TOOLCHAIN" + echo "FIPS_SIG: $FIPS_SIG" + echo "CROSS_COMPILE: $CROSS_COMPILE" + echo "ANDROID_DEV: $ANDROID_DEV" +fi + +cd ffmpeg-HEAD-aa86ccc.android +make distclean +./configure --enable-shared --disable-static --disable-programs +make 2>&1 +# We give access to header files. +ln -s `pwd`/libavcodec/ "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/include/" +ln -s `pwd`/libavformat/ "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/include/" +ln -s `pwd`/libavutil/ "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/include/" +# We give access to dynamic libraries. +ln -s `pwd`/libavcodec/libavcodec.so "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/" +ln -s `pwd`/libavcodec/libavutil.so "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/" +ln -s `pwd`/libavcodec/libavformat.so "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/" From 556cb99bf261d8c7da05df9379b9d12b0a6b95f3 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 26 Jul 2016 18:06:37 +0200 Subject: [PATCH 06/10] Add appveyor dependencies for ffmpeg --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index c597890742a..148ee4fb5bf 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -19,7 +19,7 @@ cache: install: - bash -lc "echo $MSYSTEM; pacman --needed --noconfirm -Sy pacman-mirrors" - bash -lc "pacman --noconfirm -Sy" - - bash -lc "pacman -Sy --needed --noconfirm git mingw-w64-x86_64-toolchain mingw-w64-x86_64-freetype mingw-w64-x86_64-icu mingw-w64-x86_64-nspr mingw-w64-x86_64-ca-certificates mingw-w64-x86_64-expat mingw-w64-x86_64-cmake tar diffutils patch patchutils make python2-setuptools" + - bash -lc "pacman -Sy --needed --noconfirm git mingw-w64-x86_64-toolchain mingw-w64-x86_64-freetype mingw-w64-x86_64-icu mingw-w64-x86_64-nspr mingw-w64-x86_64-ca-certificates mingw-w64-x86_64-expat mingw-w64-x86_64-cmake tar diffutils patch patchutils make python2-setuptools mingw-w64-x86_64-ffmpeg" - bash -lc "easy_install-2.7 pip virtualenv" - bash -lc "mv /mingw64/bin/python2.exe /mingw64/bin/python2-mingw64.exe" - bash -lc "mv /mingw64/bin/python2.7.exe /mingw64/bin/python2.7-mingw64.exe" From 1d53dae96022cf1052ee4bfb1ee9c4adacf6b704 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 26 Jul 2016 15:17:06 +0200 Subject: [PATCH 07/10] Remove video-metadata from android platform --- components/script/Cargo.toml | 4 +- components/script/dom/htmlmediaelement.rs | 48 +++--- components/script/lib.rs | 1 + support/android/ffmpeg.makefile | 13 -- support/android/ffmpeg.sh | 187 ---------------------- 5 files changed, 34 insertions(+), 219 deletions(-) delete mode 100644 support/android/ffmpeg.makefile delete mode 100755 support/android/ffmpeg.sh diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 96d81f76366..2847a39a180 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -17,6 +17,9 @@ debugmozjs = ['js/debugmozjs'] [target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies] tinyfiledialogs = {git = "https://github.com/jdm/tinyfiledialogs"} +[target.'cfg(not(target_os = "android"))'.dependencies] +video-metadata = {git = "https://github.com/GuillaumeGomez/video-metadata-rs"} + [dependencies] angle = {git = "https://github.com/servo/angle", branch = "servo"} app_units = "0.2.5" @@ -67,7 +70,6 @@ time = "0.1.12" url = {version = "1.0.0", features = ["heap_size", "query_encoding"]} util = {path = "../util"} uuid = {version = "0.2", features = ["v4"]} -video-metadata = {git = "https://github.com/GuillaumeGomez/video-metadata-rs"} websocket = "0.17" xml5ever = {version = "0.1.2", features = ["unstable"]} diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index cc8bed31ebd..d3a0562173f 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -89,24 +89,7 @@ impl AsyncResponseListener for HTMLMediaElementContext { // https://html.spec.whatwg.org/multipage/#media-data-processing-steps-list // => "Once enough of the media data has been fetched to determine the duration..." if !self.have_metadata { - match video_metadata::get_format_from_slice(&self.data) { - Ok(meta) => { - let dur = meta.duration.unwrap_or(::std::time::Duration::new(0, 0)); - *elem.video.borrow_mut() = Some(VideoMedia { - format: format!("{:?}", meta.format), - duration: Duration::seconds(dur.as_secs() as i64) + - Duration::nanoseconds(dur.subsec_nanos() as i64), - width: meta.size.width, - height: meta.size.height, - video: meta.video, - audio: meta.audio, - }); - // Step 6 - elem.change_ready_state(HAVE_METADATA); - self.have_metadata = true; - } - _ => {} - } + self.check_metadata(&elem); } else { elem.change_ready_state(HAVE_CURRENT_DATA); } @@ -176,6 +159,35 @@ impl HTMLMediaElementContext { ignore_response: false, } } + + #[cfg(not(target_os = "android"))] + fn check_metadata(&mut self, elem: &HTMLMediaElement) { + match video_metadata::get_format_from_slice(&self.data) { + Ok(meta) => { + let dur = meta.duration.unwrap_or(::std::time::Duration::new(0, 0)); + *elem.video.borrow_mut() = Some(VideoMedia { + format: format!("{:?}", meta.format), + duration: Duration::seconds(dur.as_secs() as i64) + + Duration::nanoseconds(dur.subsec_nanos() as i64), + width: meta.size.width, + height: meta.size.height, + video: meta.video, + audio: meta.audio, + }); + // Step 6 + elem.change_ready_state(HAVE_METADATA); + self.have_metadata = true; + } + _ => {} + } + } + + #[cfg(target_os = "android")] + fn check_metadata(&mut self, _elem: &HTMLMediaElement) { + // Step 6. + elem.change_ready_state(HAVE_METADATA); + self.have_metadata = true; + } } #[derive(JSTraceable, HeapSizeOf)] diff --git a/components/script/lib.rs b/components/script/lib.rs index 0b0a45f701c..792aa24b438 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -88,6 +88,7 @@ extern crate url; #[macro_use] extern crate util; extern crate uuid; +#[cfg(not(target_os = "android"))] extern crate video_metadata; extern crate webrender_traits; extern crate websocket; diff --git a/support/android/ffmpeg.makefile b/support/android/ffmpeg.makefile deleted file mode 100644 index eb6cbd81b02..00000000000 --- a/support/android/ffmpeg.makefile +++ /dev/null @@ -1,13 +0,0 @@ -.PHONY: all -all: ffmpeg - @: # No-op to silence the "make: Nothing to be done for 'all'." message. - -.PHONY: ffmpeg -ffmpeg: ffmpeg-libs - -ffmpeg-libs: ffmpeg-libs/Configure - ./ffmpeg.sh ${ANDROID_NDK} - -ffmpeg-libs/Configure: - wget https://www.guillaume-gomez.fr/ffmpeg-android.tar.gz - tar -zxf ffmpeg-android.tar.gz diff --git a/support/android/ffmpeg.sh b/support/android/ffmpeg.sh deleted file mode 100755 index 7d569928091..00000000000 --- a/support/android/ffmpeg.sh +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/bash -# Wrote by Guillaume Gomez for ffmpeg -# build for android build server - -##################################################################### - -# Set ANDROID_NDK_ROOT to you NDK location. For example, -# /opt/android-ndk-r8e or /opt/android-ndk-r9. This can be done in a -# login script. If ANDROID_NDK_ROOT is not specified, the script will -# try to pick it up with the value of _ANDROID_NDK_ROOT below. If -# ANDROID_NDK_ROOT is set, then the value is ignored. -# _ANDROID_NDK="android-ndk-r8e" -_ANDROID_NDK="android-ndk-r9" -# _ANDROID_NDK="android-ndk-r10" - -# Set _ANDROID_EABI to the EABI you want to use. You can find the -# list in $ANDROID_NDK_ROOT/toolchains. This value is always used. -# _ANDROID_EABI="x86-4.6" -# _ANDROID_EABI="arm-linux-androideabi-4.6" -_ANDROID_EABI="arm-linux-androideabi-4.8" - -# Set _ANDROID_ARCH to the architecture you are building for. -# This value is always used. -# _ANDROID_ARCH=arch-x86 -_ANDROID_ARCH=arch-arm - -# Set _ANDROID_API to the API you want to use. You should set it -# to one of: android-14, android-9, android-8, android-14, android-5 -# android-4, or android-3. You can't set it to the latest (for -# example, API-17) because the NDK does not supply the platform. At -# Android 5.0, there will likely be another platform added (android-22?). -# This value is always used. -# _ANDROID_API="android-14" -_ANDROID_API="$ANDROID_PLATFORM" -# _ANDROID_API="android-19" - -##################################################################### - -# If the user did not specify the NDK location, try and pick it up. -# We expect something like ANDROID_NDK_ROOT=/opt/android-ndk-r8e -# or ANDROID_NDK_ROOT=/usr/local/android-ndk-r8e. -export ANDROID_NDK_ROOT=$1 -echo $ANDROID_NDK_ROOT -# Error checking -# ANDROID_NDK_ROOT should always be set by the user (even when not running this script) -# http://groups.google.com/group/android-ndk/browse_thread/thread/a998e139aca71d77 -if [ -z "$ANDROID_NDK_ROOT" ] || [ ! -d "$ANDROID_NDK_ROOT" ]; then - echo "Error: ANDROID_NDK_ROOT is not a valid path. Please edit this script." - # echo "$ANDROID_NDK_ROOT" - # exit 1 -fi - -# Error checking -if [ ! -d "$ANDROID_NDK_ROOT/toolchains" ]; then - echo "Error: ANDROID_NDK_ROOT/toolchains is not a valid path. Please edit this script." - # echo "$ANDROID_NDK_ROOT/toolchains" - # exit 1 -fi - -# Error checking -if [ ! -d "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI" ]; then - echo "Error: ANDROID_EABI is not a valid path. Please edit this script." - # echo "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI" - # exit 1 -fi - -##################################################################### - -# Based on ANDROID_NDK_ROOT, try and pick up the required toolchain. We expect something like: -# /opt/android-ndk-r83/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin -# Once we locate the toolchain, we add it to the PATH. Note: this is the 'hard way' of -# doing things according to the NDK documentation for Ice Cream Sandwich. -# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html - -ANDROID_TOOLCHAIN="" -for host in "linux-x86_64" "linux-x86" "darwin-x86_64" "darwin-x86" -do - if [ -d "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/bin" ]; then - ANDROID_TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/bin" - break - fi -done - -# Error checking -if [ -z "$ANDROID_TOOLCHAIN" ] || [ ! -d "$ANDROID_TOOLCHAIN" ]; then - echo "Error: ANDROID_TOOLCHAIN is not valid. Please edit this script." - # echo "$ANDROID_TOOLCHAIN" - # exit 1 -fi - -case $_ANDROID_ARCH in - arch-arm) - ANDROID_TOOLS="arm-linux-androideabi-gcc arm-linux-androideabi-ranlib arm-linux-androideabi-ld" - ;; - arch-x86) - ANDROID_TOOLS="i686-linux-android-gcc i686-linux-android-ranlib i686-linux-android-ld" - ;; - *) - echo "ERROR ERROR ERROR" - ;; -esac - -for tool in $ANDROID_TOOLS -do - # Error checking - if [ ! -e "$ANDROID_TOOLCHAIN/$tool" ]; then - echo "Error: Failed to find $tool. Please edit this script." - # echo "$ANDROID_TOOLCHAIN/$tool" - # exit 1 - fi -done - -# Only modify/export PATH if ANDROID_TOOLCHAIN good -if [ ! -z "$ANDROID_TOOLCHAIN" ]; then - export ANDROID_TOOLCHAIN="$ANDROID_TOOLCHAIN" - export PATH="$ANDROID_TOOLCHAIN":"$PATH" -fi - -##################################################################### - -# For the Android SYSROOT. Can be used on the command line with --sysroot -# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html -export ANDROID_SYSROOT="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH" -export SYSROOT="$ANDROID_SYSROOT" -export NDK_SYSROOT="$ANDROID_SYSROOT" - -# Error checking -if [ -z "$ANDROID_SYSROOT" ] || [ ! -d "$ANDROID_SYSROOT" ]; then - echo "Error: ANDROID_SYSROOT is not valid. Please edit this script." - # echo "$ANDROID_SYSROOT" - # exit 1 -fi - -##################################################################### - -##################################################################### - -# Most of these should be OK (MACHINE, SYSTEM, ARCH). RELEASE is ignored. -export MACHINE=armv7 -export RELEASE=2.6.37 -export SYSTEM=android -export ARCH=arm -export CROSS_COMPILE="arm-linux-androideabi-" - -if [ "$_ANDROID_ARCH" == "arch-x86" ]; then - export MACHINE=i686 - export RELEASE=2.6.37 - export SYSTEM=android - export ARCH=x86 - export CROSS_COMPILE="i686-linux-android-" -fi - -# For the Android toolchain -# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html -export ANDROID_SYSROOT="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH" -export SYSROOT="$ANDROID_SYSROOT" -export NDK_SYSROOT="$ANDROID_SYSROOT" -export ANDROID_NDK_SYSROOT="$ANDROID_SYSROOT" -export ANDROID_API="$_ANDROID_API" - -export HOSTCC=gcc - -VERBOSE=1 -if [ ! -z "$VERBOSE" ] && [ "$VERBOSE" != "0" ]; then - echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT" - echo "ANDROID_ARCH: $_ANDROID_ARCH" - echo "ANDROID_EABI: $_ANDROID_EABI" - echo "ANDROID_API: $ANDROID_API" - echo "ANDROID_SYSROOT: $ANDROID_SYSROOT" - echo "ANDROID_TOOLCHAIN: $ANDROID_TOOLCHAIN" - echo "FIPS_SIG: $FIPS_SIG" - echo "CROSS_COMPILE: $CROSS_COMPILE" - echo "ANDROID_DEV: $ANDROID_DEV" -fi - -cd ffmpeg-HEAD-aa86ccc.android -make distclean -./configure --enable-shared --disable-static --disable-programs -make 2>&1 -# We give access to header files. -ln -s `pwd`/libavcodec/ "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/include/" -ln -s `pwd`/libavformat/ "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/include/" -ln -s `pwd`/libavutil/ "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/include/" -# We give access to dynamic libraries. -ln -s `pwd`/libavcodec/libavcodec.so "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/" -ln -s `pwd`/libavcodec/libavutil.so "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/" -ln -s `pwd`/libavcodec/libavformat.so "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/" From e87c34a9e9d5ff2a1f0f7d32d4ebb065b96ee57c Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Wed, 27 Jul 2016 21:07:15 +0200 Subject: [PATCH 08/10] Disable video-metadata build on arm architecture as well --- components/script/Cargo.toml | 2 +- components/script/dom/htmlmediaelement.rs | 7 ++++--- components/script/lib.rs | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 2847a39a180..bd51a402238 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -17,7 +17,7 @@ debugmozjs = ['js/debugmozjs'] [target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies] tinyfiledialogs = {git = "https://github.com/jdm/tinyfiledialogs"} -[target.'cfg(not(target_os = "android"))'.dependencies] +[target.'cfg(not(any(target_os = "android", target_arch = "arm")))'.dependencies] video-metadata = {git = "https://github.com/GuillaumeGomez/video-metadata-rs"} [dependencies] diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index d3a0562173f..eb0e4b0248c 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -35,6 +35,7 @@ use string_cache::Atom; use task_source::TaskSource; use time::{self, Timespec, Duration}; use url::Url; +#[cfg(not(any(target_os = "android", target_arch = "arm")))] use video_metadata; struct HTMLMediaElementContext { @@ -160,7 +161,7 @@ impl HTMLMediaElementContext { } } - #[cfg(not(target_os = "android"))] + #[cfg(not(any(target_os = "android", target_arch = "arm")))] fn check_metadata(&mut self, elem: &HTMLMediaElement) { match video_metadata::get_format_from_slice(&self.data) { Ok(meta) => { @@ -182,8 +183,8 @@ impl HTMLMediaElementContext { } } - #[cfg(target_os = "android")] - fn check_metadata(&mut self, _elem: &HTMLMediaElement) { + #[cfg(any(target_os = "android", target_arch = "arm"))] + fn check_metadata(&mut self, elem: &HTMLMediaElement) { // Step 6. elem.change_ready_state(HAVE_METADATA); self.have_metadata = true; diff --git a/components/script/lib.rs b/components/script/lib.rs index 792aa24b438..a9497eb46b3 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -88,7 +88,7 @@ extern crate url; #[macro_use] extern crate util; extern crate uuid; -#[cfg(not(target_os = "android"))] +#[cfg(not(any(target_os = "android", target_arch = "arm")))] extern crate video_metadata; extern crate webrender_traits; extern crate websocket; From 19134be74f9db238c600f5b9edc964d7bed65ff0 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 28 Jul 2016 02:28:02 +0200 Subject: [PATCH 09/10] Add condition to not use video-metadata on aarch64 architecture as well --- components/script/Cargo.toml | 2 +- components/script/dom/htmlmediaelement.rs | 6 +++--- components/script/lib.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index bd51a402238..925119803f2 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -17,7 +17,7 @@ debugmozjs = ['js/debugmozjs'] [target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies] tinyfiledialogs = {git = "https://github.com/jdm/tinyfiledialogs"} -[target.'cfg(not(any(target_os = "android", target_arch = "arm")))'.dependencies] +[target.'cfg(not(any(target_os = "android", target_arch = "arm", target_arch = "aarch64")))'.dependencies] video-metadata = {git = "https://github.com/GuillaumeGomez/video-metadata-rs"} [dependencies] diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index eb0e4b0248c..3804f04bc58 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -35,7 +35,7 @@ use string_cache::Atom; use task_source::TaskSource; use time::{self, Timespec, Duration}; use url::Url; -#[cfg(not(any(target_os = "android", target_arch = "arm")))] +#[cfg(not(any(target_os = "android", target_arch = "arm", target_arch = "aarch64")))] use video_metadata; struct HTMLMediaElementContext { @@ -161,7 +161,7 @@ impl HTMLMediaElementContext { } } - #[cfg(not(any(target_os = "android", target_arch = "arm")))] + #[cfg(not(any(target_os = "android", target_arch = "arm", target_arch = "aarch64")))] fn check_metadata(&mut self, elem: &HTMLMediaElement) { match video_metadata::get_format_from_slice(&self.data) { Ok(meta) => { @@ -183,7 +183,7 @@ impl HTMLMediaElementContext { } } - #[cfg(any(target_os = "android", target_arch = "arm"))] + #[cfg(any(target_os = "android", target_arch = "arm", target_arch = "aarch64"))] fn check_metadata(&mut self, elem: &HTMLMediaElement) { // Step 6. elem.change_ready_state(HAVE_METADATA); diff --git a/components/script/lib.rs b/components/script/lib.rs index a9497eb46b3..988bb312b97 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -88,7 +88,7 @@ extern crate url; #[macro_use] extern crate util; extern crate uuid; -#[cfg(not(any(target_os = "android", target_arch = "arm")))] +#[cfg(not(any(target_os = "android", target_arch = "arm", target_arch = "aarch64")))] extern crate video_metadata; extern crate webrender_traits; extern crate websocket; From 34cb55193d639433caa01029c0726402af3c4481 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 29 Jul 2016 23:21:57 +0200 Subject: [PATCH 10/10] Change tests results to set timeout/failure expected --- components/script/dom/htmlmediaelement.rs | 3 +-- tests/wpt/metadata/FileAPI/file/File-constructor.html.ini | 1 + .../media-elements/error-codes/error.html.ini | 6 ++++++ .../media-elements/event_loadeddata.html.ini | 3 +++ .../media-elements/event_loadeddata_noautoplay.html.ini | 6 ++++++ .../media-elements/event_loadedmetadata.html.ini | 6 ++++++ .../media-elements/event_loadedmetadata_noautoplay.html.ini | 6 ++++++ .../event_order_loadedmetadata_loadeddata.html.ini | 6 ++++++ .../media-elements/readyState_during_loadeddata.html.ini | 6 ++++++ .../readyState_during_loadedmetadata.html.ini | 6 ++++++ 10 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/error-codes/error.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadeddata_noautoplay.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadedmetadata.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadedmetadata_noautoplay.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_order_loadedmetadata_loadeddata.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/readyState_during_loadeddata.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/readyState_during_loadedmetadata.html.ini diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 3804f04bc58..119139ae6d8 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -77,12 +77,11 @@ impl AsyncResponseListener for HTMLMediaElementContext { } } - fn data_available(&mut self, payload: Vec) { + fn data_available(&mut self, mut payload: Vec) { if self.ignore_response { return; } - let mut payload = payload; self.data.append(&mut payload); let elem = self.elem.root(); diff --git a/tests/wpt/metadata/FileAPI/file/File-constructor.html.ini b/tests/wpt/metadata/FileAPI/file/File-constructor.html.ini index 79167726fa2..1134394834f 100644 --- a/tests/wpt/metadata/FileAPI/file/File-constructor.html.ini +++ b/tests/wpt/metadata/FileAPI/file/File-constructor.html.ini @@ -11,3 +11,4 @@ [Various fileBits] expected: FAIL bug: https://github.com/servo/servo/issues/10911 + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/error-codes/error.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/error-codes/error.html.ini new file mode 100644 index 00000000000..7280d3b7e4f --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/error-codes/error.html.ini @@ -0,0 +1,6 @@ +[error.html] + type: testharness + expected: TIMEOUT + [audio.error after successful load] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadeddata.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadeddata.html.ini index efd785bce04..249d3fa61f6 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadeddata.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadeddata.html.ini @@ -7,3 +7,6 @@ [setting src attribute on autoplay video should trigger loadeddata event] expected: NOTRUN + [setting src attribute on autoplay audio should trigger loadeddata event] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadeddata_noautoplay.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadeddata_noautoplay.html.ini new file mode 100644 index 00000000000..7c16b52bdbe --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadeddata_noautoplay.html.ini @@ -0,0 +1,6 @@ +[event_loadeddata_noautoplay.html] + type: testharness + expected: TIMEOUT + [setting src attribute on non-autoplay audio should trigger loadeddata event] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadedmetadata.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadedmetadata.html.ini new file mode 100644 index 00000000000..90e0b6b2fad --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadedmetadata.html.ini @@ -0,0 +1,6 @@ +[event_loadedmetadata.html] + type: testharness + expected: TIMEOUT + [setting src attribute on autoplay audio should trigger loadedmetadata event] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadedmetadata_noautoplay.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadedmetadata_noautoplay.html.ini new file mode 100644 index 00000000000..7d4abbe6b77 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_loadedmetadata_noautoplay.html.ini @@ -0,0 +1,6 @@ +[event_loadedmetadata_noautoplay.html] + type: testharness + expected: TIMEOUT + [setting src attribute on non-autoplay audio should trigger loadedmetadata event] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_order_loadedmetadata_loadeddata.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_order_loadedmetadata_loadeddata.html.ini new file mode 100644 index 00000000000..ef23353c3bc --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_order_loadedmetadata_loadeddata.html.ini @@ -0,0 +1,6 @@ +[event_order_loadedmetadata_loadeddata.html] + type: testharness + expected: TIMEOUT + [setting src attribute on autoplay audio should trigger loadedmetadata then loadeddata event] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/readyState_during_loadeddata.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/readyState_during_loadeddata.html.ini new file mode 100644 index 00000000000..f765e6bca1d --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/readyState_during_loadeddata.html.ini @@ -0,0 +1,6 @@ +[readyState_during_loadeddata.html] + type: testharness + expected: TIMEOUT + [audio.readyState should be >= HAVE_CURRENT_DATA during loadeddata event] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/readyState_during_loadedmetadata.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/readyState_during_loadedmetadata.html.ini new file mode 100644 index 00000000000..a3aaca7f389 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/readyState_during_loadedmetadata.html.ini @@ -0,0 +1,6 @@ +[readyState_during_loadedmetadata.html] + type: testharness + expected: TIMEOUT + [audio.readyState should be >= HAVE_METADATA during loadedmetadata event] + expected: NOTRUN +