forked from pool/MozillaFirefox
- Mozilla Firefox 79.0
MFSA 2020-30 (bsc#1174538) * CVE-2020-15652 (bmo#1634872) Potential leak of redirect targets when loading scripts in a worker * CVE-2020-6514 (bmo#1642792) WebRTC data channel leaks internal address to peer * CVE-2020-15655 (bmo#1645204) Extension APIs could be used to bypass Same-Origin Policy * CVE-2020-15653 (bmo#1521542) Bypassing iframe sandbox when allowing popups * CVE-2020-6463 (bmo#1635293) Use-after-free in ANGLE gl::Texture::onUnbindAsSamplerTexture * CVE-2020-15656 (bmo#1647293) Type confusion for special arguments in IonMonkey * CVE-2020-15658 (bmo#1637745) Overriding file type when saving to disk * CVE-2020-15657 (bmo#1644954) DLL hijacking due to incorrect loading path * CVE-2020-15654 (bmo#1648333) Custom cursor can overlay user interface * CVE-2020-15659 (bmo#1550133, bmo#1633880, bmo#1638856, bmo#1643613, bmo#1644839, bmo#1645835, bmo#1646006, bmo#1646220, bmo#1646787, bmo#1649347, bmo#1650811, bmo#1651678) Memory safety bugs fixed in Firefox 79 - updated dependency requirements: * mozilla-nspr >= 4.26 * mozilla-nss >= 3.54 * rust >= 1.43 * rust-cbindgen >= 0.14.3 - removed obsolete patch OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=847
This commit is contained in:
parent
e70345984a
commit
8addddfe67
@ -1,3 +1,38 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 23 21:00:34 UTC 2020 - Wolfgang Rosenauer <wr@rosenauer.org>
|
||||
|
||||
- Mozilla Firefox 79.0
|
||||
MFSA 2020-30 (bsc#1174538)
|
||||
* CVE-2020-15652 (bmo#1634872)
|
||||
Potential leak of redirect targets when loading scripts in a worker
|
||||
* CVE-2020-6514 (bmo#1642792)
|
||||
WebRTC data channel leaks internal address to peer
|
||||
* CVE-2020-15655 (bmo#1645204)
|
||||
Extension APIs could be used to bypass Same-Origin Policy
|
||||
* CVE-2020-15653 (bmo#1521542)
|
||||
Bypassing iframe sandbox when allowing popups
|
||||
* CVE-2020-6463 (bmo#1635293)
|
||||
Use-after-free in ANGLE gl::Texture::onUnbindAsSamplerTexture
|
||||
* CVE-2020-15656 (bmo#1647293)
|
||||
Type confusion for special arguments in IonMonkey
|
||||
* CVE-2020-15658 (bmo#1637745)
|
||||
Overriding file type when saving to disk
|
||||
* CVE-2020-15657 (bmo#1644954)
|
||||
DLL hijacking due to incorrect loading path
|
||||
* CVE-2020-15654 (bmo#1648333)
|
||||
Custom cursor can overlay user interface
|
||||
* CVE-2020-15659 (bmo#1550133, bmo#1633880, bmo#1638856,
|
||||
bmo#1643613, bmo#1644839, bmo#1645835, bmo#1646006, bmo#1646220,
|
||||
bmo#1646787, bmo#1649347, bmo#1650811, bmo#1651678)
|
||||
Memory safety bugs fixed in Firefox 79
|
||||
- updated dependency requirements:
|
||||
* mozilla-nspr >= 4.26
|
||||
* mozilla-nss >= 3.54
|
||||
* rust >= 1.43
|
||||
* rust-cbindgen >= 0.14.3
|
||||
- removed obsolete patch
|
||||
mozilla-bmo1463035.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jul 21 21:31:20 UTC 2020 - Wolfgang Rosenauer <wr@rosenauer.org>
|
||||
|
||||
|
@ -25,9 +25,9 @@
|
||||
# orig_suffix b3
|
||||
# major 69
|
||||
# mainver %major.99
|
||||
%define major 78
|
||||
%define mainver %major.0.2
|
||||
%define orig_version 78.0.2
|
||||
%define major 79
|
||||
%define mainver %major.0
|
||||
%define orig_version 79.0
|
||||
%define orig_suffix %{nil}
|
||||
%define update_channel release
|
||||
%define branding 1
|
||||
@ -88,15 +88,15 @@ BuildRequires: gcc9-c++
|
||||
%else
|
||||
BuildRequires: gcc-c++
|
||||
%endif
|
||||
BuildRequires: cargo >= 1.41
|
||||
BuildRequires: cargo >= 1.43
|
||||
BuildRequires: libXcomposite-devel
|
||||
BuildRequires: libcurl-devel
|
||||
BuildRequires: libidl-devel
|
||||
BuildRequires: libiw-devel
|
||||
BuildRequires: libproxy-devel
|
||||
BuildRequires: makeinfo
|
||||
BuildRequires: mozilla-nspr-devel >= 4.25
|
||||
BuildRequires: mozilla-nss-devel >= 3.53.1
|
||||
BuildRequires: mozilla-nspr-devel >= 4.26
|
||||
BuildRequires: mozilla-nss-devel >= 3.54
|
||||
BuildRequires: nasm >= 2.14
|
||||
BuildRequires: nodejs10 >= 10.21.0
|
||||
BuildRequires: python-devel
|
||||
@ -107,8 +107,8 @@ BuildRequires: python36
|
||||
BuildRequires: python2-xml
|
||||
BuildRequires: python3 >= 3.5
|
||||
%endif
|
||||
BuildRequires: rust >= 1.41
|
||||
BuildRequires: rust-cbindgen >= 0.14.1
|
||||
BuildRequires: rust >= 1.43
|
||||
BuildRequires: rust-cbindgen >= 0.14.3
|
||||
BuildRequires: unzip
|
||||
BuildRequires: update-desktop-files
|
||||
BuildRequires: xorg-x11-libXt-devel
|
||||
@ -186,7 +186,6 @@ Patch1: mozilla-nongnome-proxies.patch
|
||||
Patch2: mozilla-kde.patch
|
||||
Patch3: mozilla-ntlm-full-path.patch
|
||||
Patch4: mozilla-aarch64-startup-crash.patch
|
||||
Patch5: mozilla-bmo1463035.patch
|
||||
Patch6: mozilla-sandbox-fips.patch
|
||||
Patch7: mozilla-fix-aarch64-libopus.patch
|
||||
Patch8: mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
|
||||
@ -326,7 +325,6 @@ cd $RPM_BUILD_DIR/%{srcname}-%{orig_version}
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1aa00ec6d40a771d525b867b175be28eda096becc745875bcceb133a985750fc
|
||||
size 334406116
|
@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEECXsxMHeuYqAvhNpN8aZmj7t9Vy4FAl8GQvUACgkQ8aZmj7t9
|
||||
Vy7cCxAAhfHL3/7MG61pjS8Ns7CcPdSwQ0E81YtYNa6XIPCAgnl50bKANXfdsG1d
|
||||
cQbGI2oTDRWQqH4Iq47lc5rJYQkSy68U8GKiCaPl+0d3/GeBoyrqM1mQd3xy/FTG
|
||||
4JxJU2frX7ATB4mBbTw/zzfguETtKWa6Lciq4dqh1ujbg+dKRaoY0IOsf+XCMRLo
|
||||
BG+m3wnn4s+h8il36DRq60c1Ne2awEJ5lrH6PyDm0nvLCqdiUgy0ZxaXUdVdeWCs
|
||||
6K339udRXmlzI1HHvyN/lBkA272yOfzpTYYJl7XeW75IMep90t/mAlJ+9ksKrnBU
|
||||
AByOA7JpjUuXNtGel3Fszkfwk2SujyXb4m3moDw3l4XfBqXZIB7iBUt4mTAHbpQx
|
||||
zrNAWxVc0MXkyccvqfhUzOnCGYgrT6KNrn6VkTSfEv/c2fAX9IYIw+l/mQoJdMYx
|
||||
OEYF5Jvbb4GMhrwHGTyjk6wUuhB7RTPfLOkyT0iRSh6PTEmKLVw/m4wYExrnPjL4
|
||||
3Rzf0OrSWxvpYSHyT7rWRuhy/Z6X11PMIWw2R+abmkx4cCWe7Df0sHBUlhrEPiRC
|
||||
R+v8wfXVM0Xcip4EI/nriXvm/atar9L5c9N0whdW+FpgeF/KxSt5FZUk7R4I7BIG
|
||||
ga8qdXpdNF7X2ie8bOtYylsm6r7eJSvDy/r6jkYJ2zhpPvDYXsQ=
|
||||
=dKzY
|
||||
-----END PGP SIGNATURE-----
|
3
firefox-79.0.source.tar.xz
Normal file
3
firefox-79.0.source.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:12a922855914ec6b4d4f06a4ac58bc549aca6bdafd3722d68a3d709a935e5713
|
||||
size 333220776
|
16
firefox-79.0.source.tar.xz.asc
Normal file
16
firefox-79.0.source.tar.xz.asc
Normal file
@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEECXsxMHeuYqAvhNpN8aZmj7t9Vy4FAl8WILAACgkQ8aZmj7t9
|
||||
Vy6pRg/+J6hr1Ky1odA+zPM1IWpPo4jl57vhic9+GjmW+/PFL37IbgzQd+YityrL
|
||||
uY6f/y3iHnqJ/wMAJekiq7MclpWXrno2g15Rjmkd3euwcaph0cTHscWojJWddvCl
|
||||
OmClCvklpfgvpkLqaX1yDTrGS4+d61a60+h8pS4trAeX0atFLGPYIyY6cGHae1m1
|
||||
Xubmgak0lZEKcER0efQyTSXJJ2KFwJ35QkVNE6L76zahBSNK/Nr3sfrABxBNVZnI
|
||||
R/Jhp5dnayeQfyCEDRlMYss8Cxh3YyG2/seKmFi8TVlJhuO0L2ay9TammmFpQp0c
|
||||
iv5MC/FzxBZ9EK4Y0dBNHlLO457NIHpjtXoTu6nP4S7murt+CAPzjI704r9e4GDX
|
||||
l+m3/2hWIwPc5EvTyUsFCdBJEkzeSL97woebcQkPMUNMRvjxxGtTjdsJHAoy/LNr
|
||||
m/2vIev62hBlWKlk3g5CeM4yw4uNJ7AXPe87ZCtAKjppLjTRtRnuQhMeLHt4W2tv
|
||||
J9EHttFsjTij+tx3iGshJKoIF1+MTQlrKrto9BhYPd4IT2lWoxnHFktHx37awhtZ
|
||||
ghLVVbAcXMeonqFf//Rta7eEz1bJYZN1Dcl6xROq9GGTX+QEAYobesI81RjMs8TY
|
||||
lNahX8/4D1kaz5Knp2CYX0iBYfPxic5tFwZ2xqd8pwsbDzPrSNg=
|
||||
=SxfO
|
||||
-----END PGP SIGNATURE-----
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2323c7ecf0b413f31b4c15164f7998e44a75637a5a40cdbfb7be8bc80622d33d
|
||||
size 52194856
|
3
l10n-79.0.tar.xz
Normal file
3
l10n-79.0.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cc9f77a4742b9e2e293f869ed5fd726f27a5b14975d7a77ec25e600fc9a98c9a
|
||||
size 52406032
|
@ -1,76 +0,0 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Mike Hommey <mh+mozilla@glandium.org>
|
||||
# Date 1526871862 -32400
|
||||
# Node ID 94f21505ff13cd089f7129cd24927cf8b31a0f43
|
||||
# Parent 0b7e1398ca2e15e27da93144ba9fb30db38367b1
|
||||
Bug 1463035 - Remove MOZ_SIGNAL_TRAMPOLINE. r?darchons
|
||||
|
||||
For some reason, GNU as is not happy with the assembly generated after
|
||||
bug 1238661 anymore on Debian armel.
|
||||
|
||||
OTOH, as mentioned in bug 1238661 comment 4, we actually don't need this
|
||||
workaround anymore, so let's just kill it.
|
||||
|
||||
diff --git a/mozglue/baseprofiler/core/platform-linux-android.cpp b/mozglue/baseprofiler/core/platform-linux-android.cpp
|
||||
--- a/mozglue/baseprofiler/core/platform-linux-android.cpp
|
||||
+++ b/mozglue/baseprofiler/core/platform-linux-android.cpp
|
||||
@@ -55,17 +55,16 @@
|
||||
#ifdef __GLIBC__
|
||||
# include <execinfo.h> // backtrace, backtrace_symbols
|
||||
#endif // def __GLIBC__
|
||||
#include <strings.h> // index
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "prenv.h"
|
||||
-#include "mozilla/LinuxSignal.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
#include "mozilla/DebugOnly.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <list>
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
@@ -266,17 +265,17 @@ Sampler::Sampler(PSLockRef aLock)
|
||||
|
||||
// NOTE: We don't initialize LUL here, instead initializing it in
|
||||
// SamplerThread's constructor. This is because with the
|
||||
// profiler_suspend_and_sample_thread entry point, we want to be able to
|
||||
// sample without waiting for LUL to be initialized.
|
||||
|
||||
// Request profiling signals.
|
||||
struct sigaction sa;
|
||||
- sa.sa_sigaction = MOZ_SIGNAL_TRAMPOLINE(SigprofHandler);
|
||||
+ sa.sa_sigaction = SigprofHandler;
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sa.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||
if (sigaction(SIGPROF, &sa, &mOldSigprofHandler) != 0) {
|
||||
MOZ_CRASH("Error installing SIGPROF handler in the profiler");
|
||||
}
|
||||
}
|
||||
|
||||
void Sampler::Disable(PSLockRef aLock) {
|
||||
diff --git a/tools/profiler/core/platform-linux-android.cpp b/tools/profiler/core/platform-linux-android.cpp
|
||||
--- a/tools/profiler/core/platform-linux-android.cpp
|
||||
+++ b/tools/profiler/core/platform-linux-android.cpp
|
||||
@@ -258,17 +258,17 @@ Sampler::Sampler(PSLockRef aLock)
|
||||
|
||||
// NOTE: We don't initialize LUL here, instead initializing it in
|
||||
// SamplerThread's constructor. This is because with the
|
||||
// profiler_suspend_and_sample_thread entry point, we want to be able to
|
||||
// sample without waiting for LUL to be initialized.
|
||||
|
||||
// Request profiling signals.
|
||||
struct sigaction sa;
|
||||
- sa.sa_sigaction = MOZ_SIGNAL_TRAMPOLINE(SigprofHandler);
|
||||
+ sa.sa_sigaction = SigprofHandler;
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sa.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||
if (sigaction(SIGPROF, &sa, &mOldSigprofHandler) != 0) {
|
||||
MOZ_CRASH("Error installing SIGPROF handler in the profiler");
|
||||
}
|
||||
}
|
||||
|
||||
void Sampler::Disable(PSLockRef aLock) {
|
@ -3,7 +3,7 @@
|
||||
# Date 1559294891 -7200
|
||||
# Fri May 31 11:28:11 2019 +0200
|
||||
# Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
|
||||
# Parent aa58e8c70d1448a08407c6c191ea8b76d61e8bf6
|
||||
# Parent 43647626f7204e312a4e38cac0414a461b06667f
|
||||
Description: Add KDE integration to Firefox (toolkit parts)
|
||||
Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
|
||||
Author: Lubos Lunak <lunak@suse.com>
|
||||
@ -31,7 +31,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
|
||||
#ifdef MOZ_MEMORY
|
||||
# include "mozmemory.h"
|
||||
#endif
|
||||
@@ -4566,25 +4567,37 @@ nsresult Preferences::InitInitialObjects
|
||||
@@ -4570,25 +4571,37 @@ nsresult Preferences::InitInitialObjects
|
||||
// application pref files for backwards compatibility.
|
||||
static const char* specialFiles[] = {
|
||||
#if defined(XP_MACOSX)
|
||||
@ -69,7 +69,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
|
||||
|
||||
// Load jar:$app/omni.jar!/defaults/preferences/*.js
|
||||
// or jar:$gre/omni.jar!/defaults/preferences/*.js.
|
||||
@@ -4630,17 +4643,17 @@ nsresult Preferences::InitInitialObjects
|
||||
@@ -4634,17 +4647,17 @@ nsresult Preferences::InitInitialObjects
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
|
||||
@ -91,7 +91,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
|
||||
diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
|
||||
--- a/modules/libpref/moz.build
|
||||
+++ b/modules/libpref/moz.build
|
||||
@@ -114,16 +114,20 @@ EXPORTS.mozilla += [
|
||||
@@ -117,16 +117,20 @@ EXPORTS.mozilla += [
|
||||
]
|
||||
EXPORTS.mozilla += sorted(['!' + g for g in gen_h])
|
||||
|
||||
@ -106,12 +106,12 @@ diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
|
||||
+
|
||||
gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs)
|
||||
|
||||
GENERATED_FILES += [gen_all_tuple]
|
||||
|
||||
static_pref_list = GENERATED_FILES[gen_all_tuple]
|
||||
static_pref_list.script = 'init/generate_static_pref_list.py:emit_code'
|
||||
static_pref_list.inputs = ['init/StaticPrefList.yaml']
|
||||
GeneratedFile(*gen_all_tuple, script='init/generate_static_pref_list.py',
|
||||
entry_point='emit_code', inputs=['init/StaticPrefList.yaml'])
|
||||
|
||||
PYTHON_UNITTEST_MANIFESTS += [
|
||||
'test/python.ini',
|
||||
]
|
||||
diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/chrome/flags.py
|
||||
--- a/python/mozbuild/mozpack/chrome/flags.py
|
||||
+++ b/python/mozbuild/mozpack/chrome/flags.py
|
||||
@ -356,7 +356,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
|
||||
diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
|
||||
--- a/toolkit/xre/moz.build
|
||||
+++ b/toolkit/xre/moz.build
|
||||
@@ -88,17 +88,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co
|
||||
@@ -90,17 +90,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co
|
||||
'../components/printingui',
|
||||
]
|
||||
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'uikit':
|
||||
@ -1293,7 +1293,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
|
||||
diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
|
||||
--- a/widget/gtk/moz.build
|
||||
+++ b/widget/gtk/moz.build
|
||||
@@ -131,16 +131,17 @@ include('/ipc/chromium/chromium-config.m
|
||||
@@ -133,16 +133,17 @@ include('/ipc/chromium/chromium-config.m
|
||||
|
||||
FINAL_LIBRARY = 'xul'
|
||||
|
||||
|
@ -1,8 +1,15 @@
|
||||
# HG changeset patch
|
||||
# Parent f530b1587cd1c0a79c34f91a9690c4cc4c33ac31
|
||||
|
||||
diff --git a/config/system-headers.mozbuild b/config/system-headers.mozbuild
|
||||
index 2081d0c683a4..641133bf1ea4 100644
|
||||
--- a/config/system-headers.mozbuild
|
||||
+++ b/config/system-headers.mozbuild
|
||||
@@ -314,6 +314,7 @@ system_headers = [
|
||||
@@ -309,16 +309,17 @@ system_headers = [
|
||||
'gdk/gdkkeysyms.h',
|
||||
'gdk/gdkprivate.h',
|
||||
'gdk/gdkwayland.h',
|
||||
'gdk/gdkx.h',
|
||||
'gdk-pixbuf/gdk-pixbuf.h',
|
||||
'Gestalt.h',
|
||||
'getopt.h',
|
||||
'gio/gio.h',
|
||||
@ -10,7 +17,17 @@ index 2081d0c683a4..641133bf1ea4 100644
|
||||
'glibconfig.h',
|
||||
'glib.h',
|
||||
'glib-object.h',
|
||||
@@ -607,6 +608,7 @@ system_headers = [
|
||||
'glob.h',
|
||||
'gmodule.h',
|
||||
'gnome.h',
|
||||
'gnu/libc-version.h',
|
||||
'gps.h',
|
||||
@@ -602,16 +603,17 @@ system_headers = [
|
||||
'pango/pangoxft.h',
|
||||
'pascal.h',
|
||||
'Patches.h',
|
||||
'Path.h',
|
||||
'pcfs/pc_dir.h',
|
||||
'Pgenerr.h',
|
||||
'PGenErr.h',
|
||||
'Ph.h',
|
||||
@ -18,11 +35,20 @@ index 2081d0c683a4..641133bf1ea4 100644
|
||||
'pixman.h',
|
||||
'pk11func.h',
|
||||
'pk11pqg.h',
|
||||
'pk11priv.h',
|
||||
'pk11pub.h',
|
||||
'pk11sdr.h',
|
||||
'pkcs11f.h',
|
||||
'pkcs11.h',
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn b/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
|
||||
index ba885217b3ba..201d3b755221 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
|
||||
@@ -158,7 +158,7 @@ if (rtc_include_tests) {
|
||||
@@ -153,17 +153,17 @@ if (rtc_include_tests) {
|
||||
"../../test:test_support",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
if (is_linux) {
|
||||
if (rtc_use_pipewire) {
|
||||
pkg_config("pipewire") {
|
||||
@ -31,12 +57,21 @@ index ba885217b3ba..201d3b755221 100644
|
||||
|
||||
defines = [ "WEBRTC_USE_PIPEWIRE" ]
|
||||
}
|
||||
|
||||
pkg_config("gio") {
|
||||
packages = [
|
||||
"gio-2.0",
|
||||
"gio-unix-2.0",
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
|
||||
index 90b40431c7e4..d844aa79d591 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
|
||||
@@ -194,6 +194,30 @@ if CONFIG["OS_TARGET"] == "Linux":
|
||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc"
|
||||
@@ -289,16 +289,40 @@ if CONFIG["OS_TARGET"] == "WINNT":
|
||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc",
|
||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/win/screen_capturer_win_magnifier.cc",
|
||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/win/win_shared.cc",
|
||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/win/window_capture_utils.cc",
|
||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_win.cc",
|
||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/window_finder_win.cc"
|
||||
]
|
||||
|
||||
+# PipeWire specific files
|
||||
@ -66,11 +101,20 @@ index 90b40431c7e4..d844aa79d591 100644
|
||||
if CONFIG["OS_TARGET"] == "NetBSD":
|
||||
|
||||
DEFINES["USE_X11"] = "1"
|
||||
DEFINES["WEBRTC_BSD"] = True
|
||||
DEFINES["WEBRTC_POSIX"] = True
|
||||
DEFINES["_FILE_OFFSET_BITS"] = "64"
|
||||
|
||||
OS_LIBS += [
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
|
||||
index 1eb8ead26efa..316468eed1fc 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
|
||||
@@ -141,7 +141,7 @@ class DesktopCaptureOptions {
|
||||
@@ -136,15 +136,15 @@ class DesktopCaptureOptions {
|
||||
#if defined(USE_X11)
|
||||
bool use_update_notifications_ = false;
|
||||
#else
|
||||
bool use_update_notifications_ = true;
|
||||
#endif
|
||||
bool disable_effects_ = true;
|
||||
bool detect_updated_region_ = false;
|
||||
#if defined(WEBRTC_USE_PIPEWIRE)
|
||||
@ -79,11 +123,18 @@ index 1eb8ead26efa..316468eed1fc 100644
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // MODULES_DESKTOP_CAPTURE_DESKTOP_CAPTURE_OPTIONS_H_
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||
index 379341c833de..76349f1fbd4d 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||
@@ -15,8 +15,11 @@
|
||||
@@ -10,18 +10,21 @@
|
||||
|
||||
#include "modules/desktop_capture/linux/base_capturer_pipewire.h"
|
||||
|
||||
#include <gio/gunixfdlist.h>
|
||||
#include <glib-object.h>
|
||||
|
||||
#include <spa/param/format-utils.h>
|
||||
#include <spa/param/props.h>
|
||||
@ -97,34 +148,36 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
@@ -36,31 +39,36 @@ const char kSessionInterfaceName[] = "org.freedesktop.portal.Session";
|
||||
|
||||
#include "modules/desktop_capture/desktop_capture_options.h"
|
||||
#include "modules/desktop_capture/desktop_capturer.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
@@ -31,181 +34,158 @@ namespace webrtc {
|
||||
const char kDesktopBusName[] = "org.freedesktop.portal.Desktop";
|
||||
const char kDesktopObjectPath[] = "/org/freedesktop/portal/desktop";
|
||||
const char kDesktopRequestObjectPath[] =
|
||||
"/org/freedesktop/portal/desktop/request";
|
||||
const char kSessionInterfaceName[] = "org.freedesktop.portal.Session";
|
||||
const char kRequestInterfaceName[] = "org.freedesktop.portal.Request";
|
||||
const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast";
|
||||
|
||||
-// static
|
||||
+
|
||||
// static
|
||||
-void BaseCapturerPipeWire::OnStateChanged(void* data,
|
||||
- pw_remote_state old_state,
|
||||
- pw_remote_state state,
|
||||
- const char* error_message) {
|
||||
- BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
||||
- RTC_DCHECK(that);
|
||||
|
||||
- switch (state) {
|
||||
- case PW_REMOTE_STATE_ERROR:
|
||||
- RTC_LOG(LS_ERROR) << "PipeWire remote state error: " << error_message;
|
||||
- break;
|
||||
- case PW_REMOTE_STATE_CONNECTED:
|
||||
- RTC_LOG(LS_INFO) << "PipeWire remote state: connected.";
|
||||
- that->CreateReceivingStream();
|
||||
- break;
|
||||
- case PW_REMOTE_STATE_CONNECTING:
|
||||
- RTC_LOG(LS_INFO) << "PipeWire remote state: connecting.";
|
||||
+// static
|
||||
+void BaseCapturerPipeWire::SyncDmaBuf(int fd, uint64_t start_or_end) {
|
||||
+ struct dma_buf_sync sync = { 0 };
|
||||
+
|
||||
+ sync.flags = start_or_end | DMA_BUF_SYNC_READ;
|
||||
+
|
||||
|
||||
- switch (state) {
|
||||
- case PW_REMOTE_STATE_ERROR:
|
||||
- RTC_LOG(LS_ERROR) << "PipeWire remote state error: " << error_message;
|
||||
+ while(true) {
|
||||
+ int ret;
|
||||
+ ret = ioctl (fd, DMA_BUF_IOCTL_SYNC, &sync);
|
||||
@ -133,15 +186,22 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
+ } else if (ret == -1) {
|
||||
+ RTC_LOG(LS_ERROR) << "Failed to synchronize DMA buffer: " << g_strerror(errno);
|
||||
break;
|
||||
- case PW_REMOTE_STATE_UNCONNECTED:
|
||||
- RTC_LOG(LS_INFO) << "PipeWire remote state: unconnected.";
|
||||
- case PW_REMOTE_STATE_CONNECTED:
|
||||
- RTC_LOG(LS_INFO) << "PipeWire remote state: connected.";
|
||||
- that->CreateReceivingStream();
|
||||
+ } else {
|
||||
break;
|
||||
- case PW_REMOTE_STATE_CONNECTING:
|
||||
- RTC_LOG(LS_INFO) << "PipeWire remote state: connecting.";
|
||||
- break;
|
||||
- case PW_REMOTE_STATE_UNCONNECTED:
|
||||
- RTC_LOG(LS_INFO) << "PipeWire remote state: unconnected.";
|
||||
- break;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
+// static
|
||||
// static
|
||||
+void BaseCapturerPipeWire::OnCoreError(void *data,
|
||||
+ uint32_t id,
|
||||
+ int seq,
|
||||
@ -150,23 +210,28 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
+ RTC_LOG(LS_ERROR) << "core error: " << message;
|
||||
+}
|
||||
+
|
||||
// static
|
||||
+// static
|
||||
void BaseCapturerPipeWire::OnStreamStateChanged(void* data,
|
||||
pw_stream_state old_state,
|
||||
@@ -73,76 +81,54 @@ void BaseCapturerPipeWire::OnStreamStateChanged(void* data,
|
||||
pw_stream_state state,
|
||||
const char* error_message) {
|
||||
BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
||||
RTC_DCHECK(that);
|
||||
|
||||
switch (state) {
|
||||
case PW_STREAM_STATE_ERROR:
|
||||
RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message;
|
||||
break;
|
||||
- case PW_STREAM_STATE_CONFIGURE:
|
||||
- pw_stream_set_active(that->pw_stream_, true);
|
||||
- break;
|
||||
- case PW_STREAM_STATE_UNCONNECTED:
|
||||
- case PW_STREAM_STATE_CONNECTING:
|
||||
+ case PW_STREAM_STATE_PAUSED:
|
||||
+ case PW_STREAM_STATE_STREAMING:
|
||||
case PW_STREAM_STATE_UNCONNECTED:
|
||||
case PW_STREAM_STATE_CONNECTING:
|
||||
- case PW_STREAM_STATE_READY:
|
||||
case PW_STREAM_STATE_PAUSED:
|
||||
case PW_STREAM_STATE_STREAMING:
|
||||
+ case PW_STREAM_STATE_UNCONNECTED:
|
||||
+ case PW_STREAM_STATE_CONNECTING:
|
||||
- case PW_STREAM_STATE_PAUSED:
|
||||
- case PW_STREAM_STATE_STREAMING:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -256,20 +321,20 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -150,15 +136,25 @@ void BaseCapturerPipeWire::OnStreamProcess(void* data) {
|
||||
void BaseCapturerPipeWire::OnStreamProcess(void* data) {
|
||||
BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
||||
RTC_DCHECK(that);
|
||||
|
||||
- pw_buffer* buf = nullptr;
|
||||
+ struct pw_buffer *next_buffer;
|
||||
+ struct pw_buffer *buffer = nullptr;
|
||||
+
|
||||
|
||||
- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
|
||||
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
||||
+ while (next_buffer) {
|
||||
+ buffer = next_buffer;
|
||||
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
||||
|
||||
- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
|
||||
+
|
||||
+ if (next_buffer)
|
||||
+ pw_stream_queue_buffer (that->pw_stream_, buffer);
|
||||
+ }
|
||||
@ -286,7 +351,10 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
}
|
||||
|
||||
BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type)
|
||||
@@ -169,38 +165,22 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() {
|
||||
: capture_source_type_(source_type) {}
|
||||
|
||||
BaseCapturerPipeWire::~BaseCapturerPipeWire() {
|
||||
if (pw_main_loop_) {
|
||||
pw_thread_loop_stop(pw_main_loop_);
|
||||
}
|
||||
|
||||
@ -329,16 +397,22 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
if (start_request_signal_id_) {
|
||||
g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_);
|
||||
}
|
||||
@@ -250,27 +230,35 @@ void BaseCapturerPipeWire::InitPortal() {
|
||||
if (sources_request_signal_id_) {
|
||||
g_dbus_connection_signal_unsubscribe(connection_,
|
||||
sources_request_signal_id_);
|
||||
}
|
||||
if (session_request_signal_id_) {
|
||||
@@ -245,142 +225,220 @@ void BaseCapturerPipeWire::InitPortal()
|
||||
kDesktopBusName, kDesktopObjectPath, kScreenCastInterfaceName,
|
||||
/*cancellable=*/nullptr,
|
||||
reinterpret_cast<GAsyncReadyCallback>(OnProxyRequested), this);
|
||||
}
|
||||
|
||||
void BaseCapturerPipeWire::InitPipeWire() {
|
||||
pw_init(/*argc=*/nullptr, /*argc=*/nullptr);
|
||||
|
||||
- pw_loop_ = pw_loop_new(/*properties=*/nullptr);
|
||||
- pw_main_loop_ = pw_thread_loop_new(pw_loop_, "pipewire-main-loop");
|
||||
-
|
||||
- pw_core_ = pw_core_new(pw_loop_, /*properties=*/nullptr);
|
||||
- pw_core_type_ = pw_core_get_type(pw_core_);
|
||||
- pw_remote_ = pw_remote_new(pw_core_, nullptr, /*user_data_size=*/0);
|
||||
+ pw_main_loop_ = pw_thread_loop_new("pipewire-main-loop", nullptr);
|
||||
+ pw_context_ = pw_context_new(pw_thread_loop_get_loop(pw_main_loop_), nullptr, 0);
|
||||
+ if (!pw_context_) {
|
||||
@ -346,6 +420,10 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- pw_core_ = pw_core_new(pw_loop_, /*properties=*/nullptr);
|
||||
- pw_core_type_ = pw_core_get_type(pw_core_);
|
||||
- pw_remote_ = pw_remote_new(pw_core_, nullptr, /*user_data_size=*/0);
|
||||
-
|
||||
- InitPipeWireTypes();
|
||||
+ pw_core_ = pw_context_connect(pw_context_, nullptr, 0);
|
||||
+ if (!pw_core_) {
|
||||
@ -378,7 +456,7 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
|
||||
if (pw_thread_loop_start(pw_main_loop_) < 0) {
|
||||
RTC_LOG(LS_ERROR) << "Failed to start main PipeWire loop";
|
||||
@@ -278,81 +266,132 @@ void BaseCapturerPipeWire::InitPipeWire() {
|
||||
portal_init_failed_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -391,19 +469,20 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
- spa_type_format_video_map(map, &pw_type_->format_video);
|
||||
- spa_type_video_format_map(map, &pw_type_->video_format);
|
||||
-}
|
||||
-
|
||||
-void BaseCapturerPipeWire::CreateReceivingStream() {
|
||||
+pw_stream* BaseCapturerPipeWire::CreateReceivingStream() {
|
||||
spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1};
|
||||
+ spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1};
|
||||
+ spa_rectangle pwMaxScreenBounds = spa_rectangle{INT32_MAX, INT32_MAX};
|
||||
|
||||
-void BaseCapturerPipeWire::CreateReceivingStream() {
|
||||
- spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1};
|
||||
- spa_rectangle pwScreenBounds =
|
||||
- spa_rectangle{static_cast<uint32_t>(desktop_size_.width()),
|
||||
- static_cast<uint32_t>(desktop_size_.height())};
|
||||
+ spa_rectangle pwMaxScreenBounds = spa_rectangle{INT32_MAX, INT32_MAX};
|
||||
+ auto stream = pw_stream_new(pw_core_, "webrtc-pipewire-stream", nullptr);
|
||||
|
||||
- spa_fraction pwFrameRateMin = spa_fraction{0, 1};
|
||||
- spa_fraction pwFrameRateMax = spa_fraction{60, 1};
|
||||
+ auto stream = pw_stream_new(pw_core_, "webrtc-pipewire-stream", nullptr);
|
||||
|
||||
-
|
||||
- pw_properties* reuseProps = pw_properties_new("pipewire.client.reuse", "1",
|
||||
- /*end of varargs*/ nullptr);
|
||||
- pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps);
|
||||
@ -439,12 +518,11 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
- // min and max values and it is undecided (u) to allow negotiation
|
||||
- ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2,
|
||||
- &pwFrameRateMin, &pwFrameRateMax));
|
||||
-
|
||||
- pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
|
||||
- this);
|
||||
+ const spa_pod* params[2];
|
||||
+ spa_pod_builder builder = SPA_POD_BUILDER_INIT(buffer, sizeof (buffer));
|
||||
+
|
||||
|
||||
- pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
|
||||
- this);
|
||||
+ params[0] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
|
||||
+ SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
|
||||
+ SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video),
|
||||
@ -494,13 +572,13 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
+ RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " << std::strerror(errno);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
|
||||
- if (!(src = spaBuffer->datas[0].data)) {
|
||||
+ src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
|
||||
+ } else if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) {
|
||||
+ int fd;
|
||||
+ fd = spaBuffer->datas[0].fd;
|
||||
|
||||
- if (!(src = spaBuffer->datas[0].data)) {
|
||||
+
|
||||
+ map = static_cast<uint8_t*>(mmap(
|
||||
+ nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
|
||||
+ PROT_READ, MAP_PRIVATE, fd, 0));
|
||||
@ -569,14 +647,27 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
if (srcStride != (desktop_size_.width() * kBytesPerPixel)) {
|
||||
RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: "
|
||||
<< srcStride
|
||||
@@ -361,21 +400,40 @@ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
|
||||
<< " != " << (desktop_size_.width() * kBytesPerPixel);
|
||||
portal_init_failed_ = true;
|
||||
return;
|
||||
}
|
||||
|
||||
- if (!current_frame_) {
|
||||
- current_frame_ = static_cast<uint8_t*>(malloc(maxSize));
|
||||
- }
|
||||
- RTC_DCHECK(current_frame_ != nullptr);
|
||||
+ dst = current_frame_.get();
|
||||
+
|
||||
|
||||
- // If both sides decided to go with the RGBx format we need to convert it to
|
||||
- // BGRx to match color format expected by WebRTC.
|
||||
- if (spa_video_format_->format == pw_type_->video_format.RGBx) {
|
||||
- uint8_t* tempFrame = static_cast<uint8_t*>(malloc(maxSize));
|
||||
- std::memcpy(tempFrame, src, maxSize);
|
||||
- ConvertRGBxToBGRx(tempFrame, maxSize);
|
||||
- std::memcpy(current_frame_, tempFrame, maxSize);
|
||||
- free(tempFrame);
|
||||
- } else {
|
||||
- std::memcpy(current_frame_, src, maxSize);
|
||||
+ // Adjust source content based on crop video position
|
||||
+ if (video_crop_size_initialized_ &&
|
||||
+ (video_crop->region.position.y + video_crop_size_.height() <= desktop_size_.height())) {
|
||||
@ -602,19 +693,8 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
+ }
|
||||
+ src += srcStride - xOffset;
|
||||
+ dst += dstStride;
|
||||
}
|
||||
- RTC_DCHECK(current_frame_ != nullptr);
|
||||
|
||||
- // If both sides decided to go with the RGBx format we need to convert it to
|
||||
- // BGRx to match color format expected by WebRTC.
|
||||
- if (spa_video_format_->format == pw_type_->video_format.RGBx) {
|
||||
- uint8_t* tempFrame = static_cast<uint8_t*>(malloc(maxSize));
|
||||
- std::memcpy(tempFrame, src, maxSize);
|
||||
- ConvertRGBxToBGRx(tempFrame, maxSize);
|
||||
- std::memcpy(current_frame_, tempFrame, maxSize);
|
||||
- free(tempFrame);
|
||||
- } else {
|
||||
- std::memcpy(current_frame_, src, maxSize);
|
||||
+ }
|
||||
+
|
||||
+ if (map) {
|
||||
+ if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) {
|
||||
+ SyncDmaBuf(spaBuffer->datas[0].fd, DMA_BUF_SYNC_END);
|
||||
@ -623,7 +703,17 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
}
|
||||
}
|
||||
|
||||
@@ -725,10 +783,7 @@ void BaseCapturerPipeWire::OnStartRequestResponseSignal(
|
||||
void BaseCapturerPipeWire::ConvertRGBxToBGRx(uint8_t* frame, uint32_t size) {
|
||||
// Change color format for KDE KWin which uses RGBx and not BGRx
|
||||
for (uint32_t i = 0; i < size; i += 4) {
|
||||
uint8_t tempR = frame[i];
|
||||
uint8_t tempB = frame[i + 2];
|
||||
@@ -720,20 +778,17 @@ void BaseCapturerPipeWire::OnStartReques
|
||||
guint32 stream_id;
|
||||
gint32 width;
|
||||
gint32 height;
|
||||
GVariant* options;
|
||||
|
||||
g_variant_get(variant, "(u@a{sv})", &stream_id, &options);
|
||||
RTC_DCHECK(options != nullptr);
|
||||
|
||||
@ -635,7 +725,17 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
g_variant_unref(options);
|
||||
g_variant_unref(variant);
|
||||
}
|
||||
@@ -813,10 +868,15 @@ void BaseCapturerPipeWire::CaptureFrame() {
|
||||
}
|
||||
g_variant_iter_free(iter);
|
||||
g_variant_unref(response_data);
|
||||
|
||||
that->OpenPipeWireRemote();
|
||||
@@ -808,20 +863,25 @@ void BaseCapturerPipeWire::CaptureFrame(
|
||||
return;
|
||||
}
|
||||
|
||||
if (!current_frame_) {
|
||||
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -654,7 +754,17 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
if (!result) {
|
||||
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
|
||||
return;
|
||||
@@ -837,4 +897,22 @@ bool BaseCapturerPipeWire::SelectSource(SourceId id) {
|
||||
}
|
||||
callback_->OnCaptureResult(Result::SUCCESS, std::move(result));
|
||||
}
|
||||
|
||||
bool BaseCapturerPipeWire::GetSourceList(SourceList* sources) {
|
||||
@@ -832,9 +892,27 @@ bool BaseCapturerPipeWire::GetSourceList
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BaseCapturerPipeWire::SelectSource(SourceId id) {
|
||||
// Screen selection is handled by the xdg-desktop-portal.
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -678,10 +788,14 @@ index 379341c833de..76349f1fbd4d 100644
|
||||
+
|
||||
} // namespace webrtc
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
|
||||
index 56b101acbaa6..de54157d1a2a 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
|
||||
@@ -22,17 +22,13 @@
|
||||
@@ -17,99 +17,103 @@
|
||||
#include <spa/param/video/format-utils.h>
|
||||
|
||||
#include "modules/desktop_capture/desktop_capture_options.h"
|
||||
#include "modules/desktop_capture/desktop_capturer.h"
|
||||
#include "rtc_base/constructormagic.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
@ -704,7 +818,10 @@ index 56b101acbaa6..de54157d1a2a 100644
|
||||
|
||||
explicit BaseCapturerPipeWire(CaptureSourceType source_type);
|
||||
~BaseCapturerPipeWire() override;
|
||||
@@ -43,28 +39,32 @@ class BaseCapturerPipeWire : public DesktopCapturer {
|
||||
|
||||
// DesktopCapturer interface.
|
||||
void Start(Callback* delegate) override;
|
||||
void CaptureFrame() override;
|
||||
bool GetSourceList(SourceList* sources) override;
|
||||
bool SelectSource(SourceId id) override;
|
||||
|
||||
@ -745,7 +862,13 @@ index 56b101acbaa6..de54157d1a2a 100644
|
||||
|
||||
// <-- end of PipeWire types
|
||||
|
||||
@@ -78,33 +78,37 @@ class BaseCapturerPipeWire : public DesktopCapturer {
|
||||
GDBusConnection* connection_ = nullptr;
|
||||
GDBusProxy* proxy_ = nullptr;
|
||||
gchar* portal_handle_ = nullptr;
|
||||
gchar* session_handle_ = nullptr;
|
||||
gchar* sources_handle_ = nullptr;
|
||||
gchar* start_handle_ = nullptr;
|
||||
guint session_request_signal_id_ = 0;
|
||||
guint sources_request_signal_id_ = 0;
|
||||
guint start_request_signal_id_ = 0;
|
||||
|
||||
@ -792,11 +915,20 @@ index 56b101acbaa6..de54157d1a2a 100644
|
||||
static void OnStreamProcess(void* data);
|
||||
static void OnNewBuffer(void* data, uint32_t id);
|
||||
|
||||
guint SetupRequestResponseSignal(const gchar* object_path,
|
||||
GDBusSignalCallback callback);
|
||||
|
||||
static void OnProxyRequested(GObject* object,
|
||||
GAsyncResult* result,
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
|
||||
index 26956fc67dc8..3813d697bb38 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
|
||||
@@ -15,7 +15,7 @@
|
||||
@@ -10,17 +10,17 @@
|
||||
|
||||
#include "modules/desktop_capture/linux/screen_capturer_pipewire.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
ScreenCapturerPipeWire::ScreenCapturerPipeWire()
|
||||
@ -805,11 +937,20 @@ index 26956fc67dc8..3813d697bb38 100644
|
||||
ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {}
|
||||
|
||||
// static
|
||||
std::unique_ptr<DesktopCapturer>
|
||||
ScreenCapturerPipeWire::CreateRawScreenCapturer(
|
||||
const DesktopCaptureOptions& options) {
|
||||
return std::make_unique<ScreenCapturerPipeWire>();
|
||||
}
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
|
||||
index 35436475cb4d..c43a1f1a0c4e 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
|
||||
@@ -15,7 +15,7 @@
|
||||
@@ -10,17 +10,17 @@
|
||||
|
||||
#include "modules/desktop_capture/linux/window_capturer_pipewire.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
WindowCapturerPipeWire::WindowCapturerPipeWire()
|
||||
@ -818,11 +959,20 @@ index 35436475cb4d..c43a1f1a0c4e 100644
|
||||
WindowCapturerPipeWire::~WindowCapturerPipeWire() {}
|
||||
|
||||
// static
|
||||
std::unique_ptr<DesktopCapturer>
|
||||
WindowCapturerPipeWire::CreateRawWindowCapturer(
|
||||
const DesktopCaptureOptions& options) {
|
||||
return std::make_unique<WindowCapturerPipeWire>();
|
||||
}
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
|
||||
index cf8a9dd0e0db..d27fab8d28d9 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
|
||||
@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer(
|
||||
@@ -21,17 +21,17 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// static
|
||||
std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer(
|
||||
const DesktopCaptureOptions& options) {
|
||||
#if defined(WEBRTC_USE_PIPEWIRE)
|
||||
if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
|
||||
@ -831,11 +981,20 @@ index cf8a9dd0e0db..d27fab8d28d9 100644
|
||||
}
|
||||
#endif // defined(WEBRTC_USE_PIPEWIRE)
|
||||
|
||||
#if defined(USE_X11)
|
||||
return ScreenCapturerX11::CreateRawScreenCapturer(options);
|
||||
#endif // defined(USE_X11)
|
||||
|
||||
return nullptr;
|
||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
|
||||
index 82359e50c2db..bb9724cf7cc2 100644
|
||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
|
||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
|
||||
@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer(
|
||||
@@ -21,17 +21,17 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// static
|
||||
std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer(
|
||||
const DesktopCaptureOptions& options) {
|
||||
#if defined(WEBRTC_USE_PIPEWIRE)
|
||||
if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
|
||||
@ -844,3 +1003,8 @@ index 82359e50c2db..bb9724cf7cc2 100644
|
||||
}
|
||||
#endif // defined(WEBRTC_USE_PIPEWIRE)
|
||||
|
||||
#if defined(USE_X11)
|
||||
return WindowCapturerX11::CreateRawWindowCapturer(options);
|
||||
#endif // defined(USE_X11)
|
||||
|
||||
return nullptr;
|
||||
|
@ -1,11 +1,11 @@
|
||||
PRODUCT="firefox"
|
||||
CHANNEL="release"
|
||||
VERSION="78.0.2"
|
||||
VERSION="79.0"
|
||||
VERSION_SUFFIX=""
|
||||
PREV_VERSION="78.0.1"
|
||||
PREV_VERSION="78.0.2"
|
||||
PREV_VERSION_SUFFIX=""
|
||||
#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
|
||||
|
||||
RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-release"
|
||||
RELEASE_TAG="e56adbbfe01c2443bae35e3d6f34867e36c3828e"
|
||||
RELEASE_TIMESTAMP="20200708170202"
|
||||
RELEASE_TAG="df3ed76cf46b23c9b658cd5be4cdd4162d86f736"
|
||||
RELEASE_TIMESTAMP="20200720193547"
|
||||
|
Loading…
Reference in New Issue
Block a user