Files
platform-external-webrtc/modules/audio_processing/agc/BUILD.gn
Alessio Bazzica c7d0e4265c AGC1: min mic level override always applied
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}
2022-02-04 18:01:31 +00:00

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" ]
}
}