mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Upgrade media / GStreamer / GLib (#30750)
- Upgrade the version of GStreamer for Windows This upgrades the Windows build to use the most recent version of GStreamer. This is necessary to upgrade our GStreamer dependency. - Stop shipping GStreamer binaries on Linux The binary bundle of GStreamer that we package is not used to compile -- only to run layout tests. It's too old for the APIs that we are using (as evidenced by needed 1.18 for WebRTC) and nowadays Linux distributions carry a new version so it's unecessary for our build machines. No longer using this binary bundle will allow us to upgrade our GStreamer dependency -- which now has stricter checks that we are using at least version 1.18. - Upgrade media to use newer versions of GStreamer / GLib dependencies
This commit is contained in:
parent
c219204084
commit
7fa4ea9740
36 changed files with 517 additions and 338 deletions
18
.github/workflows/linux-wpt.yml
vendored
18
.github/workflows/linux-wpt.yml
vendored
|
@ -21,6 +21,7 @@ env:
|
||||||
RUST_BACKTRACE: 1
|
RUST_BACKTRACE: 1
|
||||||
SHELL: /bin/bash
|
SHELL: /bin/bash
|
||||||
WPT_COMMAND_LINE_ARG: "${{ inputs.wpt-layout == 'layout-2013' && '--legacy-layout' || '' }}"
|
WPT_COMMAND_LINE_ARG: "${{ inputs.wpt-layout == 'layout-2013' && '--legacy-layout' || '' }}"
|
||||||
|
GST_PLUGIN_FEATURE_RANK: pulsesink:NONE,alsasink:NONE,jacksink:NONE,fakesink:MAX
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linux-wpt:
|
linux-wpt:
|
||||||
|
@ -48,25 +49,14 @@ jobs:
|
||||||
with:
|
with:
|
||||||
name: release-binary
|
name: release-binary
|
||||||
path: release-binary
|
path: release-binary
|
||||||
- name: Cache libffi
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: ./libffi6_3.2.1-8_amd64.deb
|
|
||||||
key: cache-libffi
|
|
||||||
- name: Download libffi
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
wget http://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
|
|
||||||
- name: unPackage binary
|
- name: unPackage binary
|
||||||
run: tar -xzf release-binary/target.tar.gz
|
run: tar -xzf release-binary/target.tar.gz
|
||||||
- name: Prep test environment
|
- name: Bootstrap dependencies
|
||||||
run: |
|
run: |
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install -qy --no-install-recommends libgl1 libssl1.1 libdbus-1-3 libxcb-xfixes0-dev libxcb-shape0-dev libunwind8 libgl1-mesa-dri mesa-vulkan-drivers libegl1-mesa
|
sudo apt install -qy --no-install-recommends mesa-vulkan-drivers
|
||||||
sudo apt install ./libffi6_3.2.1-8_amd64.deb
|
python3 ./mach bootstrap
|
||||||
python3 ./mach bootstrap-gstreamer
|
|
||||||
- name: Sync from upstream WPT
|
- name: Sync from upstream WPT
|
||||||
if: ${{ inputs.wpt-sync-from-upstream }}
|
if: ${{ inputs.wpt-sync-from-upstream }}
|
||||||
run: |
|
run: |
|
||||||
|
|
4
.github/workflows/linux.yml
vendored
4
.github/workflows/linux.yml
vendored
|
@ -96,7 +96,9 @@ jobs:
|
||||||
- name: Bootstrap Python
|
- name: Bootstrap Python
|
||||||
run: python3 -m pip install --upgrade pip
|
run: python3 -m pip install --upgrade pip
|
||||||
- name: Bootstrap dependencies
|
- name: Bootstrap dependencies
|
||||||
run: sudo apt update && python3 ./mach bootstrap
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
python3 ./mach bootstrap
|
||||||
- name: Tidy
|
- name: Tidy
|
||||||
run: python3 ./mach test-tidy --no-progress --all
|
run: python3 ./mach test-tidy --no-progress --all
|
||||||
- name: Build (${{ inputs.profile }})
|
- name: Build (${{ inputs.profile }})
|
||||||
|
|
574
Cargo.lock
generated
574
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -40,6 +40,14 @@ fxhash = "0.2"
|
||||||
getopts = "0.2.11"
|
getopts = "0.2.11"
|
||||||
gfx_traits = { path = "components/shared/gfx" }
|
gfx_traits = { path = "components/shared/gfx" }
|
||||||
gleam = "0.15"
|
gleam = "0.15"
|
||||||
|
glib = "0.18"
|
||||||
|
gstreamer = { version = "0.21", features = ["v1_18"] }
|
||||||
|
gstreamer-base = "0.21"
|
||||||
|
gstreamer-gl = "0.21"
|
||||||
|
gstreamer-gl-sys = { version = "0.21" }
|
||||||
|
gstreamer-gl-wayland = { version = "0.21" }
|
||||||
|
gstreamer-sys = "0.21"
|
||||||
|
gstreamer-video = "0.21"
|
||||||
headers = "0.3"
|
headers = "0.3"
|
||||||
html5ever = "0.26"
|
html5ever = "0.26"
|
||||||
http = "0.2"
|
http = "0.2"
|
||||||
|
|
|
@ -378,9 +378,9 @@ impl From<&RTCDataChannelInit> for DataChannelInit {
|
||||||
impl From<DataChannelState> for RTCDataChannelState {
|
impl From<DataChannelState> for RTCDataChannelState {
|
||||||
fn from(state: DataChannelState) -> RTCDataChannelState {
|
fn from(state: DataChannelState) -> RTCDataChannelState {
|
||||||
match state {
|
match state {
|
||||||
DataChannelState::New |
|
DataChannelState::Connecting | DataChannelState::__Unknown(_) => {
|
||||||
DataChannelState::Connecting |
|
RTCDataChannelState::Connecting
|
||||||
DataChannelState::__Unknown(_) => RTCDataChannelState::Connecting,
|
},
|
||||||
DataChannelState::Open => RTCDataChannelState::Open,
|
DataChannelState::Open => RTCDataChannelState::Open,
|
||||||
DataChannelState::Closing => RTCDataChannelState::Closing,
|
DataChannelState::Closing => RTCDataChannelState::Closing,
|
||||||
DataChannelState::Closed => RTCDataChannelState::Closed,
|
DataChannelState::Closed => RTCDataChannelState::Closed,
|
||||||
|
|
|
@ -458,8 +458,11 @@ impl RTCPeerConnection {
|
||||||
.task_manager()
|
.task_manager()
|
||||||
.networking_task_source_with_canceller();
|
.networking_task_source_with_canceller();
|
||||||
let this = Trusted::new(self);
|
let this = Trusted::new(self);
|
||||||
self.controller.borrow_mut().as_ref().unwrap().create_offer(
|
self.controller
|
||||||
(move |desc: SessionDescription| {
|
.borrow_mut()
|
||||||
|
.as_ref()
|
||||||
|
.unwrap()
|
||||||
|
.create_offer(Box::new(move |desc: SessionDescription| {
|
||||||
let _ = task_source.queue_with_canceller(
|
let _ = task_source.queue_with_canceller(
|
||||||
task!(offer_created: move || {
|
task!(offer_created: move || {
|
||||||
let this = this.root();
|
let this = this.root();
|
||||||
|
@ -476,9 +479,7 @@ impl RTCPeerConnection {
|
||||||
}),
|
}),
|
||||||
&canceller,
|
&canceller,
|
||||||
);
|
);
|
||||||
})
|
}));
|
||||||
.into(),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_answer(&self) {
|
fn create_answer(&self) {
|
||||||
|
@ -493,27 +494,24 @@ impl RTCPeerConnection {
|
||||||
.borrow_mut()
|
.borrow_mut()
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.create_answer(
|
.create_answer(Box::new(move |desc: SessionDescription| {
|
||||||
(move |desc: SessionDescription| {
|
let _ = task_source.queue_with_canceller(
|
||||||
let _ = task_source.queue_with_canceller(
|
task!(answer_created: move || {
|
||||||
task!(answer_created: move || {
|
let this = this.root();
|
||||||
let this = this.root();
|
if this.offer_answer_generation.get() != generation {
|
||||||
if this.offer_answer_generation.get() != generation {
|
// the state has changed since we last created the offer,
|
||||||
// the state has changed since we last created the offer,
|
// create a fresh one
|
||||||
// create a fresh one
|
this.create_answer();
|
||||||
this.create_answer();
|
} else {
|
||||||
} else {
|
let init: RTCSessionDescriptionInit = desc.into();
|
||||||
let init: RTCSessionDescriptionInit = desc.into();
|
for promise in this.answer_promises.borrow_mut().drain(..) {
|
||||||
for promise in this.answer_promises.borrow_mut().drain(..) {
|
promise.resolve_native(&init);
|
||||||
promise.resolve_native(&init);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}),
|
}
|
||||||
&canceller,
|
}),
|
||||||
);
|
&canceller,
|
||||||
})
|
);
|
||||||
.into(),
|
}));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,7 +640,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.set_local_description(
|
.set_local_description(
|
||||||
desc.clone(),
|
desc.clone(),
|
||||||
(move || {
|
Box::new(move || {
|
||||||
let _ = task_source.queue_with_canceller(
|
let _ = task_source.queue_with_canceller(
|
||||||
task!(local_description_set: move || {
|
task!(local_description_set: move || {
|
||||||
// XXXManishearth spec actually asks for an intricate
|
// XXXManishearth spec actually asks for an intricate
|
||||||
|
@ -659,8 +657,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
|
||||||
}),
|
}),
|
||||||
&canceller,
|
&canceller,
|
||||||
);
|
);
|
||||||
})
|
}),
|
||||||
.into(),
|
|
||||||
);
|
);
|
||||||
p
|
p
|
||||||
}
|
}
|
||||||
|
@ -683,7 +680,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.set_remote_description(
|
.set_remote_description(
|
||||||
desc.clone(),
|
desc.clone(),
|
||||||
(move || {
|
Box::new(move || {
|
||||||
let _ = task_source.queue_with_canceller(
|
let _ = task_source.queue_with_canceller(
|
||||||
task!(remote_description_set: move || {
|
task!(remote_description_set: move || {
|
||||||
// XXXManishearth spec actually asks for an intricate
|
// XXXManishearth spec actually asks for an intricate
|
||||||
|
@ -700,8 +697,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
|
||||||
}),
|
}),
|
||||||
&canceller,
|
&canceller,
|
||||||
);
|
);
|
||||||
})
|
}),
|
||||||
.into(),
|
|
||||||
);
|
);
|
||||||
p
|
p
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ euclid = { workspace = true }
|
||||||
gfx = { path = "../gfx" }
|
gfx = { path = "../gfx" }
|
||||||
gfx_traits = { workspace = true }
|
gfx_traits = { workspace = true }
|
||||||
gleam = { workspace = true }
|
gleam = { workspace = true }
|
||||||
gstreamer = { version = "0.15", features = ["v1_16"], optional = true }
|
gstreamer = { workspace = true, optional = true }
|
||||||
ipc-channel = { workspace = true }
|
ipc-channel = { workspace = true }
|
||||||
keyboard-types = { workspace = true }
|
keyboard-types = { workspace = true }
|
||||||
layout_thread_2013 = { path = "../layout_thread" }
|
layout_thread_2013 = { path = "../layout_thread" }
|
||||||
|
|
|
@ -16,7 +16,7 @@ bench = false
|
||||||
[dependencies]
|
[dependencies]
|
||||||
android_injected_glue = "0.2"
|
android_injected_glue = "0.2"
|
||||||
android_logger = "0.10"
|
android_logger = "0.10"
|
||||||
gstreamer = "0.15"
|
gstreamer = { workspace = true }
|
||||||
jni = "0.18.0"
|
jni = "0.18.0"
|
||||||
libc = { workspace = true }
|
libc = { workspace = true }
|
||||||
log = { workspace = true }
|
log = { workspace = true }
|
||||||
|
|
|
@ -430,10 +430,10 @@ def package_gstreamer_dlls(env, servo_exe_dir, target):
|
||||||
|
|
||||||
# All the shared libraries required for starting up and loading plugins.
|
# All the shared libraries required for starting up and loading plugins.
|
||||||
gst_dlls = [
|
gst_dlls = [
|
||||||
"avcodec-58.dll",
|
"avcodec-59.dll",
|
||||||
"avfilter-7.dll",
|
"avfilter-8.dll",
|
||||||
"avformat-58.dll",
|
"avformat-59.dll",
|
||||||
"avutil-56.dll",
|
"avutil-57.dll",
|
||||||
"bz2.dll",
|
"bz2.dll",
|
||||||
"ffi-7.dll",
|
"ffi-7.dll",
|
||||||
"gio-2.0-0.dll",
|
"gio-2.0-0.dll",
|
||||||
|
@ -443,26 +443,21 @@ def package_gstreamer_dlls(env, servo_exe_dir, target):
|
||||||
"graphene-1.0-0.dll",
|
"graphene-1.0-0.dll",
|
||||||
"intl-8.dll",
|
"intl-8.dll",
|
||||||
"libcrypto-1_1-x64.dll",
|
"libcrypto-1_1-x64.dll",
|
||||||
"libgmp-10.dll",
|
|
||||||
"libgnutls-30.dll",
|
|
||||||
"libhogweed-4.dll",
|
|
||||||
"libjpeg-8.dll",
|
"libjpeg-8.dll",
|
||||||
"libnettle-6.dll.",
|
|
||||||
"libogg-0.dll",
|
"libogg-0.dll",
|
||||||
"libopus-0.dll",
|
|
||||||
"libpng16-16.dll",
|
"libpng16-16.dll",
|
||||||
"libssl-1_1-x64.dll",
|
"libssl-1_1-x64.dll",
|
||||||
"libtasn1-6.dll",
|
|
||||||
"libtheora-0.dll",
|
|
||||||
"libtheoradec-1.dll",
|
|
||||||
"libtheoraenc-1.dll",
|
|
||||||
"libusrsctp-1.dll",
|
|
||||||
"libvorbis-0.dll",
|
"libvorbis-0.dll",
|
||||||
"libvorbisenc-2.dll",
|
"libvorbisenc-2.dll",
|
||||||
"libwinpthread-1.dll",
|
"libwinpthread-1.dll",
|
||||||
"nice-10.dll",
|
"nice-10.dll",
|
||||||
|
"opus-0.dll",
|
||||||
"orc-0.4-0.dll",
|
"orc-0.4-0.dll",
|
||||||
"swresample-3.dll",
|
"pcre2-8-0.dll",
|
||||||
|
"swresample-4.dll",
|
||||||
|
"theora-0.dll",
|
||||||
|
"theoradec-1.dll",
|
||||||
|
"theoraenc-1.dll",
|
||||||
"z-1.dll",
|
"z-1.dll",
|
||||||
] + windows_dlls()
|
] + windows_dlls()
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ GSTREAMER_DYLIBS = [
|
||||||
"gstfft",
|
"gstfft",
|
||||||
"gstgl",
|
"gstgl",
|
||||||
"gstpbutils",
|
"gstpbutils",
|
||||||
|
"gstplay",
|
||||||
"gstriff",
|
"gstriff",
|
||||||
"gstrtp",
|
"gstrtp",
|
||||||
"gstrtsp",
|
"gstrtsp",
|
||||||
|
@ -33,6 +34,7 @@ GSTREAMER_DYLIBS = [
|
||||||
"gstcodecparsers",
|
"gstcodecparsers",
|
||||||
"gstplayer",
|
"gstplayer",
|
||||||
"gstwebrtc",
|
"gstwebrtc",
|
||||||
|
"gstwebrtcnice",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -84,12 +86,9 @@ def windows_dlls():
|
||||||
|
|
||||||
|
|
||||||
def windows_plugins():
|
def windows_plugins():
|
||||||
# FIXME: We should support newer gstreamer versions here that replace
|
|
||||||
# gstvideoconvert and gstvideoscale with gstvideoconvertscale.
|
|
||||||
libs = [
|
libs = [
|
||||||
*GSTREAMER_PLUGINS,
|
*GSTREAMER_PLUGINS,
|
||||||
"gstvideoconvert",
|
"gstvideoconvertscale",
|
||||||
"gstvideoscale",
|
|
||||||
"gstwasapi"
|
"gstwasapi"
|
||||||
]
|
]
|
||||||
return [f"{lib}.dll" for lib in libs]
|
return [f"{lib}.dll" for lib in libs]
|
||||||
|
|
|
@ -56,7 +56,7 @@ class Base:
|
||||||
# the cross-compilation case, we might be picking it up from another directory.
|
# the cross-compilation case, we might be picking it up from another directory.
|
||||||
if check_installation and not self.is_gstreamer_installed(cross_compilation_target):
|
if check_installation and not self.is_gstreamer_installed(cross_compilation_target):
|
||||||
raise FileNotFoundError(
|
raise FileNotFoundError(
|
||||||
"GStreamer libraries not found (>= version 1.16)."
|
"GStreamer libraries not found (>= version 1.18)."
|
||||||
"Please see installation instructions in README.md"
|
"Please see installation instructions in README.md"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ class Base:
|
||||||
env, cross_compilation_target, check_installation=False)
|
env, cross_compilation_target, check_installation=False)
|
||||||
return (
|
return (
|
||||||
subprocess.call(
|
subprocess.call(
|
||||||
["pkg-config", "--atleast-version=1.16", "gstreamer-1.0"],
|
["pkg-config", "--atleast-version=1.18", "gstreamer-1.0"],
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
env=env,
|
env=env,
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
|
|
||||||
import distro
|
import distro
|
||||||
|
@ -28,8 +27,16 @@ from .base import Base
|
||||||
APT_PKGS = [
|
APT_PKGS = [
|
||||||
'build-essential', 'ccache', 'clang', 'cmake', 'curl', 'g++', 'git',
|
'build-essential', 'ccache', 'clang', 'cmake', 'curl', 'g++', 'git',
|
||||||
'gperf', 'libdbus-1-dev', 'libfreetype6-dev', 'libgl1-mesa-dri',
|
'gperf', 'libdbus-1-dev', 'libfreetype6-dev', 'libgl1-mesa-dri',
|
||||||
'libgles2-mesa-dev', 'libglib2.0-dev', 'libgstreamer-plugins-bad1.0-dev',
|
'libgles2-mesa-dev', 'libglib2.0-dev',
|
||||||
'libgstreamer-plugins-base1.0-dev', 'libgstreamer1.0-dev',
|
'libgstreamer-plugins-base1.0-dev',
|
||||||
|
'gstreamer1.0-plugins-good', 'libgstreamer-plugins-good1.0-dev',
|
||||||
|
'gstreamer1.0-plugins-bad', 'libgstreamer-plugins-bad1.0-dev',
|
||||||
|
'gstreamer1.0-plugins-ugly',
|
||||||
|
"gstreamer1.0-plugins-base", 'libgstreamer-plugins-base1.0-dev',
|
||||||
|
'gstreamer1.0-libav',
|
||||||
|
'libgstrtspserver-1.0-dev',
|
||||||
|
'gstreamer1.0-tools',
|
||||||
|
'libges-1.0-dev',
|
||||||
'libharfbuzz-dev', 'liblzma-dev', 'libunwind-dev', 'libunwind-dev',
|
'libharfbuzz-dev', 'liblzma-dev', 'libunwind-dev', 'libunwind-dev',
|
||||||
'libvulkan1', 'libx11-dev', 'libxcb-render0-dev', 'libxcb-shape0-dev',
|
'libvulkan1', 'libx11-dev', 'libxcb-render0-dev', 'libxcb-shape0-dev',
|
||||||
'libxcb-xfixes0-dev', 'libxmu-dev', 'libxmu6', 'libegl1-mesa-dev',
|
'libxcb-xfixes0-dev', 'libxmu-dev', 'libxmu6', 'libegl1-mesa-dev',
|
||||||
|
@ -156,7 +163,7 @@ class Linux(Base):
|
||||||
if self.distro in ['Ubuntu', 'Debian GNU/Linux', 'Raspbian GNU/Linux']:
|
if self.distro in ['Ubuntu', 'Debian GNU/Linux', 'Raspbian GNU/Linux']:
|
||||||
command = ['apt-get', 'install']
|
command = ['apt-get', 'install']
|
||||||
pkgs = APT_PKGS
|
pkgs = APT_PKGS
|
||||||
if subprocess.call(['dpkg', '-s'] + pkgs,
|
if subprocess.call(['dpkg', '-s'] + pkgs, shell=True,
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE) != 0:
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE) != 0:
|
||||||
install = True
|
install = True
|
||||||
elif self.distro in ['CentOS', 'CentOS Linux', 'Fedora', 'Fedora Linux']:
|
elif self.distro in ['CentOS', 'CentOS Linux', 'Fedora', 'Fedora Linux']:
|
||||||
|
@ -204,18 +211,6 @@ class Linux(Base):
|
||||||
if not force and self.is_gstreamer_installed(cross_compilation_target=None):
|
if not force and self.is_gstreamer_installed(cross_compilation_target=None):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
with tempfile.TemporaryDirectory() as temp_dir:
|
raise EnvironmentError(
|
||||||
file_name = os.path.join(temp_dir, GSTREAMER_URL.rsplit('/', maxsplit=1)[-1])
|
"Bootstrapping GStreamer on Linux is not supported. "
|
||||||
util.download_file("Pre-packaged GStreamer binaries", GSTREAMER_URL, file_name)
|
+ "Please install it using your distribution package manager.")
|
||||||
|
|
||||||
print(f"Installing GStreamer packages to {PREPACKAGED_GSTREAMER_ROOT}...")
|
|
||||||
os.makedirs(PREPACKAGED_GSTREAMER_ROOT, exist_ok=True)
|
|
||||||
|
|
||||||
# Extract, but strip one component from the output, because the package includes
|
|
||||||
# a toplevel directory called "./gst/" and we'd like to have the same directory
|
|
||||||
# structure on all platforms.
|
|
||||||
subprocess.check_call(["tar", "xf", file_name, "-C", PREPACKAGED_GSTREAMER_ROOT,
|
|
||||||
"--strip-components=2"])
|
|
||||||
|
|
||||||
assert self.is_gstreamer_installed(cross_compilation_target=None)
|
|
||||||
return True
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ DEPENDENCIES = {
|
||||||
}
|
}
|
||||||
|
|
||||||
URL_BASE = "https://github.com/servo/servo-build-deps/releases/download/msvc-deps/"
|
URL_BASE = "https://github.com/servo/servo-build-deps/releases/download/msvc-deps/"
|
||||||
GSTREAMER_URL = f"{URL_BASE}/gstreamer-1.0-msvc-x86_64-1.16.0.msi"
|
GSTREAMER_URL = f"{URL_BASE}/gstreamer-1.0-msvc-x86_64-1.22.8.msi"
|
||||||
GSTREAMER_DEVEL_URL = f"{URL_BASE}/gstreamer-1.0-devel-msvc-x86_64-1.16.0.msi"
|
GSTREAMER_DEVEL_URL = f"{URL_BASE}/gstreamer-1.0-devel-msvc-x86_64-1.22.8.msi"
|
||||||
DEPENDENCIES_DIR = os.path.join(util.get_target_dir(), "dependencies")
|
DEPENDENCIES_DIR = os.path.join(util.get_target_dir(), "dependencies")
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,19 +118,19 @@ class Windows(Base):
|
||||||
|
|
||||||
# The bootstraped version of GStreamer always takes precedance of the installed vesion.
|
# The bootstraped version of GStreamer always takes precedance of the installed vesion.
|
||||||
prepackaged_root = os.path.join(
|
prepackaged_root = os.path.join(
|
||||||
DEPENDENCIES_DIR, "gstreamer", "1.0", gst_arch_name
|
DEPENDENCIES_DIR, "gstreamer", "1.0", f"msvc_{gst_arch_name}"
|
||||||
)
|
)
|
||||||
if os.path.exists(os.path.join(prepackaged_root, "bin", "ffi-7.dll")):
|
if os.path.exists(os.path.join(prepackaged_root, "bin", "ffi-7.dll")):
|
||||||
return prepackaged_root
|
return prepackaged_root
|
||||||
|
|
||||||
# The installed version of GStreamer often sets an environment variable pointing to
|
# The installed version of GStreamer often sets an environment variable pointing to
|
||||||
# the install location.
|
# the install location.
|
||||||
root_from_env = os.environ.get(f"GSTREAMER_1_0_ROOT_{gst_arch_name}")
|
root_from_env = os.environ.get(f"GSTREAMER_1_0_ROOT_MSVC_{gst_arch_name}")
|
||||||
if root_from_env and os.path.exists(os.path.join(root_from_env, "bin", "ffi-7.dll")):
|
if root_from_env and os.path.exists(os.path.join(root_from_env, "bin", "ffi-7.dll")):
|
||||||
return root_from_env
|
return root_from_env
|
||||||
|
|
||||||
# If all else fails, look for an installation in the default install directory.
|
# If all else fails, look for an installation in the default install directory.
|
||||||
default_root = os.path.join("C:\\gstreamer\\1.0", gst_arch_name)
|
default_root = os.path.join("C:\\gstreamer\\1.0", f"msvc_{gst_arch_name}")
|
||||||
if os.path.exists(os.path.join(default_root, "bin", "ffi-7.dll")):
|
if os.path.exists(os.path.join(default_root, "bin", "ffi-7.dll")):
|
||||||
return default_root
|
return default_root
|
||||||
|
|
||||||
|
|
|
@ -21,12 +21,10 @@ rand = [
|
||||||
# Ignored packages with duplicated versions
|
# Ignored packages with duplicated versions
|
||||||
packages = [
|
packages = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if",
|
|
||||||
"cookie",
|
"cookie",
|
||||||
"futures",
|
"futures",
|
||||||
"libloading",
|
"libloading",
|
||||||
"nix",
|
"nix",
|
||||||
"num-rational",
|
|
||||||
"redox_syscall",
|
"redox_syscall",
|
||||||
"syn",
|
"syn",
|
||||||
"synstructure",
|
"synstructure",
|
||||||
|
@ -34,6 +32,11 @@ packages = [
|
||||||
"wasi",
|
"wasi",
|
||||||
"wayland-sys",
|
"wayland-sys",
|
||||||
|
|
||||||
|
# New versions of these dependencies is pulled in by GStreamer / GLib.
|
||||||
|
"itertools",
|
||||||
|
"proc-macro-crate",
|
||||||
|
"toml",
|
||||||
|
|
||||||
# This dependency is for "hermit os" which Servo doesn't support.
|
# This dependency is for "hermit os" which Servo doesn't support.
|
||||||
# Theoretically, it's never fetched.
|
# Theoretically, it's never fetched.
|
||||||
"hermit-abi",
|
"hermit-abi",
|
||||||
|
@ -53,12 +56,11 @@ packages = [
|
||||||
"foreign-types",
|
"foreign-types",
|
||||||
"foreign-types-shared",
|
"foreign-types-shared",
|
||||||
"metal",
|
"metal",
|
||||||
"paste",
|
|
||||||
|
|
||||||
# Duplicated by indexmap.
|
# Duplicated by indexmap.
|
||||||
"hashbrown",
|
"hashbrown",
|
||||||
|
|
||||||
# Duplicated by style, cbindgen, clap.
|
# Duplicated by style, cbindgen, clap, and GStreamer.
|
||||||
"indexmap",
|
"indexmap",
|
||||||
|
|
||||||
# style (0.64) vs. webxr (0.66) vs. mozjs_sys (0.68).
|
# style (0.64) vs. webxr (0.66) vs. mozjs_sys (0.68).
|
||||||
|
|
|
@ -82,7 +82,3 @@
|
||||||
|
|
||||||
[video/webm; codecs="opus" (optional)]
|
[video/webm; codecs="opus" (optional)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[video/webm; codecs="vorbis" (optional)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -931,3 +931,15 @@
|
||||||
|
|
||||||
[X SNR (46.132795778267024 dB) is not greater than or equal to 65.737. Got 46.132795778267024.]
|
[X SNR (46.132795778267024 dB) is not greater than or equal to 65.737. Got 46.132795778267024.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[15073\]\t6.4777153693314271e+21\t6.4605611562728882e-1\t6.4777153693314271e+21\t1.0026552202887025e+22\t3.8985999999999999e-3\n\t[15074\]\t2.5936898589134216e-1\t5.9696805477142334e-1\t3.3759906888008118e-1\t5.6552283858697683e-1\t3.8985999999999999e-3\n\tMax AbsError of 6.4777153693314271e+21 at index of 15073.\n\tMax RelError of 1.0026552202887025e+22 at index of 15073.\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X SNR (-392.7943512800274 dB) is not greater than or equal to 65.737. Got -392.7943512800274.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[15073\]\t3.5112564086914063e+2\t6.4605611562728882e-1\t3.5047958475351334e+2\t5.4249093271598372e+2\t3.8985999999999999e-3\n\t[15074\]\t2.5936898589134216e-1\t5.9696805477142334e-1\t3.3759906888008118e-1\t5.6552283858697683e-1\t3.8985999999999999e-3\n\tMax AbsError of 3.5047958475351334e+2 at index of 15073.\n\tMax RelError of 5.4249093271598372e+2 at index of 15073.\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X SNR (-7.45917280407153 dB) is not greater than or equal to 65.737. Got -7.45917280407153.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -82,7 +82,3 @@
|
||||||
|
|
||||||
[video/webm; codecs="opus" (optional)]
|
[video/webm; codecs="opus" (optional)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[video/webm; codecs="vorbis" (optional)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
[resize-during-playback.html]
|
[resize-during-playback.html]
|
||||||
[webm video]
|
[webm video]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[mp4 video]
|
||||||
|
expected: PRECONDITION_FAILED
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-alpha-alpha-unsigned_byte.html]
|
[tex-2d-alpha-alpha-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-luminance-luminance-unsigned_byte.html]
|
[tex-2d-luminance-luminance-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html]
|
[tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgb-rgb-unsigned_byte.html]
|
[tex-2d-rgb-rgb-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgb-rgb-unsigned_short_5_6_5.html]
|
[tex-2d-rgb-rgb-unsigned_short_5_6_5.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgba-rgba-unsigned_byte.html]
|
[tex-2d-rgba-rgba-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html]
|
[tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html]
|
[tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
[tex-video-using-tex-unit-non-zero.html]
|
[tex-video-using-tex-unit-non-zero.html]
|
||||||
bug: https://github.com/servo/servo/issues/21132
|
bug: https://github.com/servo/servo/issues/21132
|
||||||
|
expected: TIMEOUT
|
||||||
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
|
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[WebGL test #1: context does not exist]
|
[WebGL test #1: context does not exist]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-alpha-alpha-unsigned_byte.html]
|
[tex-2d-alpha-alpha-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-luminance-luminance-unsigned_byte.html]
|
[tex-2d-luminance-luminance-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html]
|
[tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgb-rgb-unsigned_byte.html]
|
[tex-2d-rgb-rgb-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgb-rgb-unsigned_short_5_6_5.html]
|
[tex-2d-rgb-rgb-unsigned_short_5_6_5.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgba-rgba-unsigned_byte.html]
|
[tex-2d-rgba-rgba-unsigned_byte.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html]
|
[tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
[tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html]
|
[tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
[tex-video-using-tex-unit-non-zero.html]
|
[tex-video-using-tex-unit-non-zero.html]
|
||||||
bug: https://github.com/servo/servo/issues/21132
|
bug: https://github.com/servo/servo/issues/21132
|
||||||
|
expected: TIMEOUT
|
||||||
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
|
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[WebGL test #1: context does not exist]
|
[WebGL test #1: context does not exist]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Overall test]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue