When the minimum mic level is overridden via the field trial named WebRTC-Audio-AgcMinMicLevelExperiment, AGC1 can still lower the gain beyond the minimum value (namely, when clipping is observed). This CL changes the behavior of the field trial. When specified, the override always applies and therefore the mic level is guaranteed to never become lower than what the field trial specifies. Tested: RTC call in Chromium with and without --force-fieldtrials=" WebRTC-Audio-AgcMinMicLevelExperiment/Enabled-255" Bug: chromium:1275566 Change-Id: I42ff45add54c11084f5ca6a2b95887c627c3c3aa Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/250141 Reviewed-by: Hanna Silen <silen@webrtc.org> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35914}
193 lines
4.9 KiB
Plaintext
193 lines
4.9 KiB
Plaintext
# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license
|
|
# that can be found in the LICENSE file in the root of the source
|
|
# tree. An additional intellectual property rights grant can be found
|
|
# in the file PATENTS. All contributing project authors may
|
|
# be found in the AUTHORS file in the root of the source tree.
|
|
|
|
import("../../../webrtc.gni")
|
|
|
|
rtc_source_set("gain_control_interface") {
|
|
sources = [ "gain_control.h" ]
|
|
}
|
|
|
|
rtc_library("agc") {
|
|
sources = [
|
|
"agc_manager_direct.cc",
|
|
"agc_manager_direct.h",
|
|
]
|
|
configs += [ "..:apm_debug_dump" ]
|
|
deps = [
|
|
":clipping_predictor",
|
|
":clipping_predictor_evaluator",
|
|
":gain_control_interface",
|
|
":gain_map",
|
|
":level_estimation",
|
|
"..:apm_logging",
|
|
"..:audio_buffer",
|
|
"..:audio_frame_view",
|
|
"../../../api:array_view",
|
|
"../../../common_audio",
|
|
"../../../common_audio:common_audio_c",
|
|
"../../../rtc_base:checks",
|
|
"../../../rtc_base:gtest_prod",
|
|
"../../../rtc_base:logging",
|
|
"../../../rtc_base:rtc_base_approved",
|
|
"../../../rtc_base:safe_minmax",
|
|
"../../../system_wrappers:field_trial",
|
|
"../../../system_wrappers:metrics",
|
|
"../vad",
|
|
]
|
|
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
|
}
|
|
|
|
rtc_library("analog_gain_stats_reporter") {
|
|
sources = [
|
|
"analog_gain_stats_reporter.cc",
|
|
"analog_gain_stats_reporter.h",
|
|
]
|
|
deps = [
|
|
"../../../rtc_base:gtest_prod",
|
|
"../../../rtc_base:logging",
|
|
"../../../rtc_base:safe_minmax",
|
|
"../../../system_wrappers:metrics",
|
|
]
|
|
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
|
}
|
|
|
|
rtc_library("clipping_predictor") {
|
|
sources = [
|
|
"clipping_predictor.cc",
|
|
"clipping_predictor.h",
|
|
]
|
|
deps = [
|
|
":clipping_predictor_level_buffer",
|
|
":gain_map",
|
|
"..:api",
|
|
"..:audio_frame_view",
|
|
"../../../common_audio",
|
|
"../../../rtc_base:checks",
|
|
"../../../rtc_base:logging",
|
|
"../../../rtc_base:safe_minmax",
|
|
]
|
|
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
|
}
|
|
|
|
rtc_library("clipping_predictor_evaluator") {
|
|
sources = [
|
|
"clipping_predictor_evaluator.cc",
|
|
"clipping_predictor_evaluator.h",
|
|
]
|
|
deps = [
|
|
"../../../rtc_base:checks",
|
|
"../../../rtc_base:logging",
|
|
]
|
|
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
|
}
|
|
|
|
rtc_library("clipping_predictor_level_buffer") {
|
|
sources = [
|
|
"clipping_predictor_level_buffer.cc",
|
|
"clipping_predictor_level_buffer.h",
|
|
]
|
|
deps = [
|
|
"../../../rtc_base:checks",
|
|
"../../../rtc_base:logging",
|
|
"../../../rtc_base:rtc_base_approved",
|
|
]
|
|
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
|
}
|
|
|
|
rtc_library("level_estimation") {
|
|
sources = [
|
|
"agc.cc",
|
|
"agc.h",
|
|
"loudness_histogram.cc",
|
|
"loudness_histogram.h",
|
|
"utility.cc",
|
|
"utility.h",
|
|
]
|
|
deps = [
|
|
"../../../api:array_view",
|
|
"../../../rtc_base:checks",
|
|
"../vad",
|
|
]
|
|
}
|
|
|
|
rtc_library("legacy_agc") {
|
|
visibility = [
|
|
":*",
|
|
"..:*",
|
|
] # Only targets in this file and in
|
|
# audio_processing can depend on
|
|
# this.
|
|
|
|
sources = [
|
|
"legacy/analog_agc.cc",
|
|
"legacy/analog_agc.h",
|
|
"legacy/digital_agc.cc",
|
|
"legacy/digital_agc.h",
|
|
"legacy/gain_control.h",
|
|
]
|
|
|
|
deps = [
|
|
"../../../common_audio",
|
|
"../../../common_audio:common_audio_c",
|
|
"../../../common_audio/third_party/ooura:fft_size_256",
|
|
"../../../rtc_base:checks",
|
|
"../../../rtc_base:rtc_base_approved",
|
|
"../../../system_wrappers",
|
|
]
|
|
|
|
if (rtc_build_with_neon) {
|
|
if (current_cpu != "arm64") {
|
|
# Enable compilation for the NEON instruction set.
|
|
suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
|
|
cflags = [ "-mfpu=neon" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
rtc_source_set("gain_map") {
|
|
sources = [ "gain_map_internal.h" ]
|
|
}
|
|
|
|
if (rtc_include_tests) {
|
|
rtc_library("agc_unittests") {
|
|
testonly = true
|
|
sources = [
|
|
"agc_manager_direct_unittest.cc",
|
|
"analog_gain_stats_reporter_unittest.cc",
|
|
"clipping_predictor_evaluator_unittest.cc",
|
|
"clipping_predictor_level_buffer_unittest.cc",
|
|
"clipping_predictor_unittest.cc",
|
|
"loudness_histogram_unittest.cc",
|
|
"mock_agc.h",
|
|
]
|
|
configs += [ "..:apm_debug_dump" ]
|
|
|
|
deps = [
|
|
":agc",
|
|
":analog_gain_stats_reporter",
|
|
":clipping_predictor",
|
|
":clipping_predictor_evaluator",
|
|
":clipping_predictor_level_buffer",
|
|
":gain_control_interface",
|
|
":level_estimation",
|
|
"..:mocks",
|
|
"../../../api:array_view",
|
|
"../../../rtc_base:checks",
|
|
"../../../rtc_base:rtc_base_approved",
|
|
"../../../rtc_base:safe_conversions",
|
|
"../../../rtc_base:stringutils",
|
|
"../../../system_wrappers:metrics",
|
|
"../../../test:field_trial",
|
|
"../../../test:fileutils",
|
|
"../../../test:test_support",
|
|
"//testing/gtest",
|
|
]
|
|
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
|
}
|
|
}
|