diff options
-rw-r--r-- | components/script/Cargo.toml | 4 | ||||
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 48 | ||||
-rw-r--r-- | components/script/lib.rs | 1 | ||||
-rw-r--r-- | support/android/ffmpeg.makefile | 13 | ||||
-rwxr-xr-x | support/android/ffmpeg.sh | 187 |
5 files changed, 34 insertions, 219 deletions
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 <guillaume1.gomez@gmail.com> 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/" |