diff --git a/.agents/.style.mdformat b/.agents/.style.mdformat
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/.agents/skills/gn-check-autofix/SKILL.md b/.agents/skills/gn-check-autofix/SKILL.md
new file mode 100644
index 00000000000..67943ae1881
--- /dev/null
+++ b/.agents/skills/gn-check-autofix/SKILL.md
@@ -0,0 +1,72 @@
+---
+name: gn-check-autofix
+description: Automatically fix GN check errors in WebRTC BUILD.gn files. Use when encountering "Include not allowed", "rtc_source_set shall not contain cc files", or when needing to clean up non-absolute dependencies.
+---
+
+# GN Check Autofix
+
+This skill provides instructions for using `tools_webrtc/gn_check_autofix.py` to
+automatically resolve common GN build configuration errors in WebRTC.
+
+## Core Workflows
+
+### Fix Missing Dependencies
+
+When you see "Include not allowed" errors from `gn gen --check`, use this
+workflow:
+
+1. Run the autofix tool on your output directory:
+ ```bash
+ tools_webrtc/gn_check_autofix.py -C
+ ```
+2. The tool will:
+ - Identify targets missing dependencies.
+ - Add the missing `deps` to the appropriate `BUILD.gn` files.
+ - Automatically run `gn format` on modified files.
+
+### Fix rtc_source_set Violations
+
+If you see "rtc_source_set shall not contain cc files", the tool will
+automatically convert them to `rtc_library`:
+
+1. Run the tool:
+ ```bash
+ tools_webrtc/gn_check_autofix.py -C
+ ```
+
+### Clean Up Dependencies
+
+To remove all non-absolute dependencies (those not starting with `//`) from
+specific `BUILD.gn` files:
+
+```bash
+tools_webrtc/gn_check_autofix.py -r path/to/BUILD.gn
+```
+
+*Note: This preserves absolute dependencies (starting with `//`) and targets
+ending in `_test`, `_tests`, `_unittest`, or `_unittests`.*
+
+## Integration with Include Cleaner
+
+This tool is the recommended second step after running `webrtc-include-cleaner`.
+While the include cleaner updates your C++ source files, `gn-check-autofix`
+synchronizes your `BUILD.gn` files to match.
+
+## Parameters
+
+- `-C `: Path to a local build directory (e.g., `out/Default`). The tool
+ internally runs `gn gen --check --error-limit=20000`.
+- `-r `: Remove all non-absolute dependencies from the specified files.
+- `--error-limit`: Can be used to override the default error cap.
+
+## Post-Fix Steps
+
+After the tool runs, always verify the changes:
+
+1. **Deduplicate**: The tool may occasionally add a dependency that is already
+ present. Check the `deps` list for duplicates.
+2. **Regenerate GN**: Run `gn gen ` to confirm errors are resolved.
+3. **Format**: The tool runs `gn format`, but a final `git cl format` is
+ recommended for consistency.
+4. **Review**: Check the diff to ensure dependencies were added to the correct
+ targets.
diff --git a/.agents/skills/gtest-parallel/SKILL.md b/.agents/skills/gtest-parallel/SKILL.md
new file mode 100644
index 00000000000..f1e8b32d997
--- /dev/null
+++ b/.agents/skills/gtest-parallel/SKILL.md
@@ -0,0 +1,60 @@
+---
+name: gtest-parallel
+description: Run Google Test binaries in parallel using the gtest-parallel script. Use when needing to speed up test execution, run flaky tests with repeat, or filter specific tests.
+---
+
+# gtest-parallel
+
+`gtest-parallel` is a script that executes Google Test binaries in parallel,
+providing speedup for single-threaded tests and tests that do not run at 100%
+CPU.
+
+## Location
+
+The script is located at `third_party/gtest-parallel/gtest-parallel`.
+
+## Core Flags
+
+### Filtering Tests
+
+Use `--gtest_filter` to run a select set of tests. It supports the same syntax
+as Google Test (including exclusion with `-`).
+
+```bash
+third_party/gtest-parallel/gtest-parallel path/to/binary --gtest_filter=Foo.*:Bar.*
+```
+
+### Timeouts
+
+- `--timeout=TIMEOUT`: Interrupt all remaining processes after the given time
+ (in seconds).
+- `--timeout_per_test=TIMEOUT_PER_TEST`: Interrupt single processes after the
+ given time (in seconds).
+
+### Output and Logging
+
+- `-d OUTPUT_DIR`, `--output_dir=OUTPUT_DIR`: Output directory for test logs.
+ Logs will be available under `gtest-parallel-logs/` inside the specified
+ directory.
+- `--dump_json_test_results=DUMP_JSON_TEST_RESULTS`: Saves the results of the
+ tests as a JSON machine-readable file.
+
+## Advanced Usage
+
+### Repeating Tests (Flakiness Testing)
+
+Use `--repeat=N` to run tests multiple times.
+
+```bash
+third_party/gtest-parallel/gtest-parallel path/to/binary --repeat=1000
+```
+
+### Workers
+
+Use `-w WORKERS` or `--workers=WORKERS` to specify the number of parallel
+workers (defaults to the number of cores).
+
+### Serializing Test Cases
+
+Use `--serialize_test_cases` to run tests within the same test case sequentially
+(useful if they share resources).
diff --git a/.agents/skills/include-cleaner/SKILL.md b/.agents/skills/include-cleaner/SKILL.md
new file mode 100644
index 00000000000..d664a81e64c
--- /dev/null
+++ b/.agents/skills/include-cleaner/SKILL.md
@@ -0,0 +1,67 @@
+---
+name: webrtc-include-cleaner
+description: Runs the WebRTC include-cleaner tool (IWYU replacement) to fix headers in C++ files. Use when preparing a CL for upload, after modifying .cc or .h files, or when instructed to fix include regressions.
+---
+
+# WebRTC Include Cleaner
+
+This skill provides instructions for using
+`tools_webrtc/iwyu/apply-include-cleaner`, a tool that automatically manages C++
+`#include` directives in the WebRTC codebase. It ensures that every header used
+is explicitly included and that unused headers are removed.
+
+## When to Use
+
+- **Pre-upload**: Run this tool before uploading a CL to ensure clean includes.
+- **After refactoring**: When moving code or changing dependencies, use this to
+ update `#include` blocks.
+- **Fixing regressions**: Use this if a presubmit or bot identifies
+ include-related issues.
+
+## Basic Usage
+
+To run the include cleaner on specific files:
+
+```bash
+tools_webrtc/iwyu/apply-include-cleaner path/to/file.cc path/to/file.h
+```
+
+To run it on all modified files relative to the upstream branch (ideal for CL
+preparation):
+
+```bash
+tools_webrtc/iwyu/apply-include-cleaner
+```
+
+Note: This is as expensive as a build for each file, so use it sparingly.
+
+## Options
+
+- `-p`, `--print`: Don't modify the files, just print the proposed changes.
+- `-w WORK_DIR`, `--work-dir WORK_DIR`: Specify the GN work directory (default:
+ `out/Default`).
+
+## Post-Execution Steps
+
+After running the include cleaner, it is recommended to perform the following
+steps to ensure build and style consistency:
+
+1. **Check for build errors**: The tool might occasionally make mistakes. Run a
+ build to verify.
+1. **Fix GN dependencies**: Use `tools_webrtc/gn_check_autofix.py` to fix any
+ `deps` issues caused by include changes.
+ ```bash
+ tools_webrtc/gn_check_autofix.py -C out/Default
+ ```
+1. **Format code**: Run `git cl format` to fix any formatting issues in the
+ `#include` blocks.
+ ```bash
+ git cl format
+ ```
+
+## Prerequisites
+
+- The tool automatically generates `compile_commands.json` in the output
+ directory if `out/Default` exists.
+- `clangd` must be checked out in your `.gclient` file
+ (`"checkout_clangd": True`).
diff --git a/.github/workflows/manual-platform-tests.yml b/.github/workflows/manual-platform-tests.yml
index cbf8cae2de8..b44a214ff3b 100644
--- a/.github/workflows/manual-platform-tests.yml
+++ b/.github/workflows/manual-platform-tests.yml
@@ -312,6 +312,12 @@ jobs:
- name: Build iOS SDK artifact
working-directory: release-pipeline
+ # M148's build config adds the lld-only flag --ignore-auto-link-option
+ # when Xcode >= 26.4, but the pipeline links with Apple ld (use_lld=false
+ # for Mac Catalyst), which rejects it. Pin Xcode 26.3 until the Catalyst
+ # slices can link with lld again.
+ env:
+ DEVELOPER_DIR: /Applications/Xcode_26.3.app
run: >-
bundle exec fastlane ios build
"root:${{ github.workspace }}/webrtc-tree/.output/src"
@@ -443,12 +449,13 @@ jobs:
while IFS= read -r framework; do
command+=(-framework "${framework}")
if [[ "${ENABLE_DEBUG}" == "true" ]]; then
- mapfile -t dsyms < <(find "$(dirname "${framework}")" -name "$(basename "${framework}").dSYM" -type d | sort)
- if [[ "${#dsyms[@]}" -eq 0 ]]; then
+ # macOS runners use bash 3.2, which lacks mapfile.
+ dsym="$(find "$(dirname "${framework}")" -name "$(basename "${framework}").dSYM" -type d | sort | head -n 1)"
+ if [[ -z "${dsym}" ]]; then
echo "::warning::Missing dSYM for ${framework}"
continue
fi
- command+=(-debug-symbols "${dsyms[0]}")
+ command+=(-debug-symbols "${dsym}")
fi
done < <(find apple-inputs -name '*.framework' -type d | sort)
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index d74465e6682..f9ed90c1eb8 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -292,6 +292,12 @@ jobs:
- name: Build iOS SDK artifact
working-directory: release-pipeline
+ # M148's build config adds the lld-only flag --ignore-auto-link-option
+ # when Xcode >= 26.4, but the pipeline links with Apple ld (use_lld=false
+ # for Mac Catalyst), which rejects it. Pin Xcode 26.3 until the Catalyst
+ # slices can link with lld again.
+ env:
+ DEVELOPER_DIR: /Applications/Xcode_26.3.app
run: >-
bundle exec fastlane ios build
"root:${{ github.workspace }}/webrtc-tree/.output/src"
@@ -418,12 +424,13 @@ jobs:
while IFS= read -r framework; do
command+=(-framework "${framework}")
if [[ "${ENABLE_DEBUG}" == "true" ]]; then
- mapfile -t dsyms < <(find "$(dirname "${framework}")" -name "$(basename "${framework}").dSYM" -type d | sort)
- if [[ "${#dsyms[@]}" -eq 0 ]]; then
+ # macOS runners use bash 3.2, which lacks mapfile.
+ dsym="$(find "$(dirname "${framework}")" -name "$(basename "${framework}").dSYM" -type d | sort | head -n 1)"
+ if [[ -z "${dsym}" ]]; then
echo "::warning::Missing dSYM for ${framework}"
continue
fi
- command+=(-debug-symbols "${dsyms[0]}")
+ command+=(-debug-symbols "${dsym}")
fi
done < <(find apple-inputs -name '*.framework' -type d | sort)
diff --git a/.gitignore b/.gitignore
index 9b7a2aa2255..8c83bf78e9e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,11 +34,13 @@
.cproject
.gdb_history
.gdbinit
+.gemini
.landmines
.metadata
.project
.pydevproject
.settings
+.siso_failed_targets
.sw?
/Makefile
/base
diff --git a/.gn b/.gn
index 3b92d0ad12f..4706638e3ea 100644
--- a/.gn
+++ b/.gn
@@ -12,8 +12,8 @@ import("//build/dotfile_settings.gni")
buildconfig = "//build/config/BUILDCONFIG.gn"
# The python interpreter to use by default. On Windows, this will look
-# for vpython3.exe and vpython3.bat.
-script_executable = "vpython3"
+# for python3.exe and python3.bat.
+script_executable = "python3"
# The secondary source root is a parallel directory tree where
# GN build files are placed when they can not be placed directly
@@ -95,6 +95,8 @@ default_args = {
# Use Siso instead of Ninja.
use_siso = true
+ clang_unsafe_buffers_paths = "//unsafe_buffers_paths.txt"
+
# WebRTC must stay in C++20 for longer compared to Chromium.
use_cxx23 = false
}
diff --git a/AUTHORS b/AUTHORS
index 8b8798fe84b..e9f6f9b90cd 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -168,6 +168,7 @@ Hailin Zhao
Fizz Fang
Sai Xu
Shunyang Zhang
+Suresh Jain
# END individuals section.
# BEGIN organizations section.
@@ -188,6 +189,7 @@ Hopin Ltd. <*@hopin.to>
HyperConnect Inc. <*@hpcnt.com>
Igalia S.L. <*@igalia.com>
Intel Corporation <*@intel.com>
+Island Technology, Inc. <*@island.io>
LG Electronics, Inc. <*@lge.com>
Life On Air Inc. <*@lifeonair.com>
LiveKit <*@livekit.io>
@@ -223,4 +225,5 @@ Vonage Holdings Corp. <*@vonage.com>
Wang Qing
Wire Swiss GmbH <*@wire.com>
&yet LLC <*@andyet.com>
+Ahmad Yar
# END organizations section.
diff --git a/BUILD.gn b/BUILD.gn
index 61fec180a6e..4d154f8e193 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -47,6 +47,7 @@ if (!build_with_chromium) {
}
if (rtc_include_tests) {
deps += [
+ ":audio_engine_tests",
":rtc_p2p_unittests",
":rtc_unittests",
":video_engine_tests",
@@ -177,6 +178,10 @@ config("common_inherited_config") {
defines += [ "RTC_ENABLE_WIN_WGC" ]
}
+ if (deprecate_plan_b) {
+ defines += [ "WEBRTC_DEPRECATE_PLAN_B" ]
+ }
+
if (!rtc_use_perfetto) {
# Some tests need to declare their own trace event handlers. If this define is
# not set, the first time TRACE_EVENT_* is called it will store the return
@@ -274,33 +279,6 @@ config("rtc_prod_config") {
}
}
-group("tracing") {
- all_dependent_configs = [ "//third_party/perfetto/gn:public_config" ]
- if (rtc_use_perfetto) {
- if (build_with_chromium) {
- public_deps = # no-presubmit-check TODO(webrtc:8603)
- [ "//third_party/perfetto:libperfetto" ]
- } else {
- public_deps = [ # no-presubmit-check TODO(webrtc:8603)
- ":webrtc_libperfetto",
- "//third_party/perfetto/include/perfetto/tracing",
- ]
- }
- } else {
- public_deps = # no-presubmit-check TODO(webrtc:8603)
- [ "//third_party/perfetto/include/perfetto/tracing" ]
- }
-}
-
-if (rtc_use_perfetto) {
- rtc_library("webrtc_libperfetto") {
- deps = [
- "//third_party/perfetto/src/tracing:client_api_without_backends",
- "//third_party/perfetto/src/tracing:platform_impl",
- ]
- }
-}
-
config("common_config") {
cflags = []
cflags_c = []
@@ -346,10 +324,6 @@ config("common_config") {
defines += [ "WEBRTC_HAVE_SCTP" ]
}
- if (rtc_enable_external_auth) {
- defines += [ "ENABLE_EXTERNAL_AUTH" ]
- }
-
if (rtc_use_h264) {
defines += [ "WEBRTC_USE_H264" ]
}
@@ -565,7 +539,6 @@ if (!build_with_chromium) {
"modules/video_capture:video_capture_internal_impl",
"pc:libjingle_peerconnection",
"pc:rtc_pc",
- "sdk",
"video",
]
@@ -590,6 +563,14 @@ if (!build_with_chromium) {
if (rtc_include_internal_audio_device) {
deps += [ "api/audio:create_audio_device_module" ]
}
+ if (!build_with_chromium) {
+ if (is_android) {
+ deps += [ "sdk/android" ]
+ }
+ if (is_ios) {
+ deps += [ "sdk:framework_objc" ]
+ }
+ }
}
# TODO(bugs.webrtc.org/430260876): Compile webrtc lib with rust once toolchain
@@ -646,6 +627,7 @@ if (rtc_include_tests && !build_with_chromium) {
"api/task_queue:pending_task_safety_flag_unittests",
"api/test/metrics:metrics_unittests",
"api/test/network_emulation:network_queue_unittests",
+ "api/transport:ecn_marking_unittest",
"api/transport:stun_unittest",
"api/transport/rtp:corruption_detection_message_unittest",
"api/video/test:rtc_api_video_unittests",
@@ -712,19 +694,27 @@ if (rtc_include_tests && !build_with_chromium) {
rtc_executable("benchmarks") {
testonly = true
deps = [
- "rtc_base:base64_benchmark_temp",
+ "rtc_base:base64_benchmark",
"rtc_base/synchronization:mutex_benchmark",
"test:benchmark_main",
]
}
}
+ rtc_test("audio_engine_tests") {
+ testonly = true
+ deps = [ "audio:audio_tests" ]
+
+ if (is_android) {
+ use_default_launcher = false
+ deps += [ "//build/android/gtest_apk:native_test_instrumentation_test_runner_java" ]
+ }
+ }
+
# TODO(pbos): Rename test suite, this is no longer "just" for video targets.
rtc_test("video_engine_tests") {
testonly = true
deps = [
- "audio:audio_tests",
-
# TODO(eladalon): call_tests aren't actually video-specific, so we
# should move them to a more appropriate test suite.
"call:call_tests",
diff --git a/DEPS b/DEPS
index 83e5f8c59c8..56b4be5b957 100644
--- a/DEPS
+++ b/DEPS
@@ -10,7 +10,7 @@ vars = {
# chromium waterfalls. More info at: crbug.com/570091.
'checkout_configuration': 'default',
'checkout_instrumented_libraries': 'checkout_linux and checkout_configuration == "default"',
- 'chromium_revision': '86cd6c0b05db1dcde3a25d7a9f9a87003fc5bf73',
+ 'chromium_revision': 'a3f5fcb392f2902650ca2b71820e7e418787e18b',
# Fetch the prebuilt binaries for llvm-cov and llvm-profdata. Needed to
# process the raw profiles produced by instrumented targets (built with
@@ -33,7 +33,7 @@ vars = {
# By default, download the fuchsia sdk from the public sdk directory.
'fuchsia_sdk_cipd_prefix': 'fuchsia/sdk/core/',
- 'fuchsia_version': 'version:30.20251218.4.1',
+ 'fuchsia_version': 'version:31.20260204.7.1',
# By default, download the fuchsia images from the fuchsia GCS bucket.
'fuchsia_images_bucket': 'fuchsia',
'checkout_fuchsia': False,
@@ -50,7 +50,7 @@ vars = {
# reclient CIPD package version
'reclient_version': 're_client_version:0.185.0.db415f21-gomaip',
# siso CIPD package version.
- 'siso_version': 'git_revision:1624786919608fb2140226f6468cd8d0b52fe3b5',
+ 'siso_version': 'git_revision:87bad442ede1c60700dfabef5862c4a584621734',
# ninja CIPD package.
'ninja_package': 'infra/3pp/tools/ninja/',
@@ -69,28 +69,28 @@ vars = {
deps = {
'src/build':
- 'https://chromium.googlesource.com/chromium/src/build@75489df9cb57087efa5ef49f5ceb2f29ce302632',
+ 'https://chromium.googlesource.com/chromium/src/build@dd54dd5186566a13bda647123c22540666b12ace',
'src/buildtools':
- 'https://chromium.googlesource.com/chromium/src/buildtools@4dc32b3f510b330137385e2b3a631ca8e13a8e22',
+ 'https://chromium.googlesource.com/chromium/src/buildtools@95ed44cf5f06dbb5861030b91c9db9ccb4316762',
# Gradle 6.6.1. Used for testing Android Studio project generation for WebRTC.
'src/examples/androidtests/third_party/gradle': {
'url': 'https://chromium.googlesource.com/external/github.com/gradle/gradle.git@f2d1fb54a951d8b11d25748e4711bec8d128d7e3',
'condition': 'checkout_android',
},
'src/ios': {
- 'url': 'https://chromium.googlesource.com/chromium/src/ios@b4ba4e6585ff9c478d1f3276b096ca269dc47589',
+ 'url': 'https://chromium.googlesource.com/chromium/src/ios@b3b1914b7bd50a64ec13fabaf5e42edcf22e99b8',
'condition': 'checkout_ios',
},
'src/testing':
- 'https://chromium.googlesource.com/chromium/src/testing@abe0cb4162303126aa88fb7e54d27198f6f04f2c',
+ 'https://chromium.googlesource.com/chromium/src/testing@629b7bb6055714e23d8125bf790cfc8d94a94159',
'src/third_party':
- 'https://chromium.googlesource.com/chromium/src/third_party@ae7dba2f6ba96a03becead08e8ed53c88691dce1',
+ 'https://chromium.googlesource.com/chromium/src/third_party@f54c8ff58874b977b8ba20c146dd312d2102168e',
'src/buildtools/linux64': {
'packages': [
{
'package': 'gn/gn/linux-${{arch}}',
- 'version': 'git_revision:5550ba0f4053c3cbb0bff3d60ded9d867b6fa371',
+ 'version': 'git_revision:b2ac0e7a9089039e62b84d246eca83f84c540f76',
}
],
'dep_type': 'cipd',
@@ -100,7 +100,7 @@ deps = {
'packages': [
{
'package': 'gn/gn/mac-${{arch}}',
- 'version': 'git_revision:5550ba0f4053c3cbb0bff3d60ded9d867b6fa371',
+ 'version': 'git_revision:b2ac0e7a9089039e62b84d246eca83f84c540f76',
}
],
'dep_type': 'cipd',
@@ -110,7 +110,7 @@ deps = {
'packages': [
{
'package': 'gn/gn/windows-amd64',
- 'version': 'git_revision:5550ba0f4053c3cbb0bff3d60ded9d867b6fa371',
+ 'version': 'git_revision:b2ac0e7a9089039e62b84d246eca83f84c540f76',
}
],
'dep_type': 'cipd',
@@ -136,157 +136,157 @@ deps = {
'objects': [
{
# The Android libclang_rt.builtins libraries are currently only included in the Linux clang package.
- 'object_name': 'Linux_x64/clang-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': 'a2d632dfbd997b1c545c4ab858c664e33b55bf6423b58793ed9eb42c8d2a8249',
- 'size_bytes': 57165612,
- 'generation': 1765411203931092,
+ 'object_name': 'Linux_x64/clang-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '750b331006635281d7d90696629f67db748ba62004c46675eccb8af144141847',
+ 'size_bytes': 58029996,
+ 'generation': 1772218390302503,
'condition': '(host_os == "linux" or checkout_android) and non_git_source',
},
{
- 'object_name': 'Linux_x64/clang-tidy-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': 'eccc0770ce912c2da813856b5f83b729e26a71cea99c63dc5ae63e92fc3cfd53',
- 'size_bytes': 14313444,
- 'generation': 1765411203943205,
+ 'object_name': 'Linux_x64/clang-tidy-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': 'd53439bb6ac13c8d2c30c20555ded434039802f70d4119c0138bd77d03552223',
+ 'size_bytes': 14392856,
+ 'generation': 1772218390323510,
'condition': 'host_os == "linux" and checkout_clang_tidy and non_git_source',
},
{
- 'object_name': 'Linux_x64/clangd-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': 'd5d2c507783f551eb8ce24f19610233df1af799a2c4ae7ff64a843d9d27104d4',
- 'size_bytes': 14517932,
- 'generation': 1765411203940105,
+ 'object_name': 'Linux_x64/clangd-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': 'a24613fb7afce42c076bb95d1b671ac028746b379e88070c126f0aab17a4c34e',
+ 'size_bytes': 14635272,
+ 'generation': 1772218390330947,
'condition': 'host_os == "linux" and checkout_clangd and non_git_source',
},
{
- 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': 'a29fc6b6e582df4ce0a2178bbc8225e01b6446d3788b89932765558523e4de4a',
- 'size_bytes': 2307836,
- 'generation': 1765411203990197,
+ 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '8dcd816a83361b7924093ccba92dfe6bd29af2cf8af58bf7ce785b38c5027a8b',
+ 'size_bytes': 2328908,
+ 'generation': 1772218390452408,
'condition': 'host_os == "linux" and checkout_clang_coverage_tools and non_git_source',
},
{
- 'object_name': 'Linux_x64/llvmobjdump-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '8b6b59b573731321a0320917d011b8f373d14d9556db63bad1a8a2449e275f05',
- 'size_bytes': 5771312,
- 'generation': 1765411203963068,
+ 'object_name': 'Linux_x64/llvmobjdump-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '0a15d6b8c2b774b0706618d2afa123b9c87af2ec12e74dc44346df4c4690b670',
+ 'size_bytes': 5780116,
+ 'generation': 1772218390340688,
'condition': '((checkout_linux or checkout_mac or checkout_android) and host_os == "linux") and non_git_source',
},
{
- 'object_name': 'Mac/clang-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '3443ffd7392237fe82cf2eb62f56315e090dc6030a1cadc98dd4e938a28d2b2a',
- 'size_bytes': 54346192,
- 'generation': 1765411205883988,
+ 'object_name': 'Mac/clang-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '2661847eb275079358ab186eaf7f85d6139d44c7413a731dfac7f5ed1ec34a01',
+ 'size_bytes': 54827776,
+ 'generation': 1772218392155773,
'condition': 'host_os == "mac" and host_cpu == "x64"',
},
{
- 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '350d349928e9075d9409c1d59c2fcba70e0b47a7cca8eef100a835e509bf4093',
- 'size_bytes': 1009740,
- 'generation': 1765411213098351,
+ 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '69918295c163ec5a20aede81d4100bbd41e01142d32e0555366bba05141f7bf2',
+ 'size_bytes': 1010608,
+ 'generation': 1772218399449599,
'condition': 'checkout_mac and not host_os == "mac"',
},
{
- 'object_name': 'Mac/clang-tidy-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '953077b4b49d9a92981c1d8a8e44a5564d551931e81a089a6741d7db5c8be72f',
- 'size_bytes': 14338004,
- 'generation': 1765411205893281,
+ 'object_name': 'Mac/clang-tidy-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': 'b8013fe5d2410db4f365ec8779972415d1d0a08042a3a43f823a0da712108cff',
+ 'size_bytes': 14280488,
+ 'generation': 1772218392176137,
'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_tidy',
},
{
- 'object_name': 'Mac/clangd-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '16fbcb0ff1e7eed822d007af549a2820c69ff32aa5a951518cecc8ea161b300f',
- 'size_bytes': 16279576,
- 'generation': 1765411205896181,
+ 'object_name': 'Mac/clangd-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '508098b26e74bd7f5cdcc40a2ed2db24e2bdde15e0f1c14ce94f685f991b3dd6',
+ 'size_bytes': 15455912,
+ 'generation': 1772218392186146,
'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clangd',
},
{
- 'object_name': 'Mac/llvm-code-coverage-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '9ff2acd949d45fea14553baf8e035e8d2cd731ad7b747b1d3f1d726d77102373',
- 'size_bytes': 2330756,
- 'generation': 1765411205937658,
+ 'object_name': 'Mac/llvm-code-coverage-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '46c33f13a68fc14005560c01a91215b5cab54c07e920a714264352e46af1350c',
+ 'size_bytes': 2376304,
+ 'generation': 1772218392292978,
'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_coverage_tools',
},
{
- 'object_name': 'Mac/llvmobjdump-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': 'cf0d536e8ee4b92426819b64ba2e9b080796f97beb85a68ebe01894783c82955',
- 'size_bytes': 5621768,
- 'generation': 1765411205900222,
+ 'object_name': 'Mac/llvmobjdump-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '6a92e3f21b3a035f406313d24688bb1b312a9a0ec423ff808752b6638104aff3',
+ 'size_bytes': 5699700,
+ 'generation': 1772218392189830,
'condition': 'host_os == "mac" and host_cpu == "x64"',
},
{
- 'object_name': 'Mac_arm64/clang-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '82d056f890fd3f86f711d2153e365e240673c98f94feb09758ecca7b487431fc',
- 'size_bytes': 45447500,
- 'generation': 1765411214931139,
+ 'object_name': 'Mac_arm64/clang-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '909be0f896bcf140c710548ccda4673c0aea2480e28d10803c19b1689b36acd5',
+ 'size_bytes': 45847044,
+ 'generation': 1772218401088162,
'condition': 'host_os == "mac" and host_cpu == "arm64"',
},
{
- 'object_name': 'Mac_arm64/clang-tidy-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '04c7feb0058499149468edef9ce7b6155831ef22b756ae9aa39e5a9504937701',
- 'size_bytes': 12329844,
- 'generation': 1765411214943784,
+ 'object_name': 'Mac_arm64/clang-tidy-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '83dc8d90529730ae503e684ea0047a0baec2b0c4a81941d1bb4196feea6ba264',
+ 'size_bytes': 12444972,
+ 'generation': 1772218401143017,
'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_tidy',
},
{
- 'object_name': 'Mac_arm64/clangd-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '8e41df7efa35f732f46561bbbe1967743f8270276c0adb3dfa77ccd65b377ee1',
- 'size_bytes': 12730784,
- 'generation': 1765411214956057,
+ 'object_name': 'Mac_arm64/clangd-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '3b7ff06ccd41b0a1fb165e182a35bcd74ae49172f1720cd276eb5feac0e3dd9f',
+ 'size_bytes': 12816980,
+ 'generation': 1772218401144631,
'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clangd',
},
{
- 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '64aad877a3a74b9ae3a000bea9f3025011c0f246e58c64eb7a3ff93db4fccf11',
- 'size_bytes': 1968060,
- 'generation': 1765411215019503,
+ 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '67148555d00427a3eaa8aeefb8c4c4e1271d585315bdbf0d28d20fd78957e309',
+ 'size_bytes': 1988008,
+ 'generation': 1772218401224240,
'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_coverage_tools',
},
{
- 'object_name': 'Mac_arm64/llvmobjdump-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '07ae49a9d0bca1909f870cf2bc8af2eeb8da57ce2153385c5fdf5a009c946d6e',
- 'size_bytes': 5373248,
- 'generation': 1765411214948454,
+ 'object_name': 'Mac_arm64/llvmobjdump-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': 'a31075e7f46ed77c62ecec424722bec8335ef306a4701660f19b713229c49afa',
+ 'size_bytes': 5421552,
+ 'generation': 1772218401116635,
'condition': 'host_os == "mac" and host_cpu == "arm64"',
},
{
- 'object_name': 'Win/clang-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '7c584196707e592fb4e4bd14cf2bb1399be250e666030aa15ba3482ca5a1adab',
- 'size_bytes': 48674988,
- 'generation': 1765411224454962,
+ 'object_name': 'Win/clang-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': 'f2c9d2a8accf7ed2e3c19b3f67fb94e60365411a536fb9d71391dd2d4e7e14bb',
+ 'size_bytes': 49546756,
+ 'generation': 1772218410442709,
'condition': 'host_os == "win"',
},
{
- 'object_name': 'Win/clang-tidy-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': 'e848dddd208e626afac825d740b76fd9e91af627dc8fb6293bd3297e06cadc0f',
- 'size_bytes': 14269616,
- 'generation': 1765411224494029,
+ 'object_name': 'Win/clang-tidy-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '99e00bbb404557db32df4e7a183ac520c526fe0e143ca380dfb2d0c33a2025b5',
+ 'size_bytes': 14462056,
+ 'generation': 1772218410470169,
'condition': 'host_os == "win" and checkout_clang_tidy',
},
{
- 'object_name': 'Win/clang-win-runtime-library-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '073eaf43b1897500a1a826851b8cce43ac04cf395f1e05eb14f273102221b165',
- 'size_bytes': 2526948,
- 'generation': 1765411231670451,
+ 'object_name': 'Win/clang-win-runtime-library-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '62e9c022223e0fa6ff855c25dcee524818f04c570127ed7e74895b320a10100a',
+ 'size_bytes': 2597584,
+ 'generation': 1772218417651221,
'condition': 'checkout_win and not host_os == "win"',
},
{
- 'object_name': 'Win/clangd-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '6c944d6d1f3627b30661a977ebaf28dfdb28a80cab3a2b4c0297447e60360f58',
- 'size_bytes': 14680960,
- 'generation': 1765411224477368,
+ 'object_name': 'Win/clangd-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '6a3ab3afb8d2e7f4a04eecd8073993586665ede3929308a0fa0119d9382b1e2d',
+ 'size_bytes': 14887416,
+ 'generation': 1772218410483998,
'condition': 'host_os == "win" and checkout_clangd',
},
{
- 'object_name': 'Win/llvm-code-coverage-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '4552393e501da36109e4d7ea6c5a8582c361c6812d00a641d5f19c6f3db804f3',
- 'size_bytes': 2398400,
- 'generation': 1765411224579579,
+ 'object_name': 'Win/llvm-code-coverage-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '4bd610d2fbcc6e2bd8fd2df8d8c23a915373f8c987701d295314e8b33d457075',
+ 'size_bytes': 2479300,
+ 'generation': 1772218410570017,
'condition': 'host_os == "win" and checkout_clang_coverage_tools',
},
{
- 'object_name': 'Win/llvmobjdump-llvmorg-22-init-17020-gbd1bd178-2.tar.xz',
- 'sha256sum': '0fee07e9de315cfeea0802a6a411e1111217fd57b44645394509e9a4ecfe361f',
- 'size_bytes': 5749012,
- 'generation': 1765411224494520,
+ 'object_name': 'Win/llvmobjdump-llvmorg-23-init-5669-g8a0be0bc-1.tar.xz',
+ 'sha256sum': '2ee77b6240b76353840439b38e7009d9f1fb8e97930dbbef3b1ff805ee981c5f',
+ 'size_bytes': 5846184,
+ 'generation': 1772218410487302,
'condition': '(checkout_linux or checkout_mac or checkout_android) and host_os == "win"',
},
]
@@ -298,31 +298,31 @@ deps = {
'bucket': 'chromium-browser-clang',
'objects': [
{
- 'object_name': 'Linux_x64/rust-toolchain-a4cfac7093a1c1c7fbdb6bc75d6b6dc4d385fc69-2-llvmorg-22-init-17020-gbd1bd178.tar.xz',
- 'sha256sum': '5ca1ca6268ce2dcfe878c623f0f49e4eba983bb36e79ceddb9c745ef48efc933',
- 'size_bytes': 140484296,
- 'generation': 1765411196238822,
+ 'object_name': 'Linux_x64/rust-toolchain-6f54d591c3116ee7f8ce9321ddeca286810cc142-7-llvmorg-23-init-5669-g8a0be0bc.tar.xz',
+ 'sha256sum': 'afbb00d27b8f9f65e6a754fb21e80dff084993285cf7f3c0020dece59c5bd67a',
+ 'size_bytes': 271641712,
+ 'generation': 1773769777991797,
'condition': 'host_os == "linux" and non_git_source',
},
{
- 'object_name': 'Mac/rust-toolchain-a4cfac7093a1c1c7fbdb6bc75d6b6dc4d385fc69-2-llvmorg-22-init-17020-gbd1bd178.tar.xz',
- 'sha256sum': '26f095b3217e9619d6172bdc4b7329e51ebe2fb7508a313b8c3a6fce21416170',
- 'size_bytes': 135435424,
- 'generation': 1765411198122573,
+ 'object_name': 'Mac/rust-toolchain-6f54d591c3116ee7f8ce9321ddeca286810cc142-7-llvmorg-23-init-5669-g8a0be0bc.tar.xz',
+ 'sha256sum': '70b86e82f1cb55777d40b5828ddcb80afea49510085290424b61251d22e9f959',
+ 'size_bytes': 259443552,
+ 'generation': 1773769780408342,
'condition': 'host_os == "mac" and host_cpu == "x64"',
},
{
- 'object_name': 'Mac_arm64/rust-toolchain-a4cfac7093a1c1c7fbdb6bc75d6b6dc4d385fc69-2-llvmorg-22-init-17020-gbd1bd178.tar.xz',
- 'sha256sum': '64d5fb112d809b1c4a047ef7bd99e88534de470b82d86ce6ad729b12c5611488',
- 'size_bytes': 122796960,
- 'generation': 1765411200047613,
+ 'object_name': 'Mac_arm64/rust-toolchain-6f54d591c3116ee7f8ce9321ddeca286810cc142-7-llvmorg-23-init-5669-g8a0be0bc.tar.xz',
+ 'sha256sum': 'e2e19684f31b653ce9238f6303aec22576085528c294757a7157d4ab5e1926dc',
+ 'size_bytes': 242768940,
+ 'generation': 1773769782590875,
'condition': 'host_os == "mac" and host_cpu == "arm64"',
},
{
- 'object_name': 'Win/rust-toolchain-a4cfac7093a1c1c7fbdb6bc75d6b6dc4d385fc69-2-llvmorg-22-init-17020-gbd1bd178.tar.xz',
- 'sha256sum': 'a3cf74c96f7959a8507786665c23a2fb8ac67f107279ef888a8d3da066c0bca5',
- 'size_bytes': 198058716,
- 'generation': 1765411201950690,
+ 'object_name': 'Win/rust-toolchain-6f54d591c3116ee7f8ce9321ddeca286810cc142-7-llvmorg-23-init-5669-g8a0be0bc.tar.xz',
+ 'sha256sum': '37dd250549fed5a9765c3a88e3487409189e0c9c63b691fc77daa0b5f214bced',
+ 'size_bytes': 409536908,
+ 'generation': 1773769784773096,
'condition': 'host_os == "win"',
},
],
@@ -331,15 +331,15 @@ deps = {
'src/third_party/clang-format/script':
'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git@c2725e0622e1a86d55f14514f2177a39efea4a0e',
'src/third_party/compiler-rt/src':
- 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt.git@2a9f44874fa9d4e3cfb9c88cfe984997053008f2',
+ 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt.git@bb7645f5e11c9c1d719a890fcb09ccfaaa14580f',
'src/third_party/libc++/src':
'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git@7ab65651aed6802d2599dcb7a73b1f82d5179d05',
'src/third_party/libc++abi/src':
'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git@8f11bb1d4438d0239d0dfc1bd9456a9f31629dda',
'src/third_party/llvm-libc/src':
- 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libc.git@e9f0fd9932428fc109b848892050daadc2d91cc9',
+ 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libc.git@adccc443070c58badd6414fd9a4380ca8c78e7c4',
'src/third_party/libunwind/src':
- 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git@a726f5347e1e423d59f5c2d434b6a29265c43051',
+ 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git@db838d918570d4e381ecf9f5cc70a0098c9c2cd6',
'src/third_party/test_fonts/test_fonts': {
'dep_type': 'gcs',
@@ -381,7 +381,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_system_sdk/public',
- 'version': 'Pfb3HDUW_uRir_VVTCYkGhf6bnPPF55NUJO2WXOxIe0C',
+ 'version': 'EpgkrtsLblLuw0BrsWCF0h_njBzIZsBNDxQ5VtA4s2UC',
},
],
'condition': 'checkout_android and non_git_source',
@@ -402,7 +402,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_build_tools/aapt2',
- 'version': 's6POXpUalcnuPehDsORiojCpgbNXT4LYq7DVUYgsfxEC',
+ 'version': 'gsaUgZUqoyD0XG1E9-xesSWknHZINEuS00iSEncvlE0C',
},
],
'condition': 'checkout_android',
@@ -435,7 +435,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_build_tools/error_prone',
- 'version': 'vNPU2aqNbmnmcCMUnT5QhVROLmdXRj7FOeYt85YWxEEC',
+ 'version': 'ax2FOQ16-lz2R1o1P-xDhd2KOAFoY1wjZ-lQgZkygUYC',
},
],
'condition': 'checkout_android',
@@ -457,7 +457,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_build_tools/lint',
- 'version': '9AgFghC99R1A3IPlL_OqHWtpnYHvS9mujd700QWghPIC',
+ 'version': 'lBgjWB8NdI2Mhnsy0SHkCyCZ3pbO1Qe4Zk0JZHs3yAIC',
},
],
'condition': 'checkout_android and non_git_source',
@@ -469,7 +469,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_build_tools/nullaway',
- 'version': 'O_Zf07-x9h-o0nBYfdu032C5xXGXwCAD1lwZG1ZS9QEC',
+ 'version': 'rYm-c7W2XUUzeDYveLTl3YmrIqc483bjo6OB5rpQUrIC',
},
],
'condition': 'checkout_android and non_git_source',
@@ -488,11 +488,11 @@ deps = {
},
'src/third_party/boringssl/src':
- 'https://boringssl.googlesource.com/boringssl.git@41b290f319b3f6f7cc8a44c47f29b8dd27ce21c0',
+ 'https://boringssl.googlesource.com/boringssl.git@8dce4fd20ab7e768c0a5103edc1d8cb7e54366ba',
'src/third_party/breakpad/breakpad':
- 'https://chromium.googlesource.com/breakpad/breakpad.git@bcf7b6f1596e52a8ff0bbd0c9e32a321380b3954',
+ 'https://chromium.googlesource.com/breakpad/breakpad.git@8be0e3114685fcc1589561067282edf75ea1259a',
'src/third_party/catapult':
- 'https://chromium.googlesource.com/catapult.git@c9916a593bec75bdaa231475af0e8740f857bf10',
+ 'https://chromium.googlesource.com/catapult.git@5a34891efa6e41c8aca8842386b8ee528963ffdf',
'src/third_party/ced/src': {
'url': 'https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git@ba412eaaacd3186085babcd901679a48863c7dd5',
},
@@ -505,13 +505,13 @@ deps = {
'src/third_party/crc32c/src':
'https://chromium.googlesource.com/external/github.com/google/crc32c.git@d3d60ac6e0f16780bcfcc825385e1d338801a558',
'src/third_party/depot_tools':
- 'https://chromium.googlesource.com/chromium/tools/depot_tools.git@fb0b652edba70f5c4ac867f3beca9e535f905b4c',
+ 'https://chromium.googlesource.com/chromium/tools/depot_tools.git@ce1ebad2c35c9387186f01d77edeea28a254c955',
'src/third_party/ffmpeg':
- 'https://chromium.googlesource.com/chromium/third_party/ffmpeg.git@fd8d327732d4c4a3ef831f4de49635e9528cb73e',
+ 'https://chromium.googlesource.com/chromium/third_party/ffmpeg.git@b5e18fb9da84e26ceef30d4e4886696bf59337c0',
'src/third_party/flatbuffers/src':
'https://chromium.googlesource.com/external/github.com/google/flatbuffers.git@a86afae9399bbe631d1ea0783f8816e780e236cc',
'src/third_party/grpc/src': {
- 'url': 'https://chromium.googlesource.com/external/github.com/grpc/grpc.git@ae8671efbd172bf80b8279903619b658ffd2486e',
+ 'url': 'https://chromium.googlesource.com/external/github.com/grpc/grpc.git@5e9fb9cbfb12a10ff9c16fbc360328d224b838d6',
},
# Used for embedded builds. CrOS & Linux use the system version.
'src/third_party/fontconfig/src': {
@@ -519,14 +519,14 @@ deps = {
'condition': 'checkout_linux',
},
'src/third_party/freetype/src':
- 'https://chromium.googlesource.com/chromium/src/third_party/freetype2.git@341049a95bacfc5debf6c9daf537b7acec27f3dd',
+ 'https://chromium.googlesource.com/chromium/src/third_party/freetype2.git@99b479dc34728936b006679a31e12b8cf432fc55',
'src/third_party/harfbuzz-ng/src':
- 'https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git@fa2908bf16d2ccd6623f4d575455fea72a1a722b',
+ 'https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git@6f4c5cec306d31e6822303f5ba248a14293d588e',
'src/third_party/google_benchmark/src': {
'url': 'https://chromium.googlesource.com/external/github.com/google/benchmark.git@188e8278990a9069ffc84441cb5a024fd0bede37',
},
'src/third_party/libpfm4/src':
- Var('chromium_git') + '/external/git.code.sf.net/p/perfmon2/libpfm4.git' + '@' + '964baf9d35d5f88d8422f96d8a82c672042e7064',
+ Var('chromium_git') + '/external/git.code.sf.net/p/perfmon2/libpfm4.git' + '@' + '41878eab48c50bb9ec5f741a013e971bb5a9dff2',
# WebRTC-only dependency (not present in Chromium).
'src/third_party/gtest-parallel':
'https://chromium.googlesource.com/external/github.com/google/gtest-parallel@cd488bdedc1d2cffb98201a17afc1b298b0b90f1',
@@ -537,7 +537,7 @@ deps = {
'src/third_party/googletest/src':
'https://chromium.googlesource.com/external/github.com/google/googletest.git@4fe3307fb2d9f86d19777c7eb0e4809e9694dde7',
'src/third_party/icu': {
- 'url': 'https://chromium.googlesource.com/chromium/deps/icu.git@a86a32e67b8d1384b33f8fa48c83a6079b86f8cd',
+ 'url': 'https://chromium.googlesource.com/chromium/deps/icu.git@b4aae6832c06df9d538d41b249403cf0678f16b4',
},
'src/third_party/jdk/current': {
'packages': [
@@ -573,7 +573,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/kotlin_stdlib',
- 'version': 'pzmoMtwHT1hYqAVIaEEBdTjWfGqwltLK6Fvr4EaVP3UC',
+ 'version': 'uq9bdsIxS9Is_mAZr9OWBymcLtxheKkgzeUSLuZKhJUC',
},
],
'condition': 'checkout_android',
@@ -584,7 +584,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/kotlinc',
- 'version': 'swjrmkJ-TygIVaYOBj227R8b8-K9Zav25VJA6XSLqwsC',
+ 'version': 'RcyJsRii1TkItQ8HjsvzQnXGvIZ0FJvpF4bxYeFr7qAC',
},
],
'condition': 'checkout_android',
@@ -593,29 +593,29 @@ deps = {
'src/third_party/libFuzzer/src':
'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt/lib/fuzzer.git@bea408a6e01f0f7e6c82a43121fe3af4506c932e',
'src/third_party/fuzztest/src':
- 'https://chromium.googlesource.com/external/github.com/google/fuzztest.git@a72f099a943c257afe8d4d87c10a22b23e17786d',
+ 'https://chromium.googlesource.com/external/github.com/google/fuzztest.git@dc327134097700121e4ecd6e1d54d1d0a832a18d',
'src/third_party/libjpeg_turbo':
- 'https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git@6bb85251a8382b5e07f635a981ac685cc5ab5053',
+ 'https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git@d1f5f2393e0d51f840207342ae86e55a86443288',
'src/third_party/libsrtp':
- 'https://chromium.googlesource.com/chromium/deps/libsrtp.git@a52756acb1c5e133089c798736dd171567df11f5',
+ 'https://chromium.googlesource.com/chromium/deps/libsrtp.git@e8383771af8aa4096f5bcfe3743a5ea128f88a9a',
'src/third_party/dav1d/libdav1d':
- 'https://chromium.googlesource.com/external/github.com/videolan/dav1d.git@b546257f770768b2c88258c533da38b91a06f737',
+ 'https://chromium.googlesource.com/external/github.com/videolan/dav1d.git@d69235dd804b24c04ed05639cffcc912cd6cfd75',
'src/third_party/libaom/source/libaom':
- 'https://aomedia.googlesource.com/aom.git@e3d6ba6e5e9888a7ca69eb114c6eb913275f253c',
+ 'https://aomedia.googlesource.com/aom.git@f3dddebddd0dba76fbfb97b96b6336bcf1d3a30c',
'src/third_party/libgav1/src':
Var('chromium_git') + '/codecs/libgav1.git' + '@' + '40f58ed32ff39071c3f2a51056dbc49a070af0dc',
'src/third_party/libunwindstack': {
- 'url': 'https://chromium.googlesource.com/chromium/src/third_party/libunwindstack.git@0928ad0d25e4af07c8be5ab06d0ca584f9f4ceb5',
+ 'url': 'https://chromium.googlesource.com/chromium/src/third_party/libunwindstack.git@333fcafb91bd3830c5ef814c071ff73df9cdc976',
'condition': 'checkout_android',
},
'src/third_party/perfetto':
- Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + '698c3b289159cf14ac110e21d5ed424c8a9f35b4',
+ Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + '40b1342aa7bd47d9c963c3617fd98ec1551528f9',
'src/third_party/protobuf-javascript/src':
Var('chromium_git') + '/external/github.com/protocolbuffers/protobuf-javascript' + '@' + 'e6d763860001ba1a76a63adcff5efb12b1c96024',
'src/third_party/libvpx/source/libvpx':
- 'https://chromium.googlesource.com/webm/libvpx.git@b0be221b6811038e1579a4281241a55549d7611d',
+ 'https://chromium.googlesource.com/webm/libvpx.git@3fce57ecc905d95a4619f33d09851d68c5a88663',
'src/third_party/libyuv':
- 'https://chromium.googlesource.com/libyuv/libyuv.git@022efdb0b771f7353741dbe360b8bef4e0a874eb',
+ 'https://chromium.googlesource.com/libyuv/libyuv.git@30809ff64a9ca5e45f86439c0d474c2d3eef3d05',
'src/third_party/lss': {
'url': 'https://chromium.googlesource.com/linux-syscall-support.git@29164a80da4d41134950d76d55199ea33fbb9613',
'condition': 'checkout_android or checkout_linux',
@@ -631,20 +631,20 @@ deps = {
# Used by boringssl.
'src/third_party/nasm': {
- 'url': 'https://chromium.googlesource.com/chromium/deps/nasm.git@af5eeeb054bebadfbb79c7bcd100a95e2ad4525f'
+ 'url': 'https://chromium.googlesource.com/chromium/deps/nasm.git@45252858722aad12e545819b2d0f370eb865431b'
},
'src/third_party/openh264/src':
'https://chromium.googlesource.com/external/github.com/cisco/openh264@652bdb7719f30b52b08e506645a7322ff1b2cc6f',
'src/third_party/re2/src':
- 'https://chromium.googlesource.com/external/github.com/google/re2.git@e7aec5985072c1dbe735add802653ef4b36c231a',
+ 'https://chromium.googlesource.com/external/github.com/google/re2.git@972a15cedd008d846f1a39b2e88ce48d7f166cbd',
'src/third_party/r8/cipd': {
'packages': [
{
'package': 'chromium/third_party/r8',
- 'version': 'TXlzDJEcatuD9PYDocJSKkHs3M9Y2S_UV-gOLe3PGh8C',
+ 'version': '8ZRb6CCpZTU5dSpQyDlbusalGCjWV0sVSGTq_0Js3mcC',
},
],
'condition': 'checkout_android',
@@ -657,7 +657,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/r8',
- 'version': 'a4fVqbIycCDqs1714SLRqxEdz6P-sH-z1QT_eeeF0PcC',
+ 'version': '8ZRb6CCpZTU5dSpQyDlbusalGCjWV0sVSGTq_0Js3mcC',
},
],
'condition': 'checkout_android',
@@ -668,7 +668,7 @@ deps = {
'condition': 'checkout_android',
},
'src/tools':
- 'https://chromium.googlesource.com/chromium/src/tools@88162e4e0e83c5dd6bf391dac5fb0afa59be6960',
+ 'https://chromium.googlesource.com/chromium/src/tools@f363a79871a91f36322e845e3134e2f04e1fc18a',
'src/third_party/espresso': {
'packages': [
@@ -707,7 +707,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/androidx',
- 'version': 'WX3ELG4TgH2nEIDT11VHoWCYzpSsS-BVAZwPnNs34AUC',
+ 'version': 'xbJffE4gDOA4g5njwbpWZtgk4ouGMWOHiqq2ymCZ2ggC',
},
],
'condition': 'checkout_android and non_git_source',
@@ -718,7 +718,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_build_tools/manifest_merger',
- 'version': 'OWV7CA1NXDbFTkcr9MBA__4sBlYfX-ORWPDBh8rSClkC',
+ 'version': '5JSVccMXNkpeH9lpydgxJ3QCoNpBC5yvil7NvdsqUasC',
},
],
'condition': 'checkout_android',
@@ -728,8 +728,8 @@ deps = {
'src/third_party/android_sdk/public': {
'packages': [
{
- 'package': 'chromium/third_party/android_sdk/public/build-tools/36.0.0',
- 'version': 'y3EsZLg4bxPmpW0oYsAHylywNyMnIwPS3kh1VbQLAFAC',
+ 'package': 'chromium/third_party/android_sdk/public/build-tools/36.1.0',
+ 'version': '-jLl4Ibk_WmgTsZaP-ueQwZDhBwkWf5BsQ4UNrkzXF0C',
},
{
'package': 'chromium/third_party/android_sdk/public/emulator',
@@ -740,12 +740,12 @@ deps = {
'version': 'qTD9QdBlBf3dyHsN1lJ0RH6AhHxR42Hmg2Ih-Vj4zIEC'
},
{
- 'package': 'chromium/third_party/android_sdk/public/platforms/android-36',
- 'version': '_YHemUrK49JrE7Mctdf5DDNOHu1VKBx_PTcWnZ-cbOAC',
+ 'package': 'chromium/third_party/android_sdk/public/platforms/android-36.1',
+ 'version': 'gxwLT70eR_ObwZJzKK8UIS-N549yAocNTmc0JHgO7gUC',
},
{
- 'package': 'chromium/third_party/android_sdk/public/cmdline-tools',
- 'version': 'gekOVsZjseS1w9BXAT3FsoW__ByGDJYS9DgqesiwKYoC',
+ 'package': 'chromium/third_party/android_sdk/public/cmdline-tools/linux',
+ 'version': 'LZa8CWNVWS6UUQgQ7IJdFCqRV1Bmx2-alTNqEDJpJkcC',
},
],
'condition': 'checkout_android',
@@ -786,13 +786,13 @@ deps = {
},
'src/third_party/tflite/src':
- Var('chromium_git') + '/external/github.com/tensorflow/tensorflow.git' + '@' + '48401a9c25ddb7cb882074d48c79f91d1f6a89e0',
+ Var('chromium_git') + '/external/github.com/tensorflow/tensorflow.git' + '@' + '8fd527849069a358ad6c2980b9a9b34a53c53717',
'src/third_party/turbine/cipd': {
'packages': [
{
'package': 'chromium/third_party/turbine',
- 'version': 'nJDryxCoihRuUxDq-oC-PbBAn1u8HeKRHU44sn9Cd7MC',
+ 'version': '0A4lFRLjqycR4-EvoBz1w2FxPEzzG94cFvwu8v39DRYC',
},
],
'condition': 'checkout_android',
@@ -800,7 +800,7 @@ deps = {
},
'src/third_party/zstd/src': {
- 'url': Var('chromium_git') + '/external/github.com/facebook/zstd.git' + '@' + 'ae9f20ca2716f2605822ca375995b7d876389b64',
+ 'url': Var('chromium_git') + '/external/github.com/facebook/zstd.git' + '@' + '3ae099b48dfcfe02b1b3ba81ab85457f8a922e9f',
'condition': 'checkout_android',
},
@@ -808,15 +808,15 @@ deps = {
'packages': [
{
'package': 'infra/tools/luci/cas/${{platform}}',
- 'version': 'git_revision:808a00437f24bb404c09608ad8bf3847a78de369',
+ 'version': 'git_revision:8cb5bd940d5f726f8a538212b2287987fcadf837',
},
{
'package': 'infra/tools/luci/isolate/${{platform}}',
- 'version': 'git_revision:808a00437f24bb404c09608ad8bf3847a78de369',
+ 'version': 'git_revision:8cb5bd940d5f726f8a538212b2287987fcadf837',
},
{
'package': 'infra/tools/luci/swarming/${{platform}}',
- 'version': 'git_revision:808a00437f24bb404c09608ad8bf3847a78de369',
+ 'version': 'git_revision:8cb5bd940d5f726f8a538212b2287987fcadf837',
}
],
'dep_type': 'cipd',
@@ -842,29 +842,29 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_deps/autorolled',
- 'version': 'LStkoCV2NKgZ1hqhnILaH4soxZtZa2-8RG67-JxAVUsC',
+ 'version': 'ioujkn6x8xwFvfYkiQGrRb9lX4Khn3Thhv3nsoN6lrQC',
},
],
'condition': 'checkout_android and non_git_source',
'dep_type': 'cipd',
},
'src/third_party/pthreadpool/src':
- Var('chromium_git') + '/external/github.com/google/pthreadpool.git' + '@' + 'd90cd6f1493e09d12c407243f7f331a8cda55efb',
+ Var('chromium_git') + '/external/github.com/google/pthreadpool.git' + '@' + '9003ee6c137cea3b94161bd5c614fb43be523ee1',
'src/third_party/xnnpack/src':
- Var('chromium_git') + '/external/github.com/google/XNNPACK.git' + '@' + '4574c4d9b00703c15f2218634ddf101597b22b18',
+ Var('chromium_git') + '/external/github.com/google/XNNPACK.git' + '@' + '97f3177fd836fff03b48a886bb130591866ad7ca',
'src/third_party/farmhash/src':
Var('chromium_git') + '/external/github.com/google/farmhash.git' + '@' + '816a4ae622e964763ca0862d9dbd19324a1eaf45',
'src/third_party/ruy/src':
- Var('chromium_git') + '/external/github.com/google/ruy.git' + '@' + '576e020f06334118994496b45f9796ed7fda3280',
+ Var('chromium_git') + '/external/github.com/google/ruy.git' + '@' + '2af88863614a8298689cc52b1a47b3fcad7be835',
'src/third_party/cpuinfo/src':
- Var('chromium_git') + '/external/github.com/pytorch/cpuinfo.git' + '@' + '0fea7f5f88243ee354df0e0082b5f27d13fc9551',
+ Var('chromium_git') + '/external/github.com/pytorch/cpuinfo.git' + '@' + '7607ca500436b37ad23fb8d18614bec7796b68a7',
'src/third_party/eigen3/src':
- Var('chromium_git') + '/external/gitlab.com/libeigen/eigen.git' + '@' + '251bff28859af2ed2d5bdf14034175f03cafffc7',
+ Var('chromium_git') + '/external/gitlab.com/libeigen/eigen.git' + '@' + '002229ce470065878afb7c2f6f96d22c9a9b7ba0',
'src/third_party/fp16/src':
Var('chromium_git') + '/external/github.com/Maratyszcza/FP16.git' + '@' + '3d2de1816307bac63c16a297e8c4dc501b4076df',
@@ -1014,17 +1014,6 @@ deps = {
'dep_type': 'cipd',
},
- 'src/third_party/android_deps/cipd/libs/org_jetbrains_kotlinx_kotlinx_coroutines_guava': {
- 'packages': [
- {
- 'package': 'chromium/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_guava',
- 'version': 'version:2@1.8.1.cr2',
- },
- ],
- 'condition': 'checkout_android and non_git_source',
- 'dep_type': 'cipd',
- },
-
'src/third_party/android_deps/cipd/libs/org_jsoup_jsoup': {
'packages': [
{
@@ -1156,7 +1145,6 @@ hooks = [
'action': [ 'python3',
'src/third_party/depot_tools/download_from_google_storage.py',
'--no_resume',
- '--no_auth',
'--bucket', 'chromium-browser-clang/ciopfs',
'-s', 'src/build/ciopfs.sha1',
]
@@ -1212,7 +1200,6 @@ hooks = [
'action': [ 'python3',
'src/third_party/depot_tools/download_from_google_storage.py',
'--no_resume',
- '--no_auth',
'--bucket', 'chromium-browser-clang',
'-s', 'src/tools/clang/dsymutil/bin/dsymutil.arm64.sha1',
'-o', 'src/tools/clang/dsymutil/bin/dsymutil',
@@ -1225,7 +1212,6 @@ hooks = [
'action': [ 'python3',
'src/third_party/depot_tools/download_from_google_storage.py',
'--no_resume',
- '--no_auth',
'--bucket', 'chromium-browser-clang',
'-s', 'src/tools/clang/dsymutil/bin/dsymutil.x64.sha1',
'-o', 'src/tools/clang/dsymutil/bin/dsymutil',
@@ -1239,7 +1225,6 @@ hooks = [
'action': [ 'python3',
'src/third_party/depot_tools/download_from_google_storage.py',
'--no_resume',
- '--no_auth',
'--bucket', 'chromium-browser-clang/rc',
'-s', 'src/build/toolchain/win/rc/win/rc.exe.sha1',
],
@@ -1251,7 +1236,6 @@ hooks = [
'action': [ 'python3',
'src/third_party/depot_tools/download_from_google_storage.py',
'--no_resume',
- '--no_auth',
'--bucket', 'chromium-browser-clang/rc',
'-s', 'src/build/toolchain/win/rc/mac/rc.sha1',
],
@@ -1263,7 +1247,6 @@ hooks = [
'action': [ 'python3',
'src/third_party/depot_tools/download_from_google_storage.py',
'--no_resume',
- '--no_auth',
'--bucket', 'chromium-browser-clang/rc',
'-s', 'src/build/toolchain/win/rc/linux64/rc.sha1',
],
@@ -1275,7 +1258,6 @@ hooks = [
'--directory',
'--recursive',
'--num_threads=10',
- '--no_auth',
'--quiet',
'--bucket', 'chromium-webrtc-resources',
'src/resources'],
@@ -1370,6 +1352,7 @@ include_rules = [
"+absl/cleanup/cleanup.h",
"+absl/container",
"-absl/container/fixed_array.h",
+ "+absl/crc",
"+absl/functional/any_invocable.h",
"+absl/functional/bind_front.h",
"+absl/memory/memory.h",
@@ -1391,7 +1374,7 @@ include_rules = [
]
specific_include_rules = {
- "webrtc_lib_link_test\.cc": [
+ "webrtc_lib_link_test\\.cc": [
"+media/engine",
"+modules/audio_device",
"+modules/audio_processing",
diff --git a/OWNERS b/OWNERS
index bfcca980eb8..14b39cf614e 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,6 +1,6 @@
-henrika@webrtc.org
+danilchap@webrtc.org
+eshr@webrtc.org
hta@webrtc.org
-mflodman@webrtc.org
stefan@webrtc.org
tommi@webrtc.org
include OWNERS_INFRA #{Owners for infra and repo related files}
diff --git a/OWNERS_INFRA b/OWNERS_INFRA
index 0a192b9c363..3c7098037d0 100644
--- a/OWNERS_INFRA
+++ b/OWNERS_INFRA
@@ -1,20 +1,21 @@
-#Owners for infra and repo related files
+# Owners for infra and repo related files
per-file .gitignore=*
+per-file AUTHORS=*
+per-file DEPS=*
+per-file WATCHLISTS=*
+per-file whitespace.txt=*
+
per-file .gn=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
per-file BUILD.gn=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
per-file .../BUILD.gn=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
per-file *.gni=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
per-file .../*.gni=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
+
per-file .vpython=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
per-file .vpython3=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
-per-file AUTHORS=*
-per-file DEPS=*
per-file pylintrc=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
-per-file .rustfmt.toml=boivie@webrtc.org,mbonadei@webrtc.org,jleconte@webrtc.org
per-file pylintrc_old_style=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
-per-file WATCHLISTS=*
-per-file whitespace.txt=*
-per-file native-api.md=mbonadei@webrtc.org
-per-file ....lua=titovartem@webrtc.org
per-file .style.yapf=jleconte@webrtc.org
per-file *.py=mbonadei@webrtc.org,jansson@webrtc.org,jleconte@webrtc.org
+
+per-file .rustfmt.toml=boivie@webrtc.org,mbonadei@webrtc.org,jleconte@webrtc.org
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index fa6888cda98..60a78a5e4be 100755
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -662,6 +662,23 @@ def CheckGnGen(input_api, output_api):
return []
+def CheckDeps(input_api, output_api):
+ """Runs checkdeps """
+ repo_root = input_api.change.RepositoryRoot()
+ checkdeps_path = input_api.os_path.join(repo_root, 'buildtools',
+ 'checkdeps')
+ with _AddToPath(checkdeps_path):
+ import checkdeps
+
+ deps_checker = checkdeps.DepsChecker(input_api.PresubmitLocalPath())
+ deps_checker.CheckDirectory(input_api.PresubmitLocalPath())
+ results = []
+ if deps_checker.results_formatter.GetResults():
+ results.append(
+ output_api.PresubmitError('\n'.join(
+ deps_checker.results_formatter.GetResults())))
+ return results
+
def CheckUnwantedDependencies(input_api, output_api, source_file_filter):
"""Runs checkdeps on #include statements added in this
change. Breaking - rules is an error, breaking ! rules is a
@@ -815,10 +832,7 @@ def Join(*args):
'process_perf_results_test.py',
]
- test_directories = [
- input_api.PresubmitLocalPath(),
- Join('rtc_tools', 'py_event_log_analyzer'),
- ] + [
+ test_directories = [input_api.PresubmitLocalPath()] + [
root for root, _, files in os.walk(Join('tools_webrtc')) if any(
f.endswith('_test.py') and f not in excluded_files for f in files)
]
@@ -1000,6 +1014,7 @@ def CommonChecks(input_api, output_api):
results.extend(
input_api.canned_checks.CheckPatchFormatted(input_api, output_api))
results.extend(CheckNativeApiHeaderChanges(input_api, output_api))
+ results.extend(CheckDeps(input_api, output_api))
results.extend(
CheckNoIOStreamInHeaders(input_api,
output_api,
diff --git a/README.chromium b/README.chromium
index a97e58fa5cb..b4c19c0575d 100644
--- a/README.chromium
+++ b/README.chromium
@@ -6,6 +6,7 @@ License: BSD-3-Clause
License File: LICENSE
Shipped: yes
Security Critical: yes
+Update Mechanism: Manual
Mitigated: CVE-2022-2294
CVE-2022-2294: Fixed by https://crbug.com/40060120.
diff --git a/WATCHLISTS b/WATCHLISTS
index 3c35dd4be7b..7b38c2084f3 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -102,76 +102,41 @@
'WATCHLISTS': {
'this_file': [],
'all_webrtc': [],
- 'root_files': ['peah@webrtc.org',
- 'qiang.lu@intel.com',
- 'yujie.mao@webrtc.org'],
+ 'root_files': ['peah@webrtc.org'],
'build_files': ['mbonadei@webrtc.org'],
- 'common_audio': ['alessiob@webrtc.org',
- 'audio-team@agora.io',
- 'peah@webrtc.org',
+ 'common_audio': ['peah@webrtc.org',
'saza@webrtc.org'],
'audio': ['peah@webrtc.org'],
'api': ['hta@webrtc.org',
'peah@webrtc.org'],
'base': ['hta@webrtc.org'],
- 'call': ['mflodman@webrtc.org',
- 'stefan@webrtc.org'],
- 'video': ['mflodman@webrtc.org',
- 'stefan@webrtc.org',
- 'video-team@agora.io',
- 'yujie.mao@webrtc.org',
- 'zhengzhonghou@agora.io'],
- 'video_capture': ['mflodman@webrtc.org',
- 'perkj@webrtc.org',
- 'sdk-team@agora.io',
- 'zhengzhonghou@agora.io'],
- 'audio_device': ['audio-team@agora.io',
- 'henrika@webrtc.org',
+ 'call': ['stefan@webrtc.org'],
+ 'video': ['stefan@webrtc.org'],
+ 'video_capture': ['perkj@webrtc.org'],
+ 'audio_device': ['henrika@webrtc.org',
'peah@webrtc.org',
- 'saza@webrtc.org',
- 'sdk-team@agora.io'],
- 'audio_coding': ['alessiob@webrtc.org',
- 'audio-team@agora.io',
- 'henrik.lundin@webrtc.org',
+ 'saza@webrtc.org'],
+ 'audio_coding': ['henrik.lundin@webrtc.org',
'peah@webrtc.org',
'saza@webrtc.org'],
- 'neteq': ['alessiob@webrtc.org',
- 'audio-team@agora.io',
- 'henrik.lundin@webrtc.org',
+ 'neteq': ['henrik.lundin@webrtc.org',
'saza@webrtc.org'],
- 'audio_mixer': ['aleloi@webrtc.org',
- 'henrik.lundin@webrtc.org',
+ 'audio_mixer': ['henrik.lundin@webrtc.org',
'peah@webrtc.org',
'saza@webrtc.org'],
- 'audio_processing': ['alessiob@webrtc.org',
- 'audio-team@agora.io',
- 'henrik.lundin@webrtc.org',
+ 'audio_processing': ['henrik.lundin@webrtc.org',
'peah@webrtc.org',
'saza@webrtc.org'],
- 'video_coding': ['mflodman@webrtc.org',
- 'stefan@webrtc.org',
- 'video-team@agora.io',
- 'zhengzhonghou@agora.io'],
- 'bitrate_controller': ['mflodman@webrtc.org',
- 'stefan@webrtc.org',
- 'zhuangzesen@agora.io'],
+ 'video_coding': ['stefan@webrtc.org'],
+ 'bitrate_controller': ['stefan@webrtc.org'],
'congestion_controller': [],
- 'remote_bitrate_estimator': ['mflodman@webrtc.org',
- 'stefan@webrtc.org',
- 'zhuangzesen@agora.io'],
- 'pacing': ['mflodman@webrtc.org',
- 'stefan@webrtc.org',
- 'zhuangzesen@agora.io'],
- 'rtp_rtcp': ['mflodman@webrtc.org',
- 'stefan@webrtc.org',
- 'danilchap@webrtc.org',
- 'zhuangzesen@agora.io'],
- 'system_wrappers': ['fengyue@agora.io',
- 'henrika@webrtc.org',
- 'mflodman@webrtc.org',
- 'peah@webrtc.org',
- 'zhengzhonghou@agora.io'],
- 'pc': ['steveanton+watch@webrtc.org'],
+ 'remote_bitrate_estimator': ['stefan@webrtc.org'],
+ 'pacing': ['stefan@webrtc.org'],
+ 'rtp_rtcp': ['stefan@webrtc.org',
+ 'danilchap@webrtc.org'],
+ 'system_wrappers': ['henrika@webrtc.org',
+ 'peah@webrtc.org'],
+ 'pc': [],
'logging': ['terelius@webrtc.org'],
},
}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 7b55c579687..b3ca6490476 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -26,7 +26,6 @@ rtc_library("enable_media") {
deps = [
":peer_connection_interface",
":scoped_refptr",
- "../call",
"../call:call_interfaces",
"../media:media_engine",
"../media:rtc_audio_video",
@@ -76,7 +75,6 @@ rtc_library("create_modular_peer_connection_factory") {
"../pc:peer_connection_factory_proxy",
"../rtc_base:threading",
"../rtc_base/system:rtc_export",
- "../stats:rtc_stats",
]
}
@@ -126,7 +124,6 @@ rtc_library("rtp_headers") {
"rtp_headers.h",
]
deps = [
- ":array_view",
"../rtc_base:checks",
"../rtc_base/system:rtc_export",
"units:timestamp",
@@ -142,11 +139,11 @@ rtc_library("rtp_packet_info") {
"rtp_packet_infos.h",
]
deps = [
- ":array_view",
":make_ref_counted",
":refcountedbase",
":rtp_headers",
":scoped_refptr",
+ "../modules/rtp_rtcp:rtp_rtcp_format",
"../rtc_base/system:rtc_export",
"units:time_delta",
"units:timestamp",
@@ -168,7 +165,6 @@ rtc_library("media_stream_interface") {
]
deps = [
":audio_options_api",
- ":make_ref_counted",
":ref_count",
":rtp_parameters",
":scoped_refptr",
@@ -199,7 +195,6 @@ rtc_library("candidate") {
"../rtc_base:crc32",
"../rtc_base:crypto_random",
"../rtc_base:ip_address",
- "../rtc_base:logging",
"../rtc_base:net_helper",
"../rtc_base:network_constants",
"../rtc_base:socket_address",
@@ -227,9 +222,7 @@ rtc_source_set("ice_transport_interface") {
deps = [
":async_dns_resolver",
":local_network_access_permission",
- ":packet_socket_factory",
":ref_count",
- ":rtc_error",
":scoped_refptr",
"environment",
"rtc_event_log",
@@ -265,9 +258,31 @@ rtc_library("dtmf_sender_interface") {
visibility = [ "*" ]
sources = [ "dtmf_sender_interface.h" ]
+ deps = [ ":ref_count" ]
+}
+
+rtc_library("sframe_types") {
+ visibility = [ "*" ]
+ sources = [ "sframe/sframe_types.h" ]
+}
+
+rtc_library("sframe_encrypter_interface") {
+ visibility = [ "*" ]
+ sources = [ "sframe/sframe_encrypter_interface.h" ]
deps = [
- ":media_stream_interface",
":ref_count",
+ ":rtc_error",
+ ":sframe_types",
+ ]
+}
+
+rtc_library("sframe_decrypter_interface") {
+ visibility = [ "*" ]
+ sources = [ "sframe/sframe_decrypter_interface.h" ]
+ deps = [
+ ":ref_count",
+ ":rtc_error",
+ ":sframe_types",
]
}
@@ -287,6 +302,7 @@ rtc_library("rtp_sender_interface") {
":rtc_error",
":rtp_parameters",
":scoped_refptr",
+ ":sframe_encrypter_interface",
"../rtc_base:checks",
"../rtc_base/system:rtc_export",
"crypto:frame_encryptor_interface",
@@ -324,6 +340,7 @@ rtc_library("jsep") {
]
deps = [
":candidate",
+ ":payload_type",
":ref_count",
":rtc_error",
":rtp_parameters",
@@ -366,6 +383,7 @@ rtc_library("jsep") {
}
rtc_library("data_channel_interface") {
+ visibility = [ "*" ]
sources = [
"data_channel_interface.cc",
"data_channel_interface.h",
@@ -382,6 +400,7 @@ rtc_library("data_channel_interface") {
}
rtc_library("legacy_stats_types") {
+ visibility = [ "*" ]
sources = [
"legacy_stats_types.cc",
"legacy_stats_types.h",
@@ -400,6 +419,7 @@ rtc_library("legacy_stats_types") {
}
rtc_library("peer_connection_interface") {
+ visibility = [ "*" ]
sources = [
"peer_connection_interface.cc",
"peer_connection_interface.h",
@@ -447,6 +467,7 @@ rtc_library("peer_connection_interface") {
"../rtc_base:ssl",
"../rtc_base:ssl_adapter",
"../rtc_base:threading",
+ "../rtc_base/system:plan_b_only",
"../rtc_base/system:rtc_export",
"adaptation:resource_adaptation_api",
"audio:audio_device",
@@ -473,6 +494,7 @@ rtc_library("peer_connection_interface") {
}
rtc_library("rtp_receiver_interface") {
+ visibility = [ "*" ]
sources = [
"rtp_receiver_interface.cc",
"rtp_receiver_interface.h",
@@ -482,8 +504,12 @@ rtc_library("rtp_receiver_interface") {
":frame_transformer_interface",
":media_stream_interface",
":ref_count",
+ ":rtc_error",
":rtp_parameters",
":scoped_refptr",
+ ":sframe_decrypter_interface",
+ ":sframe_types",
+ "../rtc_base:checks",
"../rtc_base/system:rtc_export",
"crypto:frame_decryptor_interface",
"transport/rtp:rtp_source",
@@ -491,12 +517,12 @@ rtc_library("rtp_receiver_interface") {
}
rtc_library("rtp_transceiver_interface") {
+ visibility = [ "*" ]
sources = [
"rtp_transceiver_interface.cc",
"rtp_transceiver_interface.h",
]
deps = [
- ":array_view",
":ref_count",
":rtc_error",
":rtp_parameters",
@@ -511,6 +537,7 @@ rtc_library("rtp_transceiver_interface") {
}
rtc_library("set_local_description_observer_interface") {
+ visibility = [ "*" ]
sources = [ "set_local_description_observer_interface.h" ]
deps = [
":ref_count",
@@ -519,6 +546,7 @@ rtc_library("set_local_description_observer_interface") {
}
rtc_library("set_remote_description_observer_interface") {
+ visibility = [ "*" ]
sources = [ "set_remote_description_observer_interface.h" ]
deps = [
":ref_count",
@@ -527,19 +555,16 @@ rtc_library("set_remote_description_observer_interface") {
}
rtc_library("uma_metrics") {
+ visibility = [ "*" ]
sources = [ "uma_metrics.h" ]
- deps = [
- ":ref_count",
- ":rtc_error",
- ]
+ deps = []
}
rtc_library("video_track_source_proxy_factory") {
+ visibility = [ "*" ]
sources = [ "video_track_source_proxy_factory.h" ]
deps = [
":media_stream_interface",
- ":ref_count",
- ":rtc_error",
":scoped_refptr",
"../rtc_base:threading",
"../rtc_base/system:rtc_export",
@@ -568,53 +593,38 @@ rtc_library("libjingle_peerconnection_api") {
"video_track_source_proxy_factory.h", # Used downstream
]
deps = [
- ":array_view",
":async_dns_resolver",
":audio_options_api",
":candidate",
":data_channel_event_observer_interface",
- ":data_channel_interface",
":dtls_transport_interface",
":dtmf_sender_interface",
":fec_controller_api",
":field_trials_view",
":frame_transformer_interface",
":ice_transport_interface",
- ":jsep",
- ":legacy_stats_types",
":libjingle_logging_api",
":local_network_access_permission",
- ":make_ref_counted",
":media_stream_interface",
":network_state_predictor_api",
":packet_socket_factory",
- ":peer_connection_interface",
":priority",
":ref_count",
":rtc_error",
":rtc_stats_api",
- ":rtp_packet_info",
":rtp_parameters",
- ":rtp_receiver_interface",
- ":rtp_sender_interface",
":rtp_transceiver_direction",
- ":rtp_transceiver_interface",
":rtp_transport_factory",
":scoped_refptr",
- ":sctp_transport_interface",
":sequence_checker",
- ":set_local_description_observer_interface",
+ ":sframe_decrypter_interface",
+ ":sframe_encrypter_interface",
+ ":sframe_types",
":turn_customizer",
- "../call:rtp_interfaces",
- "../media:media_engine",
- "../p2p:connection",
"../p2p:dtls_transport_factory",
"../p2p:port",
"../p2p:port_allocator",
- "../pc:media_factory",
- "../pc:session_description",
"../rtc_base:copy_on_write_buffer",
- "../rtc_base:logging",
"../rtc_base:macromagic",
"../rtc_base:network",
"../rtc_base:network_constants",
@@ -622,8 +632,8 @@ rtc_library("libjingle_peerconnection_api") {
"../rtc_base:socket_factory",
"../rtc_base:ssl",
"../rtc_base:ssl_adapter",
- "../rtc_base:stringutils",
"../rtc_base/system:no_unique_address",
+ "../rtc_base/system:plan_b_only",
"adaptation:resource_adaptation_api",
"audio:audio_device",
"audio:audio_frame_processor",
@@ -637,17 +647,13 @@ rtc_library("libjingle_peerconnection_api") {
"metronome",
"neteq:neteq_api",
"rtc_event_log:rtc_event_log_factory_interface",
- "task_queue",
"transport:bandwidth_estimation_settings",
"transport:bitrate_settings",
"transport:enums",
"transport:network_control",
"transport:sctp_transport_factory_interface",
"transport/rtp:rtp_source",
- "units:data_rate",
"units:time_delta",
- "units:timestamp",
- "video:encoded_image",
"video:video_bitrate_allocator_factory",
"video:video_frame",
"video:yuv_helper",
@@ -665,10 +671,10 @@ rtc_library("libjingle_peerconnection_api") {
# Basically, don't add stuff here. You might break sensitive downstream
# targets like pnacl. API should not depend on anything outside of this
# file, really. All these should arguably go away in time.
- "../media:rtc_media_config",
- "../rtc_base:checks",
- "../rtc_base:threading",
- "../rtc_base/system:rtc_export",
+ "../media:rtc_media_config", # keep
+ "../rtc_base:checks", # keep
+ "../rtc_base:threading", # keep
+ "../rtc_base/system:rtc_export", # keep
]
}
@@ -679,16 +685,12 @@ rtc_library("frame_transformer_interface") {
"frame_transformer_interface.h",
]
deps = [
- ":array_view",
- ":make_ref_counted",
":ref_count",
":scoped_refptr",
"../rtc_base:checks",
- "../rtc_base:refcount",
"../rtc_base/system:rtc_export",
"units:time_delta",
"units:timestamp",
- "video:encoded_frame",
"video:video_frame_metadata",
]
}
@@ -727,6 +729,7 @@ rtc_source_set("packet_socket_factory") {
deps = [
":async_dns_resolver",
"../rtc_base:async_packet_socket",
+ "../rtc_base:checks",
"../rtc_base:socket_address",
"../rtc_base:ssl",
"../rtc_base/system:rtc_export",
@@ -738,7 +741,6 @@ rtc_source_set("async_dns_resolver") {
visibility = [ "*" ]
sources = [ "async_dns_resolver.h" ]
deps = [
- "../rtc_base:checks",
"../rtc_base:socket_address",
"../rtc_base/system:rtc_export",
"//third_party/abseil-cpp/absl/functional:any_invocable",
@@ -749,9 +751,7 @@ rtc_source_set("local_network_access_permission") {
visibility = [ "*" ]
sources = [ "local_network_access_permission.h" ]
deps = [
- "../rtc_base:checks",
"../rtc_base:socket_address",
- "../rtc_base/system:rtc_export",
"//third_party/abseil-cpp/absl/functional:any_invocable",
]
}
@@ -784,14 +784,12 @@ rtc_source_set("video_quality_analyzer_api") {
sources = [ "test/video_quality_analyzer_interface.h" ]
deps = [
- ":array_view",
":rtc_stats_api",
":scoped_refptr",
":stats_observer_interface",
"../rtc_base:checks",
"video:encoded_image",
"video:video_frame",
- "video:video_rtp_headers",
"video_codecs:video_codecs_api",
"//third_party/abseil-cpp/absl/strings:string_view",
]
@@ -808,6 +806,15 @@ rtc_source_set("rtp_transceiver_direction") {
sources = [ "rtp_transceiver_direction.h" ]
}
+rtc_source_set("payload_type") {
+ visibility = [ "*" ]
+ sources = [ "payload_type.h" ]
+ deps = [
+ "../rtc_base:strong_alias",
+ "//third_party/abseil-cpp/absl/strings:str_format",
+ ]
+}
+
rtc_library("priority") {
visibility = [ "*" ]
sources = [
@@ -830,7 +837,6 @@ rtc_library("rtp_parameters") {
"rtp_parameters.h",
]
deps = [
- ":array_view",
":priority",
":rtc_error",
":rtp_transceiver_direction",
@@ -900,39 +906,11 @@ rtc_source_set("peer_connection_quality_test_fixture_api") {
sources = [ "test/peerconnection_quality_test_fixture.h" ]
deps = [
- ":array_view",
- ":audio_quality_analyzer_api",
- ":fec_controller_api",
- ":frame_generator_api",
- ":function_view",
- ":media_stream_interface",
- ":network_state_predictor_api",
- ":packet_socket_factory",
- ":rtp_parameters",
- ":simulated_network_api",
":stats_observer_interface",
":track_id_stream_info_map",
- ":video_quality_analyzer_api",
- "../media:media_constants",
- "../rtc_base:checks",
- "../rtc_base:network",
- "../rtc_base:rtc_certificate_generator",
- "../rtc_base:ssl",
- "../rtc_base:stringutils",
- "../rtc_base:threading",
- "../test:fileutils",
- "audio:audio_mixer_api",
- "audio:audio_processing",
- "rtc_event_log",
- "task_queue",
- "test/pclf:media_configuration",
"test/pclf:media_quality_test_params",
"test/pclf:peer_configurer",
- "test/video:video_frame_writer",
- "transport:network_control",
"units:time_delta",
- "video:video_frame",
- "video_codecs:video_codecs_api",
"//third_party/abseil-cpp/absl/base:core_headers",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings:string_view",
@@ -980,10 +958,6 @@ if (rtc_include_tests) {
":network_state_predictor_api",
":rtp_parameters",
":simulated_network_api",
- "../call:fake_network",
- "../call:rtp_interfaces",
- "../test:test_common",
- "../test:video_test_common",
"../video/config:encoder_config",
"transport:bitrate_settings",
"transport:network_control",
@@ -1038,7 +1012,6 @@ rtc_library("create_frame_generator") {
"../system_wrappers",
"../test:frame_generator_impl",
"environment",
- "environment:environment_factory",
"//third_party/abseil-cpp/absl/base:nullability",
"//third_party/abseil-cpp/absl/strings:string_view",
]
@@ -1065,10 +1038,7 @@ rtc_library("create_peer_connection_quality_test_frame_generator") {
rtc_source_set("data_channel_event_observer_interface") {
visibility = [ "*" ]
sources = [ "data_channel_event_observer_interface.h" ]
- deps = [
- ":array_view",
- "//third_party/abseil-cpp/absl/strings:string_view",
- ]
+ deps = [ "//third_party/abseil-cpp/absl/strings:string_view" ]
}
rtc_source_set("libjingle_logging_api") {
@@ -1106,12 +1076,10 @@ rtc_source_set("rtc_stats_api") {
]
deps = [
- ":make_ref_counted",
":ref_count",
+ ":refcountedbase",
":scoped_refptr",
- "../api:refcountedbase",
"../rtc_base:checks",
- "../rtc_base:refcount",
"../rtc_base/system:rtc_export",
"units:timestamp",
]
@@ -1125,7 +1093,6 @@ rtc_library("audio_options_api") {
]
deps = [
- ":array_view",
"../rtc_base:stringutils",
"../rtc_base/system:rtc_export",
]
@@ -1137,11 +1104,7 @@ rtc_library("transport_api") {
"call/transport.cc",
"call/transport.h",
]
- deps = [
- ":array_view",
- ":refcountedbase",
- ":scoped_refptr",
- ]
+ deps = []
}
rtc_source_set("bitrate_allocation") {
@@ -1158,7 +1121,6 @@ rtc_source_set("simulated_network_api") {
visibility = [ "*" ]
sources = [ "test/simulated_network.h" ]
deps = [
- "../rtc_base:random",
"transport:ecn_marking",
"units:data_rate",
"units:data_size",
@@ -1175,15 +1137,12 @@ rtc_library("network_emulation_manager_api") {
"test/network_emulation_manager.h",
]
deps = [
- ":array_view",
":field_trials_view",
- ":packet_socket_factory",
":peer_network_dependencies",
":simulated_network_api",
":time_controller",
"../rtc_base:checks",
"../rtc_base:ip_address",
- "../rtc_base:network",
"../rtc_base:network_constants",
"../rtc_base:socket_address",
"../test/network:simulated_network",
@@ -1206,11 +1165,9 @@ rtc_library("time_controller") {
":function_view",
"../rtc_base:socket_server",
"../rtc_base:threading",
- "../rtc_base/synchronization:yield_policy",
"../system_wrappers",
"task_queue",
"units:time_delta",
- "units:timestamp",
"//third_party/abseil-cpp/absl/strings:string_view",
]
}
@@ -1238,10 +1195,6 @@ rtc_source_set("network_state_predictor_api") {
rtc_source_set("array_view") {
visibility = [ "*" ]
sources = [ "array_view.h" ]
- deps = [
- "../rtc_base:checks",
- "../rtc_base:type_traits",
- ]
}
rtc_source_set("refcountedbase") {
@@ -1262,18 +1215,13 @@ rtc_library("ice_transport_factory") {
deps = [
":ice_transport_interface",
":make_ref_counted",
- ":packet_socket_factory",
":scoped_refptr",
":sequence_checker",
- "../p2p:connection",
"../p2p:ice_transport_internal",
"../p2p:p2p_constants",
"../p2p:p2p_transport_channel",
- "../p2p:port_allocator",
"../rtc_base:macromagic",
- "../rtc_base:threading",
"../rtc_base/system:rtc_export",
- "rtc_event_log",
]
}
@@ -1307,13 +1255,10 @@ rtc_library("datagram_connection") {
visibility = [ "*" ]
sources = [ "datagram_connection.h" ]
deps = [
- ":array_view",
":candidate",
":ref_count",
"../p2p:transport_description",
- "../rtc_base:macromagic",
"../rtc_base/system:rtc_export",
- "environment",
"units:timestamp",
"//third_party/abseil-cpp/absl/functional:any_invocable",
"//third_party/abseil-cpp/absl/strings:string_view",
@@ -1329,11 +1274,9 @@ rtc_library("datagram_connection_factory") {
deps = [
":datagram_connection",
":make_ref_counted",
- ":ref_count",
":scoped_refptr",
"../p2p:port_allocator",
"../pc:datagram_connection_internal",
- "../rtc_base:macromagic",
"../rtc_base:ssl",
"../rtc_base/system:rtc_export",
"environment",
@@ -1352,8 +1295,6 @@ if (rtc_include_tests) {
]
deps = [
- ":scoped_refptr",
- "../modules/audio_processing",
"../modules/audio_processing:audioproc_f_impl",
"audio:audio_processing",
"audio:builtin_audio_processing_builder",
@@ -1371,7 +1312,6 @@ if (rtc_include_tests) {
deps = [
":neteq_simulator_api",
"../modules/audio_coding:neteq_test_factory",
- "../rtc_base:checks",
"neteq:neteq_api",
"//third_party/abseil-cpp/absl/flags:flag",
"//third_party/abseil-cpp/absl/flags:parse",
@@ -1408,9 +1348,9 @@ if (rtc_include_tests) {
"test/videocodec_test_stats.h",
]
deps = [
- "../api/units:data_rate",
- "../api/units:frequency",
"../rtc_base:stringutils",
+ "units:data_rate",
+ "units:frequency",
"video:video_frame_type",
]
}
@@ -1423,7 +1363,6 @@ if (rtc_include_tests) {
":field_trials",
":videocodec_test_stats_api",
"../modules/video_coding:codec_globals_headers",
- "../modules/video_coding:video_codec_interface",
"video:encoded_image",
"video:video_frame",
"video_codecs:video_codecs_api",
@@ -1439,7 +1378,6 @@ if (rtc_include_tests) {
]
deps = [
":videocodec_test_fixture_api",
- "../modules/video_coding:video_codecs_test_framework",
"../modules/video_coding:videocodec_test_impl",
"video_codecs:video_codecs_api",
]
@@ -1463,7 +1401,7 @@ if (rtc_include_tests) {
sources = [ "test/mock_audio_sink.h" ]
deps = [
- "../api:media_stream_interface",
+ ":media_stream_interface",
"../test:test_support",
]
}
@@ -1513,10 +1451,7 @@ if (rtc_include_tests) {
testonly = true
sources = [ "test/mock_frame_encryptor.h" ]
deps = [
- ":array_view",
":rtp_parameters",
-
- # For api/crypto/frame_encryptor_interface.h
"../test:test_support",
"crypto:frame_encryptor_interface",
]
@@ -1527,7 +1462,6 @@ if (rtc_include_tests) {
testonly = true
sources = [ "test/mock_frame_decryptor.h" ]
deps = [
- ":array_view",
":rtp_parameters",
"../test:test_support",
"crypto:frame_decryptor_interface",
@@ -1550,10 +1484,10 @@ if (rtc_include_tests) {
testonly = true
sources = [ "test/mock_encoder_selector.h" ]
deps = [
- "../api/video_codecs:video_codecs_api",
"../test:test_support",
"units:data_rate",
"video:render_resolution",
+ "video_codecs:video_codecs_api",
]
}
@@ -1565,9 +1499,6 @@ if (rtc_include_tests) {
"test/fake_frame_encryptor.h",
]
deps = [
- ":array_view",
- ":make_ref_counted",
- ":ref_count",
":rtp_parameters",
"../rtc_base:checks",
"../rtc_base:refcount",
@@ -1583,8 +1514,6 @@ if (rtc_include_tests) {
"test/fake_frame_decryptor.h",
]
deps = [
- ":array_view",
- ":make_ref_counted",
":rtp_parameters",
"../rtc_base:checks",
"crypto:frame_decryptor_interface",
@@ -1626,7 +1555,6 @@ if (rtc_include_tests) {
sources = [ "test/mock_peerconnectioninterface.h" ]
deps = [
- ":candidate",
":data_channel_event_observer_interface",
":data_channel_interface",
":dtls_transport_interface",
@@ -1635,24 +1563,21 @@ if (rtc_include_tests) {
":make_ref_counted",
":media_stream_interface",
":peer_connection_interface",
- ":ref_count",
":rtc_error",
":rtc_stats_api",
":rtp_parameters",
":rtp_receiver_interface",
":rtp_sender_interface",
":rtp_transceiver_interface",
+ ":scoped_refptr",
":sctp_transport_interface",
- ":set_local_description_observer_interface",
":set_remote_description_observer_interface",
- "../api:scoped_refptr",
"../rtc_base:refcount",
"../rtc_base:threading",
"../test:test_support",
"adaptation:resource_adaptation_api",
"transport:bandwidth_estimation_settings",
"transport:bitrate_settings",
- "transport:network_control",
]
}
@@ -1679,7 +1604,6 @@ if (rtc_include_tests) {
testonly = true
sources = [ "test/mock_transformable_frame.h" ]
deps = [
- ":array_view",
":frame_transformer_interface",
"../test:test_support",
"units:time_delta",
@@ -1725,7 +1649,6 @@ if (rtc_include_tests) {
]
deps = [
- ":array_view",
":dtls_transport_interface",
":dtmf_sender_interface",
":frame_transformer_interface",
@@ -1738,9 +1661,9 @@ if (rtc_include_tests) {
":rtp_transceiver_direction",
":rtp_transceiver_interface",
":scoped_refptr",
- "../api/crypto:frame_decryptor_interface",
"../rtc_base:refcount",
"../test:test_support",
+ "crypto:frame_decryptor_interface",
"crypto:frame_encryptor_interface",
"transport/rtp:rtp_source",
"video_codecs:video_codecs_api",
@@ -1753,11 +1676,10 @@ if (rtc_include_tests) {
sources = [ "test/mock_transformable_audio_frame.h" ]
deps = [
- ":array_view",
":frame_transformer_interface",
- "../api/units:timestamp",
"../test:test_support",
"units:time_delta",
+ "units:timestamp",
]
}
@@ -1767,7 +1689,6 @@ if (rtc_include_tests) {
sources = [ "test/mock_transformable_video_frame.h" ]
deps = [
- ":array_view",
":frame_transformer_interface",
"../test:test_support",
"units:time_delta",
@@ -1782,9 +1703,9 @@ if (rtc_include_tests) {
sources = [ "test/mock_video_bitrate_allocator.h" ]
deps = [
- "../api/video:video_bitrate_allocator",
"../test:test_support",
"video:video_bitrate_allocation",
+ "video:video_bitrate_allocator",
]
}
@@ -1794,10 +1715,10 @@ if (rtc_include_tests) {
sources = [ "test/mock_video_bitrate_allocator_factory.h" ]
deps = [
- "../api/video:video_bitrate_allocator_factory",
"../test:test_support",
"environment",
"video:video_bitrate_allocator",
+ "video:video_bitrate_allocator_factory",
"video_codecs:video_codecs_api",
]
}
@@ -1811,9 +1732,9 @@ if (rtc_include_tests) {
]
deps = [
- "../api/video_codecs:video_codecs_api",
"../test:test_support",
"environment",
+ "video_codecs:video_codecs_api",
]
}
@@ -1823,10 +1744,10 @@ if (rtc_include_tests) {
sources = [ "test/mock_video_decoder.h" ]
deps = [
- "../api/video_codecs:video_codecs_api",
"../test:test_support",
"video:encoded_image",
"video:video_frame",
+ "video_codecs:video_codecs_api",
]
}
@@ -1837,11 +1758,11 @@ if (rtc_include_tests) {
deps = [
":fec_controller_api",
- "../api/video_codecs:video_codecs_api",
"../test:test_support",
"video:encoded_image",
"video:video_frame",
"video:video_frame_type",
+ "video_codecs:video_codecs_api",
]
}
@@ -1851,9 +1772,8 @@ if (rtc_include_tests) {
sources = [ "test/mock_video_track.h" ]
deps = [
- ":ref_count",
- "../api:media_stream_interface",
- "../api:scoped_refptr",
+ ":media_stream_interface",
+ ":scoped_refptr",
"../rtc_base:refcount",
"../test:test_support",
"video:video_frame",
@@ -1865,7 +1785,6 @@ if (rtc_include_tests) {
testonly = true
sources = [ "test/mock_datagram_connection.h" ]
deps = [
- ":array_view",
":candidate",
":datagram_connection",
"../p2p:transport_description",
@@ -1880,7 +1799,6 @@ if (rtc_include_tests) {
testonly = true
sources = [ "test/mock_datagram_connection_observer.h" ]
deps = [
- ":array_view",
":candidate",
":datagram_connection",
"//test:test_support",
@@ -1944,6 +1862,7 @@ if (rtc_include_tests) {
"../media:media_constants",
"../media:rid_description",
"../media:stream_params",
+ "../modules/rtp_rtcp:rtp_rtcp_format",
"../p2p:p2p_constants",
"../p2p:transport_description",
"../p2p:transport_info",
@@ -2017,11 +1936,9 @@ if (rtc_include_tests) {
":mock_frame_decryptor",
":mock_frame_encryptor",
":mock_media_stream_interface",
- ":mock_packet_socket_factory",
":mock_peer_connection_factory_interface",
":mock_peerconnectioninterface",
":mock_rtp",
- ":mock_transformable_audio_frame",
":mock_transformable_frame",
":mock_transformable_video_frame",
":mock_video_bitrate_allocator",
@@ -2044,7 +1961,7 @@ rtc_library("field_trials_registry") {
]
deps = [
":field_trials_view",
- "../experiments:registered_field_trials",
+ "../experiments:registered_field_trials", # keep
"../rtc_base:checks",
"../rtc_base:logging",
"../rtc_base/containers:flat_set",
@@ -2095,14 +2012,10 @@ rtc_library("frame_transformer_factory") {
]
deps = [
":frame_transformer_interface",
- ":ref_count",
- ":scoped_refptr",
"../audio",
"../modules/rtp_rtcp",
"../rtc_base:checks",
"../rtc_base/system:rtc_export",
- "video:encoded_frame",
- "video:video_frame_metadata",
]
}
diff --git a/api/DEPS b/api/DEPS
index f5d4fb8db95..90b81d2deeb 100644
--- a/api/DEPS
+++ b/api/DEPS
@@ -1,6 +1,7 @@
# This is supposed to be a complete list of top-level directories,
# excepting only api/ itself.
include_rules = [
+ "-.agents",
"-agents",
"-audio",
"-base",
@@ -45,105 +46,110 @@ include_rules = [
specific_include_rules = {
# Some internal headers are allowed even in API headers:
- ".*\.h": [
+ ".*\\.h": [
"+rtc_base/checks.h",
"+rtc_base/system/rtc_export.h",
"+rtc_base/system/rtc_export_template.h",
"+rtc_base/units/unit_base.h",
],
- "array_view\.h": [
+ "array_view\\.h": [
"+rtc_base/type_traits.h",
],
# Needed because AudioEncoderOpus is in the wrong place for
# backwards compatibilty reasons. See
# https://bugs.chromium.org/p/webrtc/issues/detail?id=7847
- "audio_encoder_opus\.h": [
+ "audio_encoder_opus\\.h": [
"+modules/audio_coding/codecs/opus/audio_encoder_opus.h",
],
- "async_resolver_factory\.h": [
+ "async_resolver_factory\\.h": [
"+rtc_base/async_resolver_interface.h",
],
- "async_dns_resolver\.h": [
+ "async_dns_resolver\\.h": [
"+rtc_base/socket_address.h",
],
- "audio_device_defines\.h": [
+ "audio_device_defines\\.h": [
"+rtc_base/strings/string_builder.h",
],
- "audio_format\.h": [
+ "audio_format\\.h": [
"+rtc_base/strings/string_builder.h",
],
- "candidate\.h": [
+ "candidate\\.h": [
"+rtc_base/network_constants.h",
"+rtc_base/socket_address.h",
],
- "create_peerconnection_factory\.h": [
+ "create_peerconnection_factory\\.h": [
"+rtc_base/thread.h",
],
- "data_channel_interface\.h": [
+ "data_channel_interface\\.h": [
"+rtc_base/copy_on_write_buffer.h",
],
- "data_channel_transport_interface\.h": [
+ "data_channel_transport_interface\\.h": [
"+rtc_base/copy_on_write_buffer.h",
],
- "datagram_connection\.h": [
+ "datagram_connection\\.h": [
"+p2p/base/transport_description.h",
],
- "mock_datagram_connection\.h": [
+ "mock_datagram_connection\\.h": [
"+p2p/base/transport_description.h",
],
- "datagram_connection_factory\.h": [
+ "datagram_connection_factory\\.h": [
"+p2p/base/port_allocator.h",
"+rtc_base/rtc_certificate.h",
],
- "dtls_transport_interface\.h": [
+ "dtls_transport_interface\\.h": [
"+rtc_base/ssl_certificate.h",
],
- "fec_controller\.h": [
+ "fec_controller\\.h": [
"+modules/include/module_fec_types.h",
],
- "ice_server_parsing\.h": [
+ "ice_server_parsing\\.h": [
"+p2p/base/port_allocator.h",
"+rtc_base/socket_address.h",
],
- "jsep\.h": [
+ "jsep\\.h": [
"+absl/strings/has_absl_stringify.h",
"+absl/strings/str_format.h",
"+rtc_base/system/no_unique_address.h",
"+rtc_base/thread_annotations.h",
],
- "local_network_access_permission\.h": [
+ "local_network_access_permission\\.h": [
"+rtc_base/socket_address.h",
],
- "packet_socket_factory\.h": [
+ "packet_socket_factory\\.h": [
"+rtc_base/async_packet_socket.h",
"+rtc_base/socket_address.h",
"+rtc_base/ssl_certificate.h",
],
- "turn_customizer\.h": [
+ "payload_type\\.h": [
+ "+absl/strings/str_format.h",
+ "+rtc_base/strong_alias.h",
+ ],
+
+ "turn_customizer\\.h": [
"+p2p/base/port_interface.h",
],
- "peer_connection_interface\.h": [
+ "peer_connection_interface\\.h": [
"+media/base/media_config.h",
"+media/base/media_engine.h",
"+p2p/base/port.h",
@@ -158,128 +164,134 @@ specific_include_rules = {
"+rtc_base/socket_factory.h",
"+rtc_base/ssl_certificate.h",
"+rtc_base/ssl_stream_adapter.h",
+ "+rtc_base/system/plan_b_only.h",
"+rtc_base/thread.h",
],
- "proxy\.h": [
+ "proxy\\.h": [
"+rtc_base/event.h",
"+rtc_base/message_handler.h", # Inherits from it.
"+rtc_base/thread.h",
],
- "ref_counted_base\.h": [
+ "ref_counted_base\\.h": [
"+rtc_base/ref_counter.h",
],
- "rtc_error\.h": [
+ "rtc_error\\.h": [
"+rtc_base/logging.h",
"+rtc_base/strings/string_builder.h",
"+absl/strings/has_absl_stringify.h",
"+absl/strings/str_format.h",
],
- "rtc_event_log_output_file.h": [
+ "rtc_event_log_output_file\\.h": [
# For private member and constructor.
"+rtc_base/system/file_wrapper.h",
],
- "legacy_stats_types\.h": [
+ "legacy_stats_types\\.h": [
"+rtc_base/thread_annotations.h",
"+rtc_base/thread_checker.h",
],
- "audio_decoder\.h": [
+ "audio_decoder\\.h": [
"+rtc_base/buffer.h",
],
- "audio_encoder\.h": [
+ "audio_encoder\\.h": [
"+rtc_base/buffer.h",
],
- "make_ref_counted\.h": [
+ "make_ref_counted\\.h": [
"+rtc_base/ref_counted_object.h",
],
- "mock.*\.h": [
+ "mock.*\\.h": [
"+test/gmock.h",
],
- "mock_peerconnectioninterface\.h": [
+ "mock_peerconnectioninterface\\.h": [
"+rtc_base/ref_counted_object.h",
],
- "mock_video_track\.h": [
+ "mock_video_track\\.h": [
"+rtc_base/ref_counted_object.h",
],
- "notifier\.h": [
+ "notifier\\.h": [
"+rtc_base/system/no_unique_address.h",
"+rtc_base/thread_annotations.h",
],
- "priority\.h": [
+ "priority\\.h": [
"+rtc_base/strong_alias.h",
],
- "sctp_transport_interface\.h": [
+ "sctp_transport_interface\\.h": [
"+absl/strings/str_format.h",
],
- "simulated_network\.h": [
+ "simulated_network\\.h": [
"+rtc_base/random.h",
"+rtc_base/thread_annotations.h",
],
- "time_controller\.h": [
+ "time_controller\\.h": [
"+rtc_base/thread.h",
],
- "videocodec_test_fixture\.h": [
+ "videocodec_test_fixture\\.h": [
"+modules/video_coding/include/video_codec_interface.h"
],
- "rtp_parameters\.h": [
+ "rtp_parameters\\.h": [
"+absl/strings/str_format.h",
+ "+rtc_base/strings/str_join.h"
],
- "sequence_checker\.h": [
+ "sequence_checker\\.h": [
"+rtc_base/synchronization/sequence_checker_internal.h",
"+rtc_base/thread_annotations.h",
],
- "video_encoder_factory_template.*\.h": [
+ "video_encoder_factory_template.*\\.h": [
"+modules/video_coding",
],
- "video_encoder_factory_interface\.h": [
+ "video_encoder_factory_interface\\.h": [
"+rtc_base/numerics",
],
- "video_encoder_interface\.h": [
+ "video_encoder_interface\\.h": [
"+rtc_base/numerics",
],
- "simple_encoder_wrapper\.h": [
+ "video_quality_test_fixture\\.h": [
+ "+video/config/video_encoder_config.h",
+ ],
+
+ "simple_encoder_wrapper\\.h": [
"+common_video",
"+modules",
],
- "video_decoder_factory_template.*\.h": [
+ "video_decoder_factory_template.*\\.h": [
"+modules/video_coding",
],
- "field_trials\.h": [
+ "field_trials\\.h": [
"+rtc_base/containers/flat_map.h",
],
- "video_track_source_proxy_factory.h": [
+ "video_track_source_proxy_factory\\.h": [
"+rtc_base/thread.h",
],
- "field_trials_registry\.h": [
+ "field_trials_registry\\.h": [
"+rtc_base/containers/flat_set.h",
],
- "ice_transport_factory\.h": [
+ "ice_transport_factory\\.h": [
"+p2p/base/port_allocator.h",
],
@@ -287,7 +299,7 @@ specific_include_rules = {
# so we re-add all the top-level directories here. (That's because .h
# files leak their #includes to whoever's #including them, but .cc files
# do not since no one #includes them.)
- ".*\.cc": [
+ ".*\\.cc": [
"+audio",
"+call",
"+common_audio",
diff --git a/api/OWNERS b/api/OWNERS
index ebaea3b1e70..0ef7a47c7b8 100644
--- a/api/OWNERS
+++ b/api/OWNERS
@@ -1,5 +1,4 @@
hta@webrtc.org
-magjed@webrtc.org
perkj@webrtc.org
tommi@webrtc.org
@@ -7,6 +6,8 @@ tommi@webrtc.org
deadbeef@webrtc.org
per-file peer_connection*=hbos@webrtc.org
+per-file peer_connection*=eshr@webrtc.org
+per-file peer_connection*=guidou@webrtc.org
per-file DEPS=mbonadei@webrtc.org
@@ -16,6 +17,7 @@ per-file uma_metrics.h=kron@webrtc.org
per-file webrtc_sdp.cc = set noparent
per-file webrtc_sdp.cc = hta@webrtc.org
per-file webrtc_sdp.cc = hbos@webrtc.org
+per-file webrtc_sdp.cc = eshr@webrtc.org
# If none of the above are present, may also try one of these
per-file webrtc_sdp.cc = tommi@webrtc.org
per-file webrtc_sdp.cc = guidou@webrtc.org
diff --git a/api/array_view.h b/api/array_view.h
index e8f4cf4ae2f..8414ac04719 100644
--- a/api/array_view.h
+++ b/api/array_view.h
@@ -11,331 +11,20 @@
#ifndef API_ARRAY_VIEW_H_
#define API_ARRAY_VIEW_H_
-#include
-#include
#include
-#include
-#include
-
-#include "rtc_base/checks.h"
-#include "rtc_base/type_traits.h"
+#include
namespace webrtc {
-// tl;dr: ArrayView is the same thing as gsl::span from the Guideline
-// Support Library.
-//
-// Many functions read from or write to arrays. The obvious way to do this is
-// to use two arguments, a pointer to the first element and an element count:
-//
-// bool Contains17(const int* arr, size_t size) {
-// for (size_t i = 0; i < size; ++i) {
-// if (arr[i] == 17)
-// return true;
-// }
-// return false;
-// }
-//
-// This is flexible, since it doesn't matter how the array is stored (C array,
-// std::vector, Buffer, ...), but it's error-prone because the caller
-// has to correctly specify the array length:
-//
-// Contains17(arr, std::size(arr)); // C array
-// Contains17(arr.data(), arr.size()); // std::vector
-// Contains17(arr, size); // pointer + size
-// ...
-//
-// It's also kind of messy to have two separate arguments for what is
-// conceptually a single thing.
-//
-// Enter ArrayView. It contains a T pointer (to an array it doesn't
-// own) and a count, and supports the basic things you'd expect, such as
-// indexing and iteration. It allows us to write our function like this:
-//
-// bool Contains17(ArrayView arr) {
-// for (auto e : arr) {
-// if (e == 17)
-// return true;
-// }
-// return false;
-// }
-//
-// And even better, because a bunch of things will implicitly convert to
-// ArrayView, we can call it like this:
-//
-// Contains17(arr); // C array
-// Contains17(arr); // std::vector
-// Contains17(ArrayView(arr, size)); // pointer + size
-// Contains17(nullptr); // nullptr -> empty ArrayView
-// ...
-//
-// ArrayView stores both a pointer and a size, but you may also use
-// ArrayView, which has a size that's fixed at compile time (which means
-// it only has to store the pointer).
-//
-// One important point is that ArrayView and ArrayView are
-// different types, which allow and don't allow mutation of the array elements,
-// respectively. The implicit conversions work just like you'd hope, so that
-// e.g. vector will convert to either ArrayView or ArrayView, but const vector will convert only to ArrayView.
-// (ArrayView itself can be the source type in such conversions, so
-// ArrayView will convert to ArrayView.)
-//
-// Note: ArrayView is tiny (just a pointer and a count if variable-sized, just
-// a pointer if fix-sized) and trivially copyable, so it's probably cheaper to
-// pass it by value than by const reference.
-
-namespace array_view_internal {
-
-// Magic constant for indicating that the size of an ArrayView is variable
-// instead of fixed.
-enum : std::ptrdiff_t { kArrayViewVarSize = -4711 };
-
-// Base class for ArrayViews of fixed nonzero size.
-template
-class ArrayViewBase {
- static_assert(Size > 0, "ArrayView size must be variable or non-negative");
-
- public:
- ArrayViewBase(T* data, size_t /* size */) : data_(data) {}
-
- static constexpr size_t size() { return Size; }
- static constexpr bool empty() { return false; }
- T* data() const { return data_; }
-
- protected:
- static constexpr bool fixed_size() { return true; }
-
- private:
- T* data_;
-};
-
-// Specialized base class for ArrayViews of fixed zero size.
-template
-class ArrayViewBase {
- public:
- explicit ArrayViewBase(T* /* data */, size_t /* size */) {}
-
- static constexpr size_t size() { return 0; }
- static constexpr bool empty() { return true; }
- T* data() const { return nullptr; }
-
- protected:
- static constexpr bool fixed_size() { return true; }
-};
-
-// Specialized base class for ArrayViews of variable size.
-template
-class ArrayViewBase {
- public:
- ArrayViewBase(T* data, size_t size)
- : data_(size == 0 ? nullptr : data), size_(size) {}
-
- size_t size() const { return size_; }
- bool empty() const { return size_ == 0; }
- T* data() const { return data_; }
-
- protected:
- static constexpr bool fixed_size() { return false; }
-
- private:
- T* data_;
- size_t size_;
-};
-
-} // namespace array_view_internal
-
-template
-class ArrayView final : public array_view_internal::ArrayViewBase {
- public:
- using value_type = T;
- using reference = value_type&;
- using const_reference = const value_type&;
- using pointer = value_type*;
- using const_pointer = const value_type*;
- using const_iterator = const T*;
-
- // Construct an ArrayView from a pointer and a length.
- template
- ArrayView(U* data, size_t size)
- : array_view_internal::ArrayViewBase::ArrayViewBase(data, size) {
- RTC_DCHECK_EQ(size == 0 ? nullptr : data, this->data());
- RTC_DCHECK_EQ(size, this->size());
- RTC_DCHECK_EQ(!this->data(),
- this->size() == 0); // data is null iff size == 0.
- }
-
- // Construct an empty ArrayView. Note that fixed-size ArrayViews of size > 0
- // cannot be empty.
- ArrayView() : ArrayView(nullptr, 0) {}
- ArrayView(std::nullptr_t) // NOLINT
- : ArrayView() {}
- ArrayView(std::nullptr_t, size_t size)
- : ArrayView(static_cast(nullptr), size) {
- static_assert(Size == 0 || Size == array_view_internal::kArrayViewVarSize,
- "");
- RTC_DCHECK_EQ(0, size);
- }
-
- // Construct an ArrayView from a C-style array.
- template
- ArrayView(U (&array)[N]) // NOLINT
- : ArrayView(array, N) {
- static_assert(Size == N || Size == array_view_internal::kArrayViewVarSize,
- "Array size must match ArrayView size");
- }
-
- // (Only if size is fixed.) Construct a fixed size ArrayView from a
- // non-const std::array instance. For an ArrayView with variable size, the
- // used ctor is ArrayView(U& u) instead.
- template (N)>::type* = nullptr>
- ArrayView(std::array& u) // NOLINT
- : ArrayView(u.data(), u.size()) {}
-
- // (Only if size is fixed.) Construct a fixed size ArrayView where T is
- // const from a const(expr) std::array instance. For an ArrayView with
- // variable size, the used ctor is ArrayView(U& u) instead.
- template (N)>::type* = nullptr>
- ArrayView(const std::array& u) // NOLINT
- : ArrayView(u.data(), u.size()) {}
-
- // (Only if size is fixed.) Construct an ArrayView from any type U that has a
- // static constexpr size() method whose return value is equal to Size, and a
- // data() method whose return value converts implicitly to T*. In particular,
- // this means we allow conversion from ArrayView to ArrayView, but not the other way around. We also don't allow conversion from
- // ArrayView to ArrayView, or from ArrayView to ArrayView when M != N.
- template > &&
- Size != array_view_internal::kArrayViewVarSize &&
- HasDataAndSize::value>* = nullptr>
- ArrayView(U& u) // NOLINT
- : ArrayView(u.data(), u.size()) {
- static_assert(U::size() == Size, "Sizes must match exactly");
- }
-
- template > &&
- Size != array_view_internal::kArrayViewVarSize &&
- HasDataAndSize::value>* = nullptr>
- ArrayView(const U& u) // NOLINT(runtime/explicit)
- : ArrayView(u.data(), u.size()) {
- static_assert(U::size() == Size, "Sizes must match exactly");
- }
-
- // (Only if size is variable.) Construct an ArrayView from any type U that
- // has a size() method whose return value converts implicitly to size_t, and
- // a data() method whose return value converts implicitly to T*. In
- // particular, this means we allow conversion from ArrayView to
- // ArrayView, but not the other way around. Other allowed
- // conversions include
- // ArrayView to ArrayView or ArrayView,
- // std::vector to ArrayView or ArrayView,
- // const std::vector to ArrayView,
- // Buffer to ArrayView or ArrayView, and
- // const Buffer to ArrayView.
- template > &&
- Size == array_view_internal::kArrayViewVarSize &&
- HasDataAndSize::value>* = nullptr>
- ArrayView(U& u) // NOLINT
- : ArrayView(u.data(), u.size()) {}
-
- template > &&
- Size == array_view_internal::kArrayViewVarSize &&
- HasDataAndSize::value>* = nullptr>
- ArrayView(const U& u) // NOLINT(runtime/explicit)
- : ArrayView(u.data(), u.size()) {}
-
- // Indexing and iteration. These allow mutation even if the ArrayView is
- // const, because the ArrayView doesn't own the array. (To prevent mutation,
- // use a const element type.)
- T& operator[](size_t idx) const {
- RTC_DCHECK_LT(idx, this->size());
- RTC_DCHECK(this->data());
- return this->data()[idx];
- }
- T* begin() const { return this->data(); }
- T* end() const { return this->data() + this->size(); }
- const T* cbegin() const { return this->data(); }
- const T* cend() const { return this->data() + this->size(); }
- std::reverse_iterator rbegin() const {
- return std::make_reverse_iterator(end());
- }
- std::reverse_iterator rend() const {
- return std::make_reverse_iterator(begin());
- }
- std::reverse_iterator crbegin() const {
- return std::make_reverse_iterator(cend());
- }
- std::reverse_iterator crend() const {
- return std::make_reverse_iterator(cbegin());
- }
-
- ArrayView subview(size_t offset, size_t size) const {
- return offset < this->size()
- ? ArrayView(this->data() + offset,
- std::min(size, this->size() - offset))
- : ArrayView();
- }
- ArrayView subview(size_t offset) const {
- return subview(offset, this->size());
- }
-};
-
-// Comparing two ArrayViews compares their (pointer,size) pairs; it does *not*
-// dereference the pointers.
-template
-bool operator==(const ArrayView& a, const ArrayView& b) {
- return a.data() == b.data() && a.size() == b.size();
-}
-template
-bool operator!=(const ArrayView& a, const ArrayView& b) {
- return !(a == b);
-}
-
-// Variable-size ArrayViews are the size of two pointers; fixed-size ArrayViews
-// are the size of one pointer. (And as a special case, fixed-size ArrayViews
-// of size 0 require no storage.)
-static_assert(sizeof(ArrayView) == 2 * sizeof(int*), "");
-static_assert(sizeof(ArrayView) == sizeof(int*), "");
-static_assert(std::is_empty>::value, "");
+template
+using ArrayView = std::span;
+// TODO: bugs.webrtc.org/439801349 - deprecate when unused by WebRTC
template
inline ArrayView MakeArrayView(T* data, size_t size) {
return ArrayView(data, size);
}
-// Only for primitive types that have the same size and aligment.
-// Allow reinterpret cast of the array view to another primitive type of the
-// same size.
-// Template arguments order is (U, T, Size) to allow deduction of the template
-// arguments in client calls: reinterpret_array_view(array_view).
-template
-inline ArrayView reinterpret_array_view(ArrayView view) {
- static_assert(sizeof(U) == sizeof(T) && alignof(U) == alignof(T),
- "ArrayView reinterpret_cast is only supported for casting "
- "between views that represent the same chunk of memory.");
- static_assert(
- std::is_fundamental::value && std::is_fundamental::value,
- "ArrayView reinterpret_cast is only supported for casting between "
- "fundamental types.");
- return ArrayView(reinterpret_cast(view.data()), view.size());
-}
-
} // namespace webrtc
diff --git a/api/array_view_unittest.cc b/api/array_view_unittest.cc
index f424cd2ff6c..ae0f830a82b 100644
--- a/api/array_view_unittest.cc
+++ b/api/array_view_unittest.cc
@@ -13,6 +13,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -70,10 +71,10 @@ TEST(ArrayViewDeathTest, TestConstructFromPtrAndArray) {
EXPECT_EQ(arr, wf.data());
ArrayView q(arr, 0);
EXPECT_EQ(0u, q.size());
- EXPECT_EQ(nullptr, q.data());
+ EXPECT_TRUE(q.empty());
ArrayView qf(arr, 0);
static_assert(qf.size() == 0, "");
- EXPECT_EQ(nullptr, qf.data());
+ EXPECT_TRUE(qf.empty());
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
// DCHECK error (nullptr with nonzero size).
EXPECT_DEATH(ArrayView(static_cast(nullptr), 5), "");
@@ -428,7 +429,8 @@ TEST(ArrayViewDeathTest, TestIndexing) {
EXPECT_EQ('Y', y[2]);
EXPECT_EQ('X', z[3]);
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
- EXPECT_DEATH(z[8], ""); // DCHECK error (index out of bounds).
+ // DCHECK error (index out of bounds).
+ EXPECT_DEATH(std::ignore = z[8], "");
#endif
}
@@ -436,7 +438,6 @@ TEST(ArrayViewTest, TestIterationEmpty) {
// Variable-size.
ArrayView>>> av;
EXPECT_EQ(av.begin(), av.end());
- EXPECT_EQ(av.cbegin(), av.cend());
for (auto& e : av) {
EXPECT_TRUE(false);
EXPECT_EQ(42u, e.size()); // Dummy use of e to prevent unused var warning.
@@ -445,7 +446,6 @@ TEST(ArrayViewTest, TestIterationEmpty) {
// Fixed-size.
ArrayView>>, 0> af;
EXPECT_EQ(af.begin(), af.end());
- EXPECT_EQ(af.cbegin(), af.cend());
for (auto& e : af) {
EXPECT_TRUE(false);
EXPECT_EQ(42u, e.size()); // Dummy use of e to prevent unused var warning.
@@ -456,13 +456,11 @@ TEST(ArrayViewTest, TestReverseIterationEmpty) {
// Variable-size.
ArrayView>>> av;
EXPECT_EQ(av.rbegin(), av.rend());
- EXPECT_EQ(av.crbegin(), av.crend());
EXPECT_TRUE(av.empty());
// Fixed-size.
ArrayView>>, 0> af;
EXPECT_EQ(af.begin(), af.end());
- EXPECT_EQ(af.cbegin(), af.cend());
EXPECT_TRUE(af.empty());
}
@@ -470,9 +468,7 @@ TEST(ArrayViewTest, TestIterationVariable) {
char arr[] = "Arrr!";
ArrayView av(arr);
EXPECT_EQ('A', *av.begin());
- EXPECT_EQ('A', *av.cbegin());
EXPECT_EQ('\0', *(av.end() - 1));
- EXPECT_EQ('\0', *(av.cend() - 1));
char i = 0;
for (auto& e : av) {
EXPECT_EQ(arr + i, &e);
@@ -491,16 +487,9 @@ TEST(ArrayViewTest, TestReverseIterationVariable) {
char arr[] = "Arrr!";
ArrayView av(arr);
EXPECT_EQ('\0', *av.rbegin());
- EXPECT_EQ('\0', *av.crbegin());
EXPECT_EQ('A', *(av.rend() - 1));
- EXPECT_EQ('A', *(av.crend() - 1));
- const char* cit = av.cend() - 1;
- for (auto crit = av.crbegin(); crit != av.crend(); ++crit, --cit) {
- EXPECT_EQ(*cit, *crit);
- }
-
- char* it = av.end() - 1;
+ auto it = av.end() - 1;
for (auto rit = av.rbegin(); rit != av.rend(); ++rit, --it) {
EXPECT_EQ(*it, *rit);
}
@@ -510,9 +499,7 @@ TEST(ArrayViewTest, TestIterationFixed) {
char arr[] = "Arrr!";
ArrayView av(arr);
EXPECT_EQ('A', *av.begin());
- EXPECT_EQ('A', *av.cbegin());
EXPECT_EQ('\0', *(av.end() - 1));
- EXPECT_EQ('\0', *(av.cend() - 1));
char i = 0;
for (auto& e : av) {
EXPECT_EQ(arr + i, &e);
@@ -531,16 +518,9 @@ TEST(ArrayViewTest, TestReverseIterationFixed) {
char arr[] = "Arrr!";
ArrayView av(arr);
EXPECT_EQ('\0', *av.rbegin());
- EXPECT_EQ('\0', *av.crbegin());
EXPECT_EQ('A', *(av.rend() - 1));
- EXPECT_EQ('A', *(av.crend() - 1));
- const char* cit = av.cend() - 1;
- for (auto crit = av.crbegin(); crit != av.crend(); ++crit, --cit) {
- EXPECT_EQ(*cit, *crit);
- }
-
- char* it = av.end() - 1;
+ auto it = av.end() - 1;
for (auto rit = av.rbegin(); rit != av.rend(); ++rit, --it) {
EXPECT_EQ(*it, *rit);
}
@@ -551,81 +531,84 @@ TEST(ArrayViewTest, TestEmpty) {
const int a[] = {1, 2, 3};
EXPECT_FALSE(ArrayView(a).empty());
- static_assert(ArrayView::empty(), "");
- static_assert(!ArrayView::empty(), "");
+ static_assert(ArrayView().empty());
}
-TEST(ArrayViewTest, TestCompare) {
+TEST(ArrayViewTest, TestSubSpanVariable) {
int a[] = {1, 2, 3};
- int b[] = {1, 2, 3};
-
- EXPECT_EQ(ArrayView(a), ArrayView(a));
- EXPECT_EQ((ArrayView(a)), (ArrayView(a)));
- EXPECT_EQ(ArrayView(a), (ArrayView(a)));
- EXPECT_EQ(ArrayView(), ArrayView());
- EXPECT_EQ(ArrayView(), ArrayView(a, 0));
- EXPECT_EQ(ArrayView(a, 0), ArrayView(b, 0));
- EXPECT_EQ((ArrayView(a, 0)), ArrayView());
-
- EXPECT_NE(ArrayView(a), ArrayView(b));
- EXPECT_NE((ArrayView(a)), (ArrayView(b)));
- EXPECT_NE((ArrayView(a)), ArrayView(b));
- EXPECT_NE(ArrayView(a), ArrayView());
- EXPECT_NE(ArrayView(a), ArrayView(a, 2));
- EXPECT_NE((ArrayView(a)), (ArrayView(a, 2)));
+ ArrayView av(a);
+
+ EXPECT_THAT(av.subspan(0), ElementsAre(1, 2, 3));
+ EXPECT_THAT(av.subspan(1), ElementsAre(2, 3));
+ EXPECT_THAT(av.subspan(2), ElementsAre(3));
+ EXPECT_THAT(av.subspan(3), IsEmpty());
+
+ EXPECT_THAT(av.subspan(1, 0), IsEmpty());
+ EXPECT_THAT(av.subspan(1, 1), ElementsAre(2));
+ EXPECT_THAT(av.subspan(1, 2), ElementsAre(2, 3));
}
-TEST(ArrayViewTest, TestSubViewVariable) {
+TEST(ArrayViewTest, TestSubSpanWithInvalidInput) {
int a[] = {1, 2, 3};
ArrayView av(a);
+ EXPECT_DEATH_IF_SUPPORTED(std::ignore = av.subspan(4), "");
+ EXPECT_DEATH_IF_SUPPORTED(std::ignore = av.subspan(1, 3), "");
+}
- EXPECT_EQ(av.subview(0), av);
+TEST(ArrayViewTest, SubspanFixed) {
+ std::array a = {1, 2, 3};
+ ArrayView av(a);
- EXPECT_THAT(av.subview(1), ElementsAre(2, 3));
- EXPECT_THAT(av.subview(2), ElementsAre(3));
- EXPECT_THAT(av.subview(3), IsEmpty());
- EXPECT_THAT(av.subview(4), IsEmpty());
+ EXPECT_THAT(av.subspan<0>(), ElementsAre(1, 2, 3));
+ EXPECT_THAT(av.subspan<1>(), ElementsAre(2, 3));
+ EXPECT_THAT(av.subspan<2>(), ElementsAre(3));
+ EXPECT_THAT(av.subspan<3>(), IsEmpty());
- EXPECT_THAT(av.subview(1, 0), IsEmpty());
- EXPECT_THAT(av.subview(1, 1), ElementsAre(2));
- EXPECT_THAT(av.subview(1, 2), ElementsAre(2, 3));
- EXPECT_THAT(av.subview(1, 3), ElementsAre(2, 3));
-}
+ EXPECT_THAT((av.subspan<1, 0>()), IsEmpty());
+ EXPECT_THAT((av.subspan<1, 1>()), ElementsAre(2));
+ EXPECT_THAT((av.subspan<1, 2>()), ElementsAre(2, 3));
-TEST(ArrayViewTest, TestSubViewFixed) {
- int a[] = {1, 2, 3};
- ArrayView av(a);
+ EXPECT_EQ(av.subspan<1>().extent, 2u);
+ EXPECT_EQ((av.subspan<1, 1>().extent), 1u);
- EXPECT_EQ(av.subview(0), av);
+ ArrayView dynamic_av(a);
+ EXPECT_THAT(dynamic_av.subspan<0>(), ElementsAre(1, 2, 3));
+ EXPECT_THAT(dynamic_av.subspan<1>(), ElementsAre(2, 3));
+ EXPECT_THAT(dynamic_av.subspan<2>(), ElementsAre(3));
+ EXPECT_THAT(dynamic_av.subspan<3>(), IsEmpty());
- EXPECT_THAT(av.subview(1), ElementsAre(2, 3));
- EXPECT_THAT(av.subview(2), ElementsAre(3));
- EXPECT_THAT(av.subview(3), IsEmpty());
- EXPECT_THAT(av.subview(4), IsEmpty());
+ EXPECT_THAT((dynamic_av.subspan<1, 0>()), IsEmpty());
+ EXPECT_THAT((dynamic_av.subspan<1, 1>()), ElementsAre(2));
+ EXPECT_THAT((dynamic_av.subspan<1, 2>()), ElementsAre(2, 3));
- EXPECT_THAT(av.subview(1, 0), IsEmpty());
- EXPECT_THAT(av.subview(1, 1), ElementsAre(2));
- EXPECT_THAT(av.subview(1, 2), ElementsAre(2, 3));
- EXPECT_THAT(av.subview(1, 3), ElementsAre(2, 3));
+ EXPECT_EQ(dynamic_av.subspan<1>().extent, std::dynamic_extent);
+ EXPECT_EQ((dynamic_av.subspan<1, 1>()).extent, 1u);
}
-TEST(ArrayViewTest, TestReinterpretCastFixedSize) {
- uint8_t bytes[] = {1, 2, 3};
- ArrayView uint8_av(bytes);
- ArrayView int8_av = reinterpret_array_view(uint8_av);
- EXPECT_EQ(int8_av.size(), uint8_av.size());
- EXPECT_EQ(int8_av[0], 1);
- EXPECT_EQ(int8_av[1], 2);
- EXPECT_EQ(int8_av[2], 3);
+TEST(ArrayViewTest, FirstFixed) {
+ std::array a = {1, 2, 3};
+ ArrayView av(a);
+
+ EXPECT_THAT(av.first<0>(), IsEmpty());
+ EXPECT_THAT(av.first<1>(), ElementsAre(1));
+ EXPECT_THAT(av.first<2>(), ElementsAre(1, 2));
+ EXPECT_THAT(av.first<3>(), ElementsAre(1, 2, 3));
+
+ EXPECT_EQ((av.first<0>()).extent, 0u);
+ EXPECT_EQ((av.first<2>()).extent, 2u);
}
-TEST(ArrayViewTest, TestReinterpretCastVariableSize) {
- std::vector v = {1, 2, 3};
- ArrayView int8_av(v);
- ArrayView uint8_av = reinterpret_array_view(int8_av);
- EXPECT_EQ(int8_av.size(), uint8_av.size());
- EXPECT_EQ(uint8_av[0], 1);
- EXPECT_EQ(uint8_av[1], 2);
- EXPECT_EQ(uint8_av[2], 3);
+TEST(ArrayViewTest, LastFixed) {
+ std::array a = {1, 2, 3};
+ ArrayView av(a);
+
+ EXPECT_THAT(av.last<0>(), IsEmpty());
+ EXPECT_THAT(av.last<1>(), ElementsAre(3));
+ EXPECT_THAT(av.last<2>(), ElementsAre(2, 3));
+ EXPECT_THAT(av.last<3>(), ElementsAre(1, 2, 3));
+
+ EXPECT_EQ((av.last<0>()).extent, 0u);
+ EXPECT_EQ((av.last<2>()).extent, 2u);
}
+
} // namespace webrtc
diff --git a/api/audio/BUILD.gn b/api/audio/BUILD.gn
index a5e6ce506d4..578930e2ebf 100644
--- a/api/audio/BUILD.gn
+++ b/api/audio/BUILD.gn
@@ -48,11 +48,11 @@ rtc_library("audio_frame_api") {
]
deps = [
- "..:array_view",
"..:rtp_packet_info",
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:timeutils",
+ "//third_party/abseil-cpp/absl/algorithm:container",
]
}
@@ -83,7 +83,6 @@ rtc_library("audio_processing") {
":aec3_config",
":audio_processing_statistics",
":echo_control",
- "..:array_view",
"..:ref_count",
"..:scoped_refptr",
"../../rtc_base:checks",
@@ -175,10 +174,7 @@ rtc_source_set("echo_control") {
rtc_source_set("neural_residual_echo_estimator_api") {
visibility = [ "*" ]
sources = [ "neural_residual_echo_estimator.h" ]
- deps = [
- ":aec3_config",
- "..:array_view",
- ]
+ deps = [ ":aec3_config" ]
}
if (rtc_enable_protobuf) {
diff --git a/api/audio/audio_frame.cc b/api/audio/audio_frame.cc
index 04282394a4a..14afaded890 100644
--- a/api/audio/audio_frame.cc
+++ b/api/audio/audio_frame.cc
@@ -13,8 +13,9 @@
#include
#include
#include
+#include
-#include "api/array_view.h"
+#include "absl/algorithm/container.h"
#include "api/audio/audio_view.h"
#include "api/audio/channel_layout.h"
#include "api/rtp_packet_infos.h"
@@ -102,7 +103,7 @@ void AudioFrame::CopyFrom(const AudioFrame& src) {
// copying over new values. If we don't, msan might complain in some tests.
// Consider locking down construction, avoiding the default constructor and
// prefering construction that initializes all state.
- ClearSamples(data_);
+ absl::c_fill(data_, 0);
}
timestamp_ = src.timestamp_;
@@ -126,18 +127,16 @@ void AudioFrame::CopyFrom(const AudioFrame& src) {
}
const int16_t* AudioFrame::data() const {
- return muted_ ? zeroed_data().begin() : data_.data();
+ return muted_ ? zeroed_data().data() : data_.data();
}
InterleavedView AudioFrame::data_view() const {
// If you get a nullptr from `data_view()`, it's likely because the
// samples_per_channel_ and/or num_channels_ members haven't been properly
- // set. Since `data_view()` returns an InterleavedView<> (which internally
- // uses ArrayView<>), we inherit the behavior in InterleavedView when
- // the view size is 0 that ArrayView<>::data() returns nullptr. So, even when
- // an AudioFrame is muted and we want to return `zeroed_data()`, if
- // samples_per_channel_ or num_channels_ is 0, the view will point to
- // nullptr.
+ // set. `data_view()` returns an InterleavedView<> which internally
+ // uses std::span<>. So, even when an AudioFrame is muted and we want to
+ // return `zeroed_data()`, if samples_per_channel_ or num_channels_ is 0,
+ // the view might point to nullptr.
return InterleavedView(muted_ ? &zeroed_data()[0] : &data_[0],
samples_per_channel_, num_channels_);
}
@@ -147,7 +146,7 @@ int16_t* AudioFrame::mutable_data() {
// Consider instead if we should rather zero the buffer when `muted_` is set
// to `true`.
if (muted_) {
- ClearSamples(data_);
+ absl::c_fill(data_, 0);
muted_ = false;
}
return &data_[0];
@@ -170,7 +169,7 @@ InterleavedView AudioFrame::mutable_data(size_t samples_per_channel,
// Consider instead if we should rather zero the whole buffer when `muted_` is
// set to `true`.
if (muted_) {
- ClearSamples(data_, total_samples);
+ absl::c_fill_n(data_, total_samples, 0);
muted_ = false;
}
samples_per_channel_ = samples_per_channel;
@@ -212,9 +211,9 @@ void AudioFrame::SetSampleRateAndChannelSize(int sample_rate) {
}
// static
-ArrayView AudioFrame::zeroed_data() {
+std::span AudioFrame::zeroed_data() {
static int16_t* null_data = new int16_t[kMaxDataSizeSamples]();
- return ArrayView(null_data, kMaxDataSizeSamples);
+ return std::span(null_data, kMaxDataSizeSamples);
}
} // namespace webrtc
diff --git a/api/audio/audio_frame.h b/api/audio/audio_frame.h
index c4c93031e6e..095db192a4e 100644
--- a/api/audio/audio_frame.h
+++ b/api/audio/audio_frame.h
@@ -16,8 +16,8 @@
#include
#include
+#include
-#include "api/array_view.h"
#include "api/audio/audio_view.h"
#include "api/audio/channel_layout.h"
#include "api/rtp_packet_infos.h"
@@ -199,7 +199,7 @@ class AudioFrame {
// A permanently zeroed out buffer to represent muted frames. This is a
// header-only class, so the only way to avoid creating a separate zeroed
// buffer per translation unit is to wrap a static in an inline function.
- static ArrayView zeroed_data();
+ static std::span zeroed_data();
std::array data_;
bool muted_ = true;
diff --git a/api/audio/audio_processing.cc b/api/audio/audio_processing.cc
index 76f0d71ddc0..bf0af030fef 100644
--- a/api/audio/audio_processing.cc
+++ b/api/audio/audio_processing.cc
@@ -145,7 +145,6 @@ std::string AudioProcessing::Config::ToString() const {
<< capture_level_adjustment.analog_mic_gain_emulation.initial_level
<< " }}, high_pass_filter: { enabled: " << high_pass_filter.enabled
<< " }, echo_canceller: { enabled: " << echo_canceller.enabled
- << ", mobile_mode: " << echo_canceller.mobile_mode
<< ", enforce_high_pass_filtering: "
<< echo_canceller.enforce_high_pass_filtering
<< " }, noise_suppression: { enabled: " << noise_suppression.enabled
diff --git a/api/audio/audio_processing.h b/api/audio/audio_processing.h
index 0954c9a6aed..5517414204d 100644
--- a/api/audio/audio_processing.h
+++ b/api/audio/audio_processing.h
@@ -18,11 +18,11 @@
#include
#include
#include
+#include
#include
#include "absl/base/nullability.h"
#include "absl/strings/string_view.h"
-#include "api/array_view.h"
#include "api/audio/audio_processing_statistics.h"
#include "api/audio/echo_control.h"
#include "api/environment/environment.h"
@@ -80,7 +80,6 @@ class EchoDetector;
//
// AudioProcessing::Config config;
// config.echo_canceller.enabled = true;
-// config.echo_canceller.mobile_mode = false;
//
// config.gain_controller1.enabled = true;
// config.gain_controller1.mode =
@@ -140,20 +139,23 @@ class RTC_EXPORT AudioProcessing : public RefCountInterface {
// Ways to downmix a multi-channel track to mono.
enum class DownmixMethod {
kAverageChannels, // Average across channels.
- kUseFirstChannel // Use the first channel.
+ kUseFirstChannel, // Use the first channel.
+ kAdaptive // Adaptively choose how to downmix.
};
// Maximum allowed processing rate used internally. May only be set to
// 32000 or 48000 and any differing values will be treated as 48000.
int maximum_internal_processing_rate = 32000;
// Allow multi-channel processing of render audio.
- bool multi_channel_render = false;
+ bool multi_channel_render = true;
// Allow multi-channel processing of capture audio when AEC3 is active
- // or a custom AEC is injected..
- bool multi_channel_capture = false;
+ // or a custom AEC is injected.
+ bool multi_channel_capture = true;
// Indicates how to downmix multi-channel capture audio to mono (when
// needed).
DownmixMethod capture_downmix_method = DownmixMethod::kAverageChannels;
+ DownmixMethod capture_downmix_method_stereo_aec =
+ DownmixMethod::kAverageChannels;
} pipeline;
// Enabled the pre-amplifier. It amplifies the capture signal
@@ -196,10 +198,8 @@ class RTC_EXPORT AudioProcessing : public RefCountInterface {
struct EchoCanceller {
bool enabled = false;
- bool mobile_mode = false;
bool export_linear_aec_output = false;
- // Enforce the highpass filter to be on (has no effect for the mobile
- // mode).
+ // Enforce the highpass filter to be on.
bool enforce_high_pass_filtering = true;
} echo_canceller;
@@ -393,8 +393,8 @@ class RTC_EXPORT AudioProcessing : public RefCountInterface {
// Play-out audio device properties.
struct PlayoutAudioDeviceInfo {
- int id; // Identifies the audio device.
- int max_volume; // Maximum play-out volume.
+ int id = 0; // Identifies the audio device.
+ int max_volume = 0; // Maximum play-out volume.
};
RuntimeSetting() : type_(Type::kNotSpecified), value_(0.0f) {}
@@ -583,7 +583,7 @@ class RTC_EXPORT AudioProcessing : public RefCountInterface {
// representation of the input is returned. Returns true/false to indicate
// whether an output returned.
virtual bool GetLinearAecOutput(
- ArrayView> linear_output) const = 0;
+ std::span> linear_output) const = 0;
// This must be called prior to ProcessStream() if and only if adaptive analog
// gain control is enabled, to pass the current analog level from the audio
@@ -865,10 +865,10 @@ class EchoDetector : public RefCountInterface {
int num_render_channels) = 0;
// Analysis (not changing) of the first channel of the render signal.
- virtual void AnalyzeRenderAudio(ArrayView render_audio) = 0;
+ virtual void AnalyzeRenderAudio(std::span render_audio) = 0;
// Analysis (not changing) of the capture signal.
- virtual void AnalyzeCaptureAudio(ArrayView capture_audio) = 0;
+ virtual void AnalyzeCaptureAudio(std::span capture_audio) = 0;
struct Metrics {
std::optional echo_likelihood;
diff --git a/api/audio/audio_view.h b/api/audio/audio_view.h
index 7b7e1bd7af5..9f7291b9d83 100644
--- a/api/audio/audio_view.h
+++ b/api/audio/audio_view.h
@@ -13,10 +13,11 @@
#include
#include
+#include
#include
#include
-#include "api/array_view.h"
+#include "absl/algorithm/container.h"
#include "rtc_base/checks.h"
namespace webrtc {
@@ -33,7 +34,7 @@ namespace webrtc {
// buffer. Channels can be enumerated and accessing the individual channel
// data is done via MonoView<>.
//
-// The views are comparable to and built on ArrayView<> but add
+// The views are comparable to and built on std::span<> but add
// audio specific properties for the dimensions of the buffer and the above
// specialized [de]interleaved support.
//
@@ -44,14 +45,13 @@ namespace webrtc {
// can be either an single channel (mono) interleaved buffer (e.g. AudioFrame),
// or a de-interleaved channel (e.g. from AudioBuffer).
template
-using MonoView = ArrayView;
+using MonoView = std::span;
// The maximum number of audio channels supported by WebRTC encoders, decoders
// and the AudioFrame class.
-// TODO(peah, tommi): Should kMaxNumberOfAudioChannels be 16 rather than 24?
-// The reason is that AudioFrame's max number of samples is 7680, which can
-// hold 16 10ms 16bit channels at 48 kHz (and not 24 channels).
-static constexpr size_t kMaxNumberOfAudioChannels = 24;
+// AudioFrame's max number of samples is 7680, which can hold 16 10ms 16bit
+// channels at 48 kHz.
+static constexpr size_t kMaxNumberOfAudioChannels = 16;
// InterleavedView<> is a view over an interleaved audio buffer (e.g. from
// AudioFrame).
@@ -59,6 +59,8 @@ template
class InterleavedView {
public:
using value_type = T;
+ using iterator = typename std::span::iterator;
+ using const_iterator = typename std::span::iterator;
InterleavedView() = default;
@@ -88,7 +90,7 @@ class InterleavedView {
size_t num_channels() const { return num_channels_; }
size_t samples_per_channel() const { return samples_per_channel_; }
- ArrayView data() const { return data_; }
+ std::span data() const { return data_; }
bool empty() const { return data_.empty(); }
size_t size() const { return data_.size(); }
@@ -112,14 +114,16 @@ class InterleavedView {
}
T& operator[](size_t idx) const { return data_[idx]; }
- T* begin() const { return data_.begin(); }
- T* end() const { return data_.end(); }
- const T* cbegin() const { return data_.cbegin(); }
- const T* cend() const { return data_.cend(); }
- std::reverse_iterator rbegin() const { return data_.rbegin(); }
- std::reverse_iterator rend() const { return data_.rend(); }
- std::reverse_iterator crbegin() const { return data_.crbegin(); }
- std::reverse_iterator crend() const { return data_.crend(); }
+ iterator begin() const { return data_.begin(); }
+ iterator end() const { return data_.end(); }
+ const_iterator cbegin() const { return data_.begin(); }
+ const_iterator cend() const { return data_.end(); }
+ std::reverse_iterator rbegin() const { return data_.rbegin(); }
+ std::reverse_iterator rend() const { return data_.rend(); }
+ std::reverse_iterator crbegin() const {
+ return data_.rbegin();
+ }
+ std::reverse_iterator crend() const { return data_.rend(); }
private:
// TODO(tommi): Consider having these both be stored as uint16_t to
@@ -127,7 +131,7 @@ class InterleavedView {
// construction.
size_t num_channels_ = 0u;
size_t samples_per_channel_ = 0u;
- ArrayView data_;
+ std::span data_;
};
template
@@ -207,7 +211,7 @@ class DeinterleavedView {
void Clear() {
for (size_t i = 0u; i < num_channels_; ++i) {
MonoView view = (*this)[i];
- ClearSamples(view);
+ absl::c_fill(view, 0);
}
}
@@ -304,22 +308,6 @@ void CopySamples(D& destination, const S& source) {
source.size() * sizeof(typename S::value_type));
}
-// Sets all the samples in a view to 0. This template function is a simple
-// wrapper around `memset()` but adds the benefit of automatically calculating
-// the byte size from the number of samples and sample type.
-template
-void ClearSamples(T& view) {
- memset(&view[0], 0, view.size() * sizeof(typename T::value_type));
-}
-
-// Same as `ClearSamples()` above but allows for clearing only the first
-// `sample_count` number of samples.
-template
-void ClearSamples(T& view, size_t sample_count) {
- RTC_DCHECK_LE(sample_count, view.size());
- memset(&view[0], 0, sample_count * sizeof(typename T::value_type));
-}
-
} // namespace webrtc
#endif // API_AUDIO_AUDIO_VIEW_H_
diff --git a/api/audio/neural_residual_echo_estimator.h b/api/audio/neural_residual_echo_estimator.h
index b4936adc607..974bc672631 100644
--- a/api/audio/neural_residual_echo_estimator.h
+++ b/api/audio/neural_residual_echo_estimator.h
@@ -12,8 +12,8 @@
#define API_AUDIO_NEURAL_RESIDUAL_ECHO_ESTIMATOR_H_
#include
+#include
-#include "api/array_view.h"
#include "api/audio/echo_canceller3_config.h"
namespace webrtc {
@@ -45,17 +45,25 @@ class NeuralResidualEchoEstimator {
// Other inputs:
// * dominant_nearend: True if dominant nearend is active
virtual void Estimate(const Block& render,
- ArrayView> y,
- ArrayView> e,
- ArrayView> S2,
- ArrayView> Y2,
- ArrayView> E2,
+ std::span> y,
+ std::span> e,
+ std::span> S2,
+ std::span> Y2,
+ std::span> E2,
bool dominant_nearend,
- ArrayView> R2,
- ArrayView> R2_unbounded) = 0;
+ std::span> R2,
+ std::span> R2_unbounded) = 0;
// Returns a recommended AEC3 configuration for this estimator.
virtual EchoCanceller3Config GetConfiguration(bool multi_channel) const = 0;
+
+ // Adjusts the provided AEC3 suppressor configuration based on the estimator's
+ // requirements.
+ virtual EchoCanceller3Config::Suppressor AdjustConfig(
+ const EchoCanceller3Config::Suppressor& config) const = 0;
+
+ // Resets the internal state of the estimator.
+ virtual void Reset() = 0;
};
} // namespace webrtc
diff --git a/api/audio/test/BUILD.gn b/api/audio/test/BUILD.gn
index b1060faae33..edd3dcd701a 100644
--- a/api/audio/test/BUILD.gn
+++ b/api/audio/test/BUILD.gn
@@ -23,7 +23,6 @@ if (rtc_include_tests) {
deps = [
"..:aec3_config",
"..:audio_frame_api",
- "../..:array_view",
"../../../modules/audio_processing:aec3_config_json",
"../../../rtc_base:checks",
"../../../test:test_support",
diff --git a/api/audio/test/audio_frame_unittest.cc b/api/audio/test/audio_frame_unittest.cc
index 9ee422eea14..e9a1e6fd814 100644
--- a/api/audio/test/audio_frame_unittest.cc
+++ b/api/audio/test/audio_frame_unittest.cc
@@ -66,7 +66,7 @@ TEST(AudioFrameTest, FrameStartsZeroedAndMuted) {
EXPECT_TRUE(AllSamplesAre(0, frame));
}
-// TODO: b/335805780 - Delete test when `mutable_data()` returns ArrayView.
+// TODO: b/335805780 - Delete test when `mutable_data()` returns std::span.
TEST(AudioFrameTest, UnmutedFrameIsInitiallyZeroedLegacy) {
AudioFrame frame(kSampleRateHz, kNumChannelsMono, CHANNEL_LAYOUT_NONE);
frame.mutable_data();
@@ -88,7 +88,7 @@ TEST(AudioFrameTest, UnmutedFrameIsInitiallyZeroed) {
TEST(AudioFrameTest, MutedFrameBufferIsZeroed) {
AudioFrame frame;
int16_t* frame_data =
- frame.mutable_data(kSamplesPerChannel, kNumChannelsMono).begin();
+ frame.mutable_data(kSamplesPerChannel, kNumChannelsMono).data().data();
EXPECT_FALSE(frame.muted());
// Fill the reserved buffer with non-zero data.
for (size_t i = 0; i < frame.max_16bit_samples(); i++) {
diff --git a/api/audio/test/audio_view_unittest.cc b/api/audio/test/audio_view_unittest.cc
index e28c73ca11e..833f936fe7a 100644
--- a/api/audio/test/audio_view_unittest.cc
+++ b/api/audio/test/audio_view_unittest.cc
@@ -13,9 +13,9 @@
#include
#include
#include
+#include
#include
-#include "api/array_view.h"
#include "test/gtest.h"
namespace webrtc {
@@ -37,7 +37,7 @@ void Increment(int16_t& t) {
// Fills a given buffer with monotonically increasing values.
template
-void FillBuffer(ArrayView buffer) {
+void FillBuffer(std::span buffer) {
T value = {};
for (T& t : buffer) {
Increment(value);
@@ -50,7 +50,7 @@ void FillBuffer(ArrayView