summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/moz-patch-stack/0030.patch
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/moz-patch-stack/0030.patch')
-rw-r--r--third_party/libwebrtc/moz-patch-stack/0030.patch1417
1 files changed, 1417 insertions, 0 deletions
diff --git a/third_party/libwebrtc/moz-patch-stack/0030.patch b/third_party/libwebrtc/moz-patch-stack/0030.patch
new file mode 100644
index 0000000000..c5c638459c
--- /dev/null
+++ b/third_party/libwebrtc/moz-patch-stack/0030.patch
@@ -0,0 +1,1417 @@
+From: Dan Minor <dminor@mozilla.com>
+Date: Thu, 5 Nov 2020 07:47:00 +0000
+Subject: Bug 1654112 - Tweak upstream gn files for Firefox build. r=ng
+
+Differential Revision: https://phabricator.services.mozilla.com/D130075
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/127ace4d8887f11abb201d300a849772a2b519f8
+
+Bug 1820869 - avoid building unreachable files. r=ng,webrtc-reviewers
+
+Differential Revision: https://phabricator.services.mozilla.com/D171922
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/88b3cc6bbece7c53d00e124713330f3d34d2789d
+
+Bug 1822194 - (fix-acabb3641b) Break the new SetParametersCallback stuff into stand-alone files.
+
+acabb3641b from upstream added a callback mechanism to allow failures to be
+propagated back to RTCRtpSender.setParameters. Unfortunately, this callback
+mechanism was (needlessly) tightly coupled to libwebrtc's implementation of
+RTCRtpSender, and also their media channel code. This introduced a lot of
+unnecessary dependencies throughout libwebrtc, that spilled into our code as
+well.
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/59232687efa00e5f7b7bd3d6befca129149e2bf5
+
+Bug 1828517 - (fix-794d599741) account for moved files in BUILD.gn that we don't want to build.
+
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/4a969f6709183d4f55215adaffb8a52b790a8492
+
+Bug 1839451 - (fix-186ebdc1b0) remove BUILD.gn refs to gone files delayable.h, media_channel.h
+
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/d0f4d1733cb1a2d8189097af4b5537118ebc95a6
+
+Bug 1839451 - (fix-f6eae959bf) s/rtc_encoder_simulcast_proxy/rtc_simulcast_encoder_adapter/ BUILD ref.
+
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/876b3f5821cd5c30564a82c1da7d057d79d17b01
+
+Bug 1828517 - (fix-a138c6c8a5) handle file moves in BUILD.gn
+
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/cf7e333da17689b3c115a6ffd07fab042bc5f086
+
+Bug 1817024 - (fix-0e2cf6cc01) Skip library create_peer_connection_quality_test_frame_generator. r?mjf!
+
+Differential Revision: https://phabricator.services.mozilla.com/D170887
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/fbbc1bf963fda30bca26ae6aac0c3459b8ebea6f
+
+Bug 1826428 - remove libwebrtc's jvm_android.cc from build r=ng,webrtc-reviewers
+
+Based on info from John Lin and previous try runs, we're almost
+certainly not using this. Let's try removing it from the build
+and landing it. If no problems emerge, we'll be able to remove
+our custom changes to upstream code in jvm_android.cc.
+
+Differential Revision: https://phabricator.services.mozilla.com/D174793
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/dca1b97525487ae57d43ced1ebdb4a2d9c9dae89
+
+Bug 1774628 - re-enable support for Windows.Graphics.Capture APIs in libwebrtc. r=pehrsons,webrtc-reviewers
+
+Differential Revision: https://phabricator.services.mozilla.com/D186862
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/08567f4539a12b54202aecbf554ec6540fb99ab2
+---
+ .gn | 2 +
+ BUILD.gn | 45 ++++++++++++++++++-
+ api/BUILD.gn | 34 +++++++++++++-
+ api/rtp_sender_interface.h | 4 +-
+ api/rtp_sender_setparameters_callback.cc | 27 +++++++++++
+ api/rtp_sender_setparameters_callback.h | 28 ++++++++++++
+ api/task_queue/BUILD.gn | 2 +
+ api/transport/BUILD.gn | 2 +
+ call/BUILD.gn | 14 +++++-
+ call/audio_send_stream.h | 2 +-
+ call/video_send_stream.h | 2 +-
+ common_audio/BUILD.gn | 4 --
+ common_audio/fir_filter_avx2.cc | 2 +
+ common_audio/intrin.h | 8 ++++
+ media/BUILD.gn | 35 ++++++++++++++-
+ media/base/media_channel.h | 4 --
+ media/base/media_channel_impl.cc | 13 ------
+ modules/audio_coding/BUILD.gn | 2 +-
+ modules/audio_device/BUILD.gn | 17 +++++--
+ modules/audio_processing/aec3/BUILD.gn | 13 +++---
+ .../aec3/adaptive_fir_filter_avx2.cc | 2 +-
+ .../audio_processing/agc2/rnn_vad/BUILD.gn | 2 +-
+ modules/desktop_capture/BUILD.gn | 29 +-----------
+ modules/portal/BUILD.gn | 24 ++++++++++
+ modules/utility/BUILD.gn | 4 ++
+ modules/video_capture/BUILD.gn | 11 +----
+ rtc_base/BUILD.gn | 30 ++++++++++++-
+ rtc_base/system/BUILD.gn | 2 +-
+ test/BUILD.gn | 10 +++++
+ video/BUILD.gn | 4 +-
+ webrtc.gni | 32 ++++++++-----
+ 31 files changed, 311 insertions(+), 99 deletions(-)
+ create mode 100644 api/rtp_sender_setparameters_callback.cc
+ create mode 100644 api/rtp_sender_setparameters_callback.h
+ create mode 100644 common_audio/intrin.h
+
+diff --git a/.gn b/.gn
+index b9948d2fcd..77cfa94d8a 100644
+--- a/.gn
++++ b/.gn
+@@ -69,6 +69,8 @@ default_args = {
+ # Prevent jsoncpp to pass -Wno-deprecated-declarations to users
+ jsoncpp_no_deprecated_declarations = false
+
++ use_custom_libcxx = false
++
+ # Fixes the abi-revision issue.
+ # TODO(https://bugs.webrtc.org/14437): Remove this section if general
+ # Chromium fix resolves the problem.
+diff --git a/BUILD.gn b/BUILD.gn
+index 7e8325e306..f61f8965b9 100644
+--- a/BUILD.gn
++++ b/BUILD.gn
+@@ -33,7 +33,7 @@ if (is_android) {
+ import("//third_party/jni_zero/jni_zero.gni")
+ }
+
+-if (!build_with_chromium) {
++if (!build_with_chromium && !build_with_mozilla) {
+ # This target should (transitively) cause everything to be built; if you run
+ # 'ninja default' and then 'ninja all', the second build should do no work.
+ group("default") {
+@@ -158,6 +158,10 @@ config("common_inherited_config") {
+ defines += [ "WEBRTC_ENABLE_OBJC_SYMBOL_EXPORT" ]
+ }
+
++ if (build_with_mozilla) {
++ defines += [ "WEBRTC_MOZILLA_BUILD" ]
++ }
++
+ if (!rtc_builtin_ssl_root_certificates) {
+ defines += [ "WEBRTC_EXCLUDE_BUILT_IN_SSL_ROOT_CERTS" ]
+ }
+@@ -480,9 +484,11 @@ config("common_config") {
+ }
+ }
+
++if (is_mac) {
+ config("common_objc") {
+ frameworks = [ "Foundation.framework" ]
+ }
++}
+
+ if (!build_with_chromium) {
+ # Target to build all the WebRTC production code.
+@@ -532,6 +538,33 @@ if (!build_with_chromium) {
+ "sdk",
+ "video",
+ ]
++ if (build_with_mozilla) {
++ deps -= [
++ "api:create_peerconnection_factory",
++ "api:rtc_error",
++ "api:transport_api",
++ "api/crypto",
++ "api/rtc_event_log:rtc_event_log_factory",
++ "api/task_queue",
++ "api/task_queue:default_task_queue_factory",
++ "api/test/metrics",
++ "api/video_codecs:video_decoder_factory_template",
++ "api/video_codecs:video_decoder_factory_template_dav1d_adapter",
++ "api/video_codecs:video_decoder_factory_template_libvpx_vp8_adapter",
++ "api/video_codecs:video_decoder_factory_template_libvpx_vp9_adapter",
++ "api/video_codecs:video_decoder_factory_template_open_h264_adapter",
++ "api/video_codecs:video_encoder_factory_template",
++ "api/video_codecs:video_encoder_factory_template_libaom_av1_adapter",
++ "api/video_codecs:video_encoder_factory_template_libvpx_vp8_adapter",
++ "api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter",
++ "api/video_codecs:video_encoder_factory_template_open_h264_adapter",
++ "logging:rtc_event_log_api",
++ "p2p:rtc_p2p",
++ "pc:libjingle_peerconnection",
++ "pc:rtc_pc",
++ "sdk",
++ ]
++ }
+
+ if (rtc_include_builtin_audio_codecs) {
+ deps += [
+@@ -544,6 +577,16 @@ if (!build_with_chromium) {
+ deps += [
+ "api/video:video_frame",
+ "api/video:video_rtp_headers",
++ "test:rtp_test_utils",
++ ]
++ # Added when we removed deps in other places to avoid building
++ # unreachable sources. See Bug 1820869.
++ deps += [
++ "api/video_codecs:video_codecs_api",
++ "api/video_codecs:rtc_software_fallback_wrappers",
++ "media:rtc_simulcast_encoder_adapter",
++ "modules/video_coding:webrtc_vp8",
++ "modules/video_coding:webrtc_vp9",
+ ]
+ } else {
+ deps += [
+diff --git a/api/BUILD.gn b/api/BUILD.gn
+index 46703f93ce..d2b7f06c87 100644
+--- a/api/BUILD.gn
++++ b/api/BUILD.gn
+@@ -35,7 +35,7 @@ rtc_source_set("callfactory_api") {
+ ]
+ }
+
+-if (!build_with_chromium) {
++if (!build_with_chromium && !build_with_mozilla) {
+ rtc_library("create_peerconnection_factory") {
+ visibility = [ "*" ]
+ allow_poison = [ "default_task_queue" ]
+@@ -189,6 +189,10 @@ rtc_source_set("ice_transport_interface") {
+ }
+
+ rtc_library("dtls_transport_interface") {
++# Previously, Mozilla has tried to limit including this dep, but as
++# upstream changes, it requires whack-a-mole. Making it an empty
++# definition has the same effect, but only requires one change.
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+
+ sources = [
+@@ -205,6 +209,7 @@ rtc_library("dtls_transport_interface") {
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+ }
++}
+
+ rtc_library("dtmf_sender_interface") {
+ visibility = [ "*" ]
+@@ -217,6 +222,10 @@ rtc_library("dtmf_sender_interface") {
+ }
+
+ rtc_library("rtp_sender_interface") {
++# Previously, Mozilla has tried to limit including this dep, but as
++# upstream changes, it requires whack-a-mole. Making it an empty
++# definition has the same effect, but only requires one change.
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+
+ sources = [
+@@ -228,8 +237,8 @@ rtc_library("rtp_sender_interface") {
+ ":dtmf_sender_interface",
+ ":frame_transformer_interface",
+ ":media_stream_interface",
+- ":rtc_error",
+ ":rtp_parameters",
++ ":rtp_sender_setparameters_callback",
+ ":scoped_refptr",
+ "../rtc_base:checks",
+ "../rtc_base:refcount",
+@@ -237,10 +246,24 @@ rtc_library("rtp_sender_interface") {
+ "crypto:frame_encryptor_interface",
+ "video_codecs:video_codecs_api",
+ ]
++}
++}
++
++rtc_library("rtp_sender_setparameters_callback") {
++ visibility = [ "*" ]
++
++ sources = [
++ "rtp_sender_setparameters_callback.cc",
++ "rtp_sender_setparameters_callback.h",
++ ]
++ deps = [
++ ":rtc_error",
++ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/functional:any_invocable" ]
+ }
+
+ rtc_library("libjingle_peerconnection_api") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ cflags = []
+ sources = [
+@@ -357,6 +380,7 @@ rtc_library("libjingle_peerconnection_api") {
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
+ }
++}
+
+ rtc_source_set("frame_transformer_interface") {
+ visibility = [ "*" ]
+@@ -548,6 +572,7 @@ rtc_source_set("peer_network_dependencies") {
+ }
+
+ rtc_source_set("peer_connection_quality_test_fixture_api") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ testonly = true
+ sources = [ "test/peerconnection_quality_test_fixture.h" ]
+@@ -598,6 +623,7 @@ rtc_source_set("peer_connection_quality_test_fixture_api") {
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
+ }
++}
+
+ rtc_source_set("frame_generator_api") {
+ visibility = [ "*" ]
+@@ -716,6 +742,7 @@ rtc_library("create_frame_generator") {
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+ }
+
++if (!build_with_mozilla) {
+ rtc_library("create_peer_connection_quality_test_frame_generator") {
+ visibility = [ "*" ]
+ testonly = true
+@@ -732,6 +759,7 @@ rtc_library("create_peer_connection_quality_test_frame_generator") {
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+ }
++}
+
+ rtc_source_set("libjingle_logging_api") {
+ visibility = [ "*" ]
+@@ -904,6 +932,7 @@ rtc_source_set("refcountedbase") {
+ ]
+ }
+
++if (!build_with_mozilla) {
+ rtc_library("ice_transport_factory") {
+ visibility = [ "*" ]
+ sources = [
+@@ -922,6 +951,7 @@ rtc_library("ice_transport_factory") {
+ "rtc_event_log:rtc_event_log",
+ ]
+ }
++}
+
+ rtc_library("neteq_simulator_api") {
+ visibility = [ "*" ]
+diff --git a/api/rtp_sender_interface.h b/api/rtp_sender_interface.h
+index 41d35bc287..619b601f1f 100644
+--- a/api/rtp_sender_interface.h
++++ b/api/rtp_sender_interface.h
+@@ -32,9 +32,9 @@
+ #include "rtc_base/ref_count.h"
+ #include "rtc_base/system/rtc_export.h"
+
+-namespace webrtc {
++#include "api/rtp_sender_setparameters_callback.h"
+
+-using SetParametersCallback = absl::AnyInvocable<void(RTCError) &&>;
++namespace webrtc {
+
+ class RTC_EXPORT RtpSenderInterface : public rtc::RefCountInterface {
+ public:
+diff --git a/api/rtp_sender_setparameters_callback.cc b/api/rtp_sender_setparameters_callback.cc
+new file mode 100644
+index 0000000000..99728ef95e
+--- /dev/null
++++ b/api/rtp_sender_setparameters_callback.cc
+@@ -0,0 +1,27 @@
++/*
++ * Copyright 2015 The WebRTC project authors. All Rights Reserved.
++ *
++ * Use of this source code is governed by a BSD-style license
++ * that can be found in the LICENSE file in the root of the source
++ * tree. An additional intellectual property rights grant can be found
++ * in the file PATENTS. All contributing project authors may
++ * be found in the AUTHORS file in the root of the source tree.
++ */
++
++// File added by mozilla, to decouple this from libwebrtc's implementation of
++// RTCRtpSender.
++
++#include "api/rtp_sender_setparameters_callback.h"
++
++namespace webrtc {
++
++webrtc::RTCError InvokeSetParametersCallback(SetParametersCallback& callback,
++ RTCError error) {
++ if (callback) {
++ std::move(callback)(error);
++ callback = nullptr;
++ }
++ return error;
++}
++
++} // namespace webrtc
+diff --git a/api/rtp_sender_setparameters_callback.h b/api/rtp_sender_setparameters_callback.h
+new file mode 100644
+index 0000000000..45194f5ace
+--- /dev/null
++++ b/api/rtp_sender_setparameters_callback.h
+@@ -0,0 +1,28 @@
++/*
++ * Copyright 2015 The WebRTC project authors. All Rights Reserved.
++ *
++ * Use of this source code is governed by a BSD-style license
++ * that can be found in the LICENSE file in the root of the source
++ * tree. An additional intellectual property rights grant can be found
++ * in the file PATENTS. All contributing project authors may
++ * be found in the AUTHORS file in the root of the source tree.
++ */
++
++// File added by mozilla, to decouple this from libwebrtc's implementation of
++// RTCRtpSender.
++
++#ifndef API_RTP_SENDER_SETPARAMETERS_CALLBACK_H_
++#define API_RTP_SENDER_SETPARAMETERS_CALLBACK_H_
++
++#include "api/rtc_error.h"
++#include "absl/functional/any_invocable.h"
++
++namespace webrtc {
++
++using SetParametersCallback = absl::AnyInvocable<void(RTCError) &&>;
++
++webrtc::RTCError InvokeSetParametersCallback(SetParametersCallback& callback,
++ RTCError error);
++} // namespace webrtc
++
++#endif // API_RTP_SENDER_SETPARAMETERS_CALLBACK_H_
+diff --git a/api/task_queue/BUILD.gn b/api/task_queue/BUILD.gn
+index e0e2e50514..8d845e2735 100644
+--- a/api/task_queue/BUILD.gn
++++ b/api/task_queue/BUILD.gn
+@@ -31,6 +31,7 @@ rtc_library("task_queue") {
+ ]
+ }
+
++if (rtc_include_tests) {
+ rtc_library("task_queue_test") {
+ visibility = [ "*" ]
+ testonly = true
+@@ -79,6 +80,7 @@ rtc_library("task_queue_test") {
+ ]
+ }
+ }
++}
+
+ rtc_library("default_task_queue_factory") {
+ visibility = [ "*" ]
+diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn
+index 84a0968ee9..c0209bf0d0 100644
+--- a/api/transport/BUILD.gn
++++ b/api/transport/BUILD.gn
+@@ -91,6 +91,7 @@ rtc_source_set("sctp_transport_factory_interface") {
+ }
+
+ rtc_source_set("stun_types") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "stun.cc",
+@@ -111,6 +112,7 @@ rtc_source_set("stun_types") {
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+ }
++}
+
+ if (rtc_include_tests) {
+ rtc_source_set("test_feedback_generator_interface") {
+diff --git a/call/BUILD.gn b/call/BUILD.gn
+index 58473dc1ea..825097e8d4 100644
+--- a/call/BUILD.gn
++++ b/call/BUILD.gn
+@@ -46,7 +46,7 @@ rtc_library("call_interfaces") {
+ "../api:rtc_error",
+ "../api:rtp_headers",
+ "../api:rtp_parameters",
+- "../api:rtp_sender_interface",
++ "../api:rtp_sender_setparameters_callback",
+ "../api:scoped_refptr",
+ "../api:transport_api",
+ "../api/adaptation:resource_adaptation_api",
+@@ -346,6 +346,16 @@ rtc_library("call") {
+ "//third_party/abseil-cpp/absl/strings",
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
++ if (build_with_mozilla) { # See Bug 1820869.
++ sources -= [
++ "call_factory.cc",
++ "degraded_call.cc",
++ ]
++ deps -= [
++ ":fake_network",
++ ":simulated_network",
++ ]
++ }
+ }
+
+ rtc_source_set("receive_stream_interface") {
+@@ -373,7 +383,7 @@ rtc_library("video_stream_api") {
+ "../api:frame_transformer_interface",
+ "../api:rtp_headers",
+ "../api:rtp_parameters",
+- "../api:rtp_sender_interface",
++ "../api:rtp_sender_setparameters_callback",
+ "../api:scoped_refptr",
+ "../api:transport_api",
+ "../api/adaptation:resource_adaptation_api",
+diff --git a/call/audio_send_stream.h b/call/audio_send_stream.h
+index 9c2fad652f..f9e49db574 100644
+--- a/call/audio_send_stream.h
++++ b/call/audio_send_stream.h
+@@ -25,7 +25,7 @@
+ #include "api/crypto/frame_encryptor_interface.h"
+ #include "api/frame_transformer_interface.h"
+ #include "api/rtp_parameters.h"
+-#include "api/rtp_sender_interface.h"
++#include "api/rtp_sender_setparameters_callback.h"
+ #include "api/scoped_refptr.h"
+ #include "call/audio_sender.h"
+ #include "call/rtp_config.h"
+diff --git a/call/video_send_stream.h b/call/video_send_stream.h
+index 5fde44a719..1a0261be1b 100644
+--- a/call/video_send_stream.h
++++ b/call/video_send_stream.h
+@@ -23,7 +23,7 @@
+ #include "api/crypto/crypto_options.h"
+ #include "api/frame_transformer_interface.h"
+ #include "api/rtp_parameters.h"
+-#include "api/rtp_sender_interface.h"
++#include "api/rtp_sender_setparameters_callback.h"
+ #include "api/scoped_refptr.h"
+ #include "api/video/video_content_type.h"
+ #include "api/video/video_frame.h"
+diff --git a/common_audio/BUILD.gn b/common_audio/BUILD.gn
+index 2ae6d32710..a45214f754 100644
+--- a/common_audio/BUILD.gn
++++ b/common_audio/BUILD.gn
+@@ -267,14 +267,10 @@ if (current_cpu == "x86" || current_cpu == "x64") {
+ "resampler/sinc_resampler_avx2.cc",
+ ]
+
+- if (is_win) {
+- cflags = [ "/arch:AVX2" ]
+- } else {
+ cflags = [
+ "-mavx2",
+ "-mfma",
+ ]
+- }
+
+ deps = [
+ ":fir_filter",
+diff --git a/common_audio/fir_filter_avx2.cc b/common_audio/fir_filter_avx2.cc
+index 9cb0f770ca..0031392f8a 100644
+--- a/common_audio/fir_filter_avx2.cc
++++ b/common_audio/fir_filter_avx2.cc
+@@ -15,6 +15,8 @@
+ #include <string.h>
+ #include <xmmintrin.h>
+
++#include "common_audio/intrin.h"
++
+ #include "rtc_base/checks.h"
+ #include "rtc_base/memory/aligned_malloc.h"
+
+diff --git a/common_audio/intrin.h b/common_audio/intrin.h
+new file mode 100644
+index 0000000000..f6ff7f218f
+--- /dev/null
++++ b/common_audio/intrin.h
+@@ -0,0 +1,8 @@
++#if defined (__SSE__)
++ #include <immintrin.h>
++ #if defined (__clang__)
++ #include <avxintrin.h>
++ #include <avx2intrin.h>
++ #include <fmaintrin.h>
++ #endif
++#endif
+diff --git a/media/BUILD.gn b/media/BUILD.gn
+index cf7c523201..97ad4a889a 100644
+--- a/media/BUILD.gn
++++ b/media/BUILD.gn
+@@ -64,7 +64,7 @@ rtc_library("rtc_media_base") {
+ "../api:media_stream_interface",
+ "../api:rtc_error",
+ "../api:rtp_parameters",
+- "../api:rtp_sender_interface",
++ "../api:rtp_sender_setparameters_callback",
+ "../api:scoped_refptr",
+ "../api:sequence_checker",
+ "../api:transport_api",
+@@ -139,9 +139,19 @@ rtc_library("rtc_media_base") {
+ "base/video_source_base.cc",
+ "base/video_source_base.h",
+ ]
++ if (build_with_mozilla) {
++ sources -= [
++ "base/adapted_video_track_source.cc",
++ "base/adapted_video_track_source.h",
++ "base/audio_source.h",
++ "base/media_engine.cc",
++ "base/media_engine.h",
++ ]
++ }
+ }
+
+ rtc_library("media_channel_impl") {
++if (!build_with_mozilla) {
+ sources = [
+ "base/media_channel_impl.cc",
+ "base/media_channel_impl.h",
+@@ -191,6 +201,7 @@ rtc_library("media_channel_impl") {
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
+ }
++}
+
+ rtc_source_set("media_channel") {
+ sources = [ "base/media_channel.h" ]
+@@ -269,6 +280,7 @@ rtc_library("codec") {
+ }
+
+ rtc_library("rtp_utils") {
++if (!build_with_mozilla) {
+ sources = [
+ "base/rtp_utils.cc",
+ "base/rtp_utils.h",
+@@ -285,8 +297,10 @@ rtc_library("rtp_utils") {
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+ }
++}
+
+ rtc_library("stream_params") {
++if (!build_with_mozilla) {
+ sources = [
+ "base/stream_params.cc",
+ "base/stream_params.h",
+@@ -299,6 +313,7 @@ rtc_library("stream_params") {
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container" ]
+ }
++}
+
+ rtc_library("media_constants") {
+ sources = [
+@@ -309,6 +324,7 @@ rtc_library("media_constants") {
+ }
+
+ rtc_library("turn_utils") {
++if (!build_with_mozilla) {
+ sources = [
+ "base/turn_utils.cc",
+ "base/turn_utils.h",
+@@ -319,14 +335,17 @@ rtc_library("turn_utils") {
+ "../rtc_base/system:rtc_export",
+ ]
+ }
++}
+
+ rtc_library("rid_description") {
++if (!build_with_mozilla) {
+ sources = [
+ "base/rid_description.cc",
+ "base/rid_description.h",
+ ]
+ deps = []
+ }
++}
+
+ rtc_library("rtc_simulcast_encoder_adapter") {
+ visibility = [ "*" ]
+@@ -400,6 +419,12 @@ rtc_library("rtc_internal_video_codecs") {
+ "../system_wrappers:field_trial",
+ "../test:fake_video_codecs",
+ ]
++ if (build_with_mozilla) {
++ deps -= [
++ "../modules/video_coding:webrtc_multiplex", # See Bug 1820869.
++ "../test:fake_video_codecs",
++ ]
++ }
+
+ if (enable_libaom) {
+ defines += [ "RTC_USE_LIBAOM_AV1_ENCODER" ]
+@@ -425,6 +450,14 @@ rtc_library("rtc_internal_video_codecs") {
+ "engine/multiplex_codec_factory.cc",
+ "engine/multiplex_codec_factory.h",
+ ]
++ if (build_with_mozilla) {
++ sources -= [
++ "engine/fake_video_codec_factory.cc",
++ "engine/fake_video_codec_factory.h",
++ "engine/internal_encoder_factory.cc", # See Bug 1820869.
++ "engine/multiplex_codec_factory.cc", # See Bug 1820869.
++ ]
++ }
+ }
+
+ rtc_library("rtc_audio_video") {
+diff --git a/media/base/media_channel.h b/media/base/media_channel.h
+index f941823323..1fe86f9588 100644
+--- a/media/base/media_channel.h
++++ b/media/base/media_channel.h
+@@ -65,10 +65,6 @@ class Timing;
+
+ namespace webrtc {
+ class VideoFrame;
+-
+-webrtc::RTCError InvokeSetParametersCallback(SetParametersCallback& callback,
+- RTCError error);
+-
+ } // namespace webrtc
+
+ namespace cricket {
+diff --git a/media/base/media_channel_impl.cc b/media/base/media_channel_impl.cc
+index e7e84c781c..5b41a9ccda 100644
+--- a/media/base/media_channel_impl.cc
++++ b/media/base/media_channel_impl.cc
+@@ -31,19 +31,6 @@
+ #include "modules/rtp_rtcp/include/report_block_data.h"
+ #include "rtc_base/checks.h"
+
+-namespace webrtc {
+-
+-webrtc::RTCError InvokeSetParametersCallback(SetParametersCallback& callback,
+- RTCError error) {
+- if (callback) {
+- std::move(callback)(error);
+- callback = nullptr;
+- }
+- return error;
+-}
+-
+-} // namespace webrtc
+-
+ namespace cricket {
+ using webrtc::FrameDecryptorInterface;
+ using webrtc::FrameEncryptorInterface;
+diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn
+index 61fecea691..3e4d7e0c25 100644
+--- a/modules/audio_coding/BUILD.gn
++++ b/modules/audio_coding/BUILD.gn
+@@ -553,7 +553,7 @@ rtc_library("webrtc_opus_wrapper") {
+ deps += [ rtc_opus_dir ]
+ public_configs = [ "//third_party/opus:opus_config" ]
+ } else if (build_with_mozilla) {
+- include_dirs = [ getenv("DIST") + "/include/opus" ]
++ public_configs = [ "//third_party/opus:opus_config" ]
+ }
+ }
+
+diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn
+index f1ab09d154..4726f93279 100644
+--- a/modules/audio_device/BUILD.gn
++++ b/modules/audio_device/BUILD.gn
+@@ -30,6 +30,7 @@ rtc_source_set("audio_device_default") {
+ }
+
+ rtc_source_set("audio_device") {
++if (!build_with_mozilla) { # See Bug 1820869.
+ visibility = [ "*" ]
+ public_deps += [ # no-presubmit-check TODO(webrtc:8603)
+ ":audio_device_api",
+@@ -40,6 +41,7 @@ rtc_source_set("audio_device") {
+ ":audio_device_impl",
+ ]
+ }
++}
+
+ rtc_source_set("audio_device_api") {
+ visibility = [ "*" ]
+@@ -62,6 +64,7 @@ rtc_library("audio_device_config") {
+ }
+
+ rtc_library("audio_device_buffer") {
++if (!build_with_mozilla) { # See Bug 1820869.
+ sources = [
+ "audio_device_buffer.cc",
+ "audio_device_buffer.h",
+@@ -88,6 +91,7 @@ rtc_library("audio_device_buffer") {
+ "../../system_wrappers:metrics",
+ ]
+ }
++}
+
+ rtc_library("audio_device_generic") {
+ sources = [
+@@ -265,6 +269,7 @@ if (!build_with_chromium) {
+ # Contains default implementations of webrtc::AudioDeviceModule for Windows,
+ # Linux, Mac, iOS and Android.
+ rtc_library("audio_device_impl") {
++if (!build_with_mozilla) { # See Bug 1820869.
+ visibility = [ "*" ]
+ deps = [
+ ":audio_device_api",
+@@ -314,9 +319,9 @@ rtc_library("audio_device_impl") {
+ sources = [ "include/fake_audio_device.h" ]
+
+ if (build_with_mozilla) {
+- sources += [
+- "opensl/single_rw_fifo.cc",
+- "opensl/single_rw_fifo.h",
++ sources -= [
++ "include/test_audio_device.cc",
++ "include/test_audio_device.h",
+ ]
+ }
+
+@@ -421,6 +426,7 @@ rtc_library("audio_device_impl") {
+ sources += [ "dummy/file_audio_device_factory.h" ]
+ }
+ }
++}
+
+ if (is_mac) {
+ rtc_source_set("audio_device_impl_frameworks") {
+@@ -438,6 +444,7 @@ if (is_mac) {
+ }
+ }
+
++if (!build_with_mozilla) { # See Bug 1820869.
+ rtc_source_set("mock_audio_device") {
+ visibility = [ "*" ]
+ testonly = true
+@@ -454,8 +461,10 @@ rtc_source_set("mock_audio_device") {
+ "../../test:test_support",
+ ]
+ }
++}
+
+-if (rtc_include_tests && !build_with_chromium) {
++# See Bug 1820869 for !build_with_mozilla.
++if (rtc_include_tests && !build_with_chromium && !build_with_mozilla) {
+ rtc_library("audio_device_unittests") {
+ testonly = true
+
+diff --git a/modules/audio_processing/aec3/BUILD.gn b/modules/audio_processing/aec3/BUILD.gn
+index f5eb5d5951..3e11a245a1 100644
+--- a/modules/audio_processing/aec3/BUILD.gn
++++ b/modules/audio_processing/aec3/BUILD.gn
+@@ -264,14 +264,11 @@ if (current_cpu == "x86" || current_cpu == "x64") {
+ "vector_math_avx2.cc",
+ ]
+
+- if (is_win) {
+- cflags = [ "/arch:AVX2" ]
+- } else {
+- cflags = [
+- "-mavx2",
+- "-mfma",
+- ]
+- }
++ cflags = [
++ "-mavx",
++ "-mavx2",
++ "-mfma",
++ ]
+
+ deps = [
+ ":adaptive_fir_filter",
+diff --git a/modules/audio_processing/aec3/adaptive_fir_filter_avx2.cc b/modules/audio_processing/aec3/adaptive_fir_filter_avx2.cc
+index b6eda9f117..8d6e1cf3d7 100644
+--- a/modules/audio_processing/aec3/adaptive_fir_filter_avx2.cc
++++ b/modules/audio_processing/aec3/adaptive_fir_filter_avx2.cc
+@@ -8,7 +8,7 @@
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+-#include <immintrin.h>
++#include "common_audio/intrin.h"
+
+ #include "modules/audio_processing/aec3/adaptive_fir_filter.h"
+ #include "rtc_base/checks.h"
+diff --git a/modules/audio_processing/agc2/rnn_vad/BUILD.gn b/modules/audio_processing/agc2/rnn_vad/BUILD.gn
+index 9093a68cf3..3003a585bd 100644
+--- a/modules/audio_processing/agc2/rnn_vad/BUILD.gn
++++ b/modules/audio_processing/agc2/rnn_vad/BUILD.gn
+@@ -122,7 +122,7 @@ rtc_source_set("vector_math") {
+ if (current_cpu == "x86" || current_cpu == "x64") {
+ rtc_library("vector_math_avx2") {
+ sources = [ "vector_math_avx2.cc" ]
+- if (is_win) {
++ if (is_win && !build_with_mozilla) {
+ cflags = [ "/arch:AVX2" ]
+ } else {
+ cflags = [
+diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn
+index fcf1836930..344c8a1531 100644
+--- a/modules/desktop_capture/BUILD.gn
++++ b/modules/desktop_capture/BUILD.gn
+@@ -343,37 +343,12 @@ rtc_library("desktop_capture") {
+ ]
+ deps += [ ":desktop_capture_objc" ]
+ }
+-
+- if (build_with_mozilla) {
+- sources += [
+- "desktop_device_info.cc",
+- "desktop_device_info.h",
+- ]
+- if (is_win) {
+- sources += [
+- "app_capturer_win.cc",
+- "win/desktop_device_info_win.cc",
+- "win/win_shared.cc",
+- ]
+- }
+- }
+ if (rtc_use_x11_extensions || rtc_use_pipewire) {
+ sources += [
+ "mouse_cursor_monitor_linux.cc",
+ "screen_capturer_linux.cc",
+ "window_capturer_linux.cc",
+ ]
+-
+- if (build_with_mozilla && (is_linux || is_chromeos)) {
+- sources += [
+- "app_capturer_linux.cc",
+- "linux/x11/app_capturer_x11.cc",
+- "linux/x11/desktop_device_info_linux.cc",
+- "linux/x11/desktop_device_info_linux.h",
+- "linux/x11/shared_x_util.cc",
+- "linux/x11/shared_x_util.h",
+- ]
+- }
+ }
+
+ if (rtc_use_x11_extensions) {
+@@ -539,9 +514,7 @@ rtc_library("desktop_capture") {
+ deps += [ "../../rtc_base:sanitizer" ]
+ }
+
+- if (!build_with_mozilla) {
+- deps += [ "//third_party/libyuv" ]
+- }
++ deps += [ "//third_party/libyuv" ]
+
+ if (use_desktop_capture_differ_sse2) {
+ deps += [ ":desktop_capture_differ_sse2" ]
+diff --git a/modules/portal/BUILD.gn b/modules/portal/BUILD.gn
+index d0756f269b..d7768b2323 100644
+--- a/modules/portal/BUILD.gn
++++ b/modules/portal/BUILD.gn
+@@ -11,6 +11,7 @@ import("//tools/generate_stubs/rules.gni")
+ import("../../webrtc.gni")
+
+ if ((is_linux || is_chromeos) && rtc_use_pipewire) {
++if (!build_with_mozilla) {
+ pkg_config("gio") {
+ packages = [
+ "gio-2.0",
+@@ -88,6 +89,12 @@ if ((is_linux || is_chromeos) && rtc_use_pipewire) {
+ defines += [ "WEBRTC_USE_GIO" ]
+ }
+ }
++} else {
++ config("pipewire_all") {
++ }
++ config("pipewire_config") {
++ }
++}
+
+ rtc_library("portal") {
+ sources = [
+@@ -120,5 +127,22 @@ if ((is_linux || is_chromeos) && rtc_use_pipewire) {
+
+ deps += [ ":pipewire_stubs" ]
+ }
++
++ if (build_with_mozilla) {
++ configs -= [
++ ":gio",
++ ":pipewire",
++ ":pipewire_config",
++ ]
++ deps -= [ ":pipewire_stubs" ]
++ defines -= [ "WEBRTC_DLOPEN_PIPEWIRE" ]
++ public_deps = [
++ "//third_party/pipewire",
++ "//third_party/drm",
++ "//third_party/gbm",
++ "//third_party/libepoxy"
++ ]
++ }
+ }
+ }
++
+diff --git a/modules/utility/BUILD.gn b/modules/utility/BUILD.gn
+index 8cefe5653c..b8d75865f7 100644
+--- a/modules/utility/BUILD.gn
++++ b/modules/utility/BUILD.gn
+@@ -25,5 +25,9 @@ rtc_source_set("utility") {
+ "../../rtc_base:platform_thread",
+ "../../rtc_base/system:arch",
+ ]
++
++ if (build_with_mozilla) {
++ sources -= [ "source/jvm_android.cc" ]
++ }
+ }
+ }
+diff --git a/modules/video_capture/BUILD.gn b/modules/video_capture/BUILD.gn
+index 730ec9bfdd..d473dbb74c 100644
+--- a/modules/video_capture/BUILD.gn
++++ b/modules/video_capture/BUILD.gn
+@@ -125,21 +125,12 @@ if (!build_with_chromium || is_linux || is_chromeos) {
+ "strmiids.lib",
+ "user32.lib",
+ ]
+-
+- if (build_with_mozilla) {
+- sources += [
+- "windows/BaseFilter.cpp",
+- "windows/BaseInputPin.cpp",
+- "windows/BasePin.cpp",
+- "windows/MediaType.cpp",
+- ]
+- }
+ }
+ if (is_fuchsia) {
+ sources += [ "video_capture_factory_null.cc" ]
+ }
+
+- if (build_with_mozilla && is_android) {
++ if (!build_with_mozilla && is_android) {
+ include_dirs = [
+ "/config/external/nspr",
+ "/nsprpub/lib/ds",
+diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
+index 99d8e48e39..b411811b70 100644
+--- a/rtc_base/BUILD.gn
++++ b/rtc_base/BUILD.gn
+@@ -323,6 +323,7 @@ rtc_library("sample_counter") {
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+ }
+
++if (!build_with_mozilla) { # See Bug 1820869.
+ rtc_library("timestamp_aligner") {
+ visibility = [ "*" ]
+ sources = [
+@@ -336,6 +337,7 @@ rtc_library("timestamp_aligner") {
+ "system:rtc_export",
+ ]
+ }
++}
+
+ rtc_library("zero_memory") {
+ visibility = [ "*" ]
+@@ -869,7 +871,9 @@ rtc_library("rtc_json") {
+ "strings/json.h",
+ ]
+ deps = [ ":stringutils" ]
++if (!build_with_mozilla) {
+ all_dependent_configs = [ "//third_party/jsoncpp:jsoncpp_config" ]
++}
+ if (rtc_build_json) {
+ deps += [ "//third_party/jsoncpp" ]
+ } else {
+@@ -1234,6 +1238,7 @@ if (!build_with_chromium) {
+ }
+
+ rtc_library("network") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "network.cc",
+@@ -1272,16 +1277,20 @@ rtc_library("network") {
+ deps += [ ":win32" ]
+ }
+ }
++}
+
+ rtc_library("socket_address_pair") {
++if (!build_with_mozilla) {
+ sources = [
+ "socket_address_pair.cc",
+ "socket_address_pair.h",
+ ]
+ deps = [ ":socket_address" ]
+ }
++}
+
+ rtc_library("net_helper") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "net_helper.cc",
+@@ -1290,8 +1299,10 @@ rtc_library("net_helper") {
+ absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+ deps = [ "system:rtc_export" ]
+ }
++}
+
+ rtc_library("socket_adapters") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "socket_adapters.cc",
+@@ -1311,6 +1322,7 @@ rtc_library("socket_adapters") {
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+ }
++}
+
+ rtc_library("network_route") {
+ sources = [
+@@ -1325,6 +1337,7 @@ rtc_library("network_route") {
+ }
+
+ rtc_library("async_tcp_socket") {
++if (!build_with_mozilla) {
+ sources = [
+ "async_tcp_socket.cc",
+ "async_tcp_socket.h",
+@@ -1342,8 +1355,10 @@ rtc_library("async_tcp_socket") {
+ "network:sent_packet",
+ ]
+ }
++}
+
+ rtc_library("async_udp_socket") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "async_udp_socket.cc",
+@@ -1365,8 +1380,10 @@ rtc_library("async_udp_socket") {
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+ }
++}
+
+ rtc_library("async_packet_socket") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "async_packet_socket.cc",
+@@ -1384,6 +1401,7 @@ rtc_library("async_packet_socket") {
+ "third_party/sigslot",
+ ]
+ }
++}
+
+ rtc_library("mdns_responder_interface") {
+ sources = [ "mdns_responder_interface.h" ]
+@@ -1396,6 +1414,7 @@ rtc_library("dscp") {
+ }
+
+ rtc_library("proxy_info") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "proxy_info.cc",
+@@ -1406,6 +1425,7 @@ rtc_library("proxy_info") {
+ ":socket_address",
+ ]
+ }
++}
+
+ rtc_library("file_rotating_stream") {
+ sources = [
+@@ -1434,6 +1454,7 @@ rtc_library("data_rate_limiter") {
+ }
+
+ rtc_library("unique_id_generator") {
++if (!build_with_mozilla) {
+ sources = [
+ "unique_id_generator.cc",
+ "unique_id_generator.h",
+@@ -1448,6 +1469,7 @@ rtc_library("unique_id_generator") {
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+ }
++}
+
+ rtc_library("crc32") {
+ sources = [
+@@ -1475,6 +1497,7 @@ rtc_library("stream") {
+ }
+
+ rtc_library("rtc_certificate_generator") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "rtc_certificate_generator.cc",
+@@ -1492,8 +1515,10 @@ rtc_library("rtc_certificate_generator") {
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
+ }
++}
+
+ rtc_library("ssl") {
++if (!build_with_mozilla) {
+ visibility = [ "*" ]
+ sources = [
+ "helpers.cc",
+@@ -1594,6 +1619,7 @@ rtc_library("ssl") {
+ deps += [ ":win32" ]
+ }
+ }
++}
+
+ rtc_library("crypt_string") {
+ sources = [
+@@ -1603,6 +1629,7 @@ rtc_library("crypt_string") {
+ }
+
+ rtc_library("http_common") {
++if (!build_with_mozilla) {
+ sources = [
+ "http_common.cc",
+ "http_common.h",
+@@ -1619,6 +1646,7 @@ rtc_library("http_common") {
+
+ absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+ }
++}
+
+ rtc_source_set("gtest_prod") {
+ sources = [ "gtest_prod_util.h" ]
+@@ -2176,7 +2204,7 @@ if (rtc_include_tests) {
+ }
+ }
+
+-if (is_android) {
++if (is_android && !build_with_mozilla) {
+ rtc_android_library("base_java") {
+ visibility = [ "*" ]
+ sources = [
+diff --git a/rtc_base/system/BUILD.gn b/rtc_base/system/BUILD.gn
+index 77f5139a2f..486b37590c 100644
+--- a/rtc_base/system/BUILD.gn
++++ b/rtc_base/system/BUILD.gn
+@@ -101,7 +101,7 @@ if (is_mac || is_ios) {
+ rtc_source_set("warn_current_thread_is_deadlocked") {
+ sources = [ "warn_current_thread_is_deadlocked.h" ]
+ deps = []
+- if (is_android && !build_with_chromium) {
++ if (is_android && (!build_with_chromium && !build_with_mozilla)) {
+ sources += [ "warn_current_thread_is_deadlocked.cc" ]
+ deps += [
+ "..:logging",
+diff --git a/test/BUILD.gn b/test/BUILD.gn
+index be8ee1684e..f7980f941d 100644
+--- a/test/BUILD.gn
++++ b/test/BUILD.gn
+@@ -241,6 +241,7 @@ rtc_library("audio_test_common") {
+ absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
+ }
+
++if (!build_with_mozilla) {
+ if (!build_with_chromium) {
+ if (is_mac || is_ios) {
+ rtc_library("video_test_mac") {
+@@ -294,8 +295,12 @@ if (!build_with_chromium) {
+ }
+ }
+ }
++}
+
+ rtc_library("rtp_test_utils") {
++ if (build_with_mozilla) {
++ sources = []
++ } else {
+ testonly = true
+ sources = [
+ "rtcp_packet_parser.cc",
+@@ -305,6 +310,7 @@ rtc_library("rtp_test_utils") {
+ "rtp_file_writer.cc",
+ "rtp_file_writer.h",
+ ]
++ }
+
+ deps = [
+ "../api:array_view",
+@@ -560,7 +566,9 @@ rtc_library("video_test_support") {
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+
+ if (!is_ios) {
++ if (!build_with_mozilla) {
+ deps += [ "//third_party:jpeg" ]
++ }
+ sources += [ "testsupport/jpeg_frame_writer.cc" ]
+ } else {
+ sources += [ "testsupport/jpeg_frame_writer_ios.cc" ]
+@@ -1322,6 +1330,7 @@ if (!build_with_chromium) {
+ }
+ }
+
++if (!build_with_mozilla) {
+ if (!build_with_chromium && is_android) {
+ rtc_android_library("native_test_java") {
+ testonly = true
+@@ -1335,6 +1344,7 @@ if (!build_with_chromium && is_android) {
+ ]
+ }
+ }
++}
+
+ rtc_library("call_config_utils") {
+ testonly = true
+diff --git a/video/BUILD.gn b/video/BUILD.gn
+index 1722ad4f6e..e84b73a352 100644
+--- a/video/BUILD.gn
++++ b/video/BUILD.gn
+@@ -17,7 +17,7 @@ rtc_library("video_stream_encoder_interface") {
+ "../api:fec_controller_api",
+ "../api:rtc_error",
+ "../api:rtp_parameters",
+- "../api:rtp_sender_interface",
++ "../api:rtp_sender_setparameters_callback",
+ "../api:scoped_refptr",
+ "../api/adaptation:resource_adaptation_api",
+ "../api/units:data_rate",
+@@ -404,7 +404,7 @@ rtc_library("video_stream_encoder_impl") {
+ ":video_stream_encoder_interface",
+ "../api:field_trials_view",
+ "../api:rtp_parameters",
+- "../api:rtp_sender_interface",
++ "../api:rtp_sender_setparameters_callback",
+ "../api:sequence_checker",
+ "../api/adaptation:resource_adaptation_api",
+ "../api/task_queue:pending_task_safety_flag",
+diff --git a/webrtc.gni b/webrtc.gni
+index 912b9b4ef0..1ee647b69d 100644
+--- a/webrtc.gni
++++ b/webrtc.gni
+@@ -35,6 +35,11 @@ if (is_mac) {
+ import("//build/config/mac/rules.gni")
+ }
+
++if (is_android) {
++ import("//build/config/android/config.gni")
++ import("//build/config/android/rules.gni")
++}
++
+ if (is_fuchsia) {
+ import("//build/config/fuchsia/config.gni")
+ }
+@@ -42,6 +47,11 @@ if (is_fuchsia) {
+ # This declare_args is separated from the next one because args declared
+ # in this one, can be read from the next one (args defined in the same
+ # declare_args cannot be referenced in that scope).
++declare_args() {
++ # Enable to use the Mozilla internal settings.
++ build_with_mozilla = true
++}
++
+ declare_args() {
+ # Setting this to true will make RTC_EXPORT (see rtc_base/system/rtc_export.h)
+ # expand to code that will manage symbols visibility.
+@@ -92,7 +102,7 @@ declare_args() {
+ # will tell the pre-processor to remove the default definition of the
+ # SystemTimeNanos() which is defined in rtc_base/system_time.cc. In
+ # that case a new implementation needs to be provided.
+- rtc_exclude_system_time = build_with_chromium
++ rtc_exclude_system_time = build_with_chromium || build_with_mozilla
+
+ # Setting this to false will require the API user to pass in their own
+ # SSLCertificateVerifier to verify the certificates presented from a
+@@ -118,7 +128,7 @@ declare_args() {
+
+ # Used to specify an external OpenSSL include path when not compiling the
+ # library that comes with WebRTC (i.e. rtc_build_ssl == 0).
+- rtc_ssl_root = ""
++ rtc_ssl_root = "unused"
+
+ # Enable when an external authentication mechanism is used for performing
+ # packet authentication for RTP packets instead of libsrtp.
+@@ -135,13 +145,13 @@ declare_args() {
+ rtc_enable_bwe_test_logging = false
+
+ # Set this to false to skip building examples.
+- rtc_build_examples = true
++ rtc_build_examples = false
+
+ # Set this to false to skip building tools.
+- rtc_build_tools = true
++ rtc_build_tools = false
+
+ # Set this to false to skip building code that requires X11.
+- rtc_use_x11 = ozone_platform_x11
++ rtc_use_x11 = use_x11
+
+ # Set this to use PipeWire on the Wayland display server.
+ # By default it's only enabled on desktop Linux (excludes ChromeOS) and
+@@ -152,9 +162,6 @@ declare_args() {
+ # Set this to link PipeWire and required libraries directly instead of using the dlopen.
+ rtc_link_pipewire = false
+
+- # Enable to use the Mozilla internal settings.
+- build_with_mozilla = false
+-
+ # Experimental: enable use of Android AAudio which requires Android SDK 26 or above
+ # and NDK r16 or above.
+ rtc_enable_android_aaudio = false
+@@ -280,7 +287,7 @@ declare_args() {
+ rtc_build_json = !build_with_mozilla
+ rtc_build_libsrtp = !build_with_mozilla
+ rtc_build_libvpx = !build_with_mozilla
+- rtc_libvpx_build_vp9 = !build_with_mozilla
++ rtc_libvpx_build_vp9 = true
+ rtc_build_opus = !build_with_mozilla
+ rtc_build_ssl = !build_with_mozilla
+
+@@ -299,7 +306,7 @@ declare_args() {
+
+ # Chromium uses its own IO handling, so the internal ADM is only built for
+ # standalone WebRTC.
+- rtc_include_internal_audio_device = !build_with_chromium
++ rtc_include_internal_audio_device = !build_with_chromium && !build_with_mozilla
+
+ # Set this to true to enable the avx2 support in webrtc.
+ # TODO: Make sure that AVX2 works also for non-clang compilers.
+@@ -343,6 +350,9 @@ declare_args() {
+ rtc_enable_grpc = rtc_enable_protobuf && (is_linux || is_mac)
+ }
+
++# Enable liboam only on non-mozilla builds.
++enable_libaom = !build_with_mozilla
++
+ # Make it possible to provide custom locations for some libraries (move these
+ # up into declare_args should we need to actually use them for the GN build).
+ rtc_libvpx_dir = "//third_party/libvpx"
+@@ -1144,7 +1154,7 @@ if (is_mac || is_ios) {
+ }
+ }
+
+-if (is_android) {
++if (is_android && !build_with_mozilla) {
+ template("rtc_android_library") {
+ android_library(target_name) {
+ forward_variables_from(invoker,