From cfbda697ecc952a5c6f193b6e29179d0402948d2 Mon Sep 17 00:00:00 2001 From: Hanna Silen Date: Tue, 4 Oct 2022 16:06:19 +0200 Subject: [PATCH] ClippingPredictor/Evaluator/LevelBuffer and GainMap: Move to agc2 Bug: webrtc:7494 Change-Id: If88795fe34a73faa267a9c0bd5250e36455d4d81 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/277741 Reviewed-by: Alessio Bazzica Commit-Queue: Hanna Silen Cr-Commit-Position: refs/heads/main@{#38296} --- modules/audio_processing/BUILD.gn | 3 +- modules/audio_processing/agc/BUILD.gn | 58 +------------- .../agc/agc_manager_direct.cc | 2 +- .../audio_processing/agc/agc_manager_direct.h | 4 +- modules/audio_processing/agc2/BUILD.gn | 78 +++++++++++++++++++ .../{agc => agc2}/clipping_predictor.cc | 6 +- .../{agc => agc2}/clipping_predictor.h | 7 +- .../clipping_predictor_evaluator.cc | 2 +- .../clipping_predictor_evaluator.h | 6 +- .../clipping_predictor_evaluator_unittest.cc | 2 +- .../clipping_predictor_level_buffer.cc | 2 +- .../clipping_predictor_level_buffer.h | 6 +- ...lipping_predictor_level_buffer_unittest.cc | 2 +- .../clipping_predictor_unittest.cc | 2 +- .../{agc => agc2}/gain_map_internal.h | 6 +- .../test/fake_recording_device.cc | 18 ++--- 16 files changed, 115 insertions(+), 89 deletions(-) rename modules/audio_processing/{agc => agc2}/clipping_predictor.cc (98%) rename modules/audio_processing/{agc => agc2}/clipping_predictor.h (92%) rename modules/audio_processing/{agc => agc2}/clipping_predictor_evaluator.cc (99%) rename modules/audio_processing/{agc => agc2}/clipping_predictor_evaluator.h (95%) rename modules/audio_processing/{agc => agc2}/clipping_predictor_evaluator_unittest.cc (99%) rename modules/audio_processing/{agc => agc2}/clipping_predictor_level_buffer.cc (96%) rename modules/audio_processing/{agc => agc2}/clipping_predictor_level_buffer.h (91%) rename modules/audio_processing/{agc => agc2}/clipping_predictor_level_buffer_unittest.cc (98%) rename modules/audio_processing/{agc => agc2}/clipping_predictor_unittest.cc (99%) rename modules/audio_processing/{agc => agc2}/gain_map_internal.h (91%) diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn index 4b64d0213d..18d99e54c1 100644 --- a/modules/audio_processing/BUILD.gn +++ b/modules/audio_processing/BUILD.gn @@ -418,6 +418,7 @@ if (rtc_include_tests) { "agc2:adaptive_digital_unittests", "agc2:biquad_filter_unittests", "agc2:fixed_digital_unittests", + "agc2:input_volume_controller_unittests", "agc2:noise_estimator_unittests", "agc2:test_utils", "agc2:vad_wrapper_unittests", @@ -525,7 +526,7 @@ if (rtc_include_tests) { "../../rtc_base:logging", "../../rtc_base:safe_conversions", "../../rtc_base:safe_minmax", - "agc:gain_map", + "agc2:gain_map", ] absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] } diff --git a/modules/audio_processing/agc/BUILD.gn b/modules/audio_processing/agc/BUILD.gn index a0cbd7a988..670a2030a8 100644 --- a/modules/audio_processing/agc/BUILD.gn +++ b/modules/audio_processing/agc/BUILD.gn @@ -19,10 +19,7 @@ rtc_library("agc") { ] configs += [ "..:apm_debug_dump" ] deps = [ - ":clipping_predictor", - ":clipping_predictor_evaluator", ":gain_control_interface", - ":gain_map", ":level_estimation", "..:api", "..:apm_logging", @@ -37,6 +34,9 @@ rtc_library("agc") { "../../../rtc_base:safe_minmax", "../../../system_wrappers:field_trial", "../../../system_wrappers:metrics", + "../agc2:clipping_predictor", + "../agc2:clipping_predictor_evaluator", + "../agc2:gain_map", "../vad", ] absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] @@ -56,48 +56,6 @@ rtc_library("analog_gain_stats_reporter") { 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", - ] - absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] -} - rtc_library("level_estimation") { sources = [ "agc.cc", @@ -147,19 +105,12 @@ rtc_library("legacy_agc") { } } -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", ] @@ -168,9 +119,6 @@ if (rtc_include_tests) { deps = [ ":agc", ":analog_gain_stats_reporter", - ":clipping_predictor", - ":clipping_predictor_evaluator", - ":clipping_predictor_level_buffer", ":gain_control_interface", ":level_estimation", "..:mocks", diff --git a/modules/audio_processing/agc/agc_manager_direct.cc b/modules/audio_processing/agc/agc_manager_direct.cc index 8203bc6646..df6f48a993 100644 --- a/modules/audio_processing/agc/agc_manager_direct.cc +++ b/modules/audio_processing/agc/agc_manager_direct.cc @@ -16,7 +16,7 @@ #include "api/array_view.h" #include "common_audio/include/audio_util.h" #include "modules/audio_processing/agc/gain_control.h" -#include "modules/audio_processing/agc/gain_map_internal.h" +#include "modules/audio_processing/agc2/gain_map_internal.h" #include "modules/audio_processing/include/audio_frame_view.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" diff --git a/modules/audio_processing/agc/agc_manager_direct.h b/modules/audio_processing/agc/agc_manager_direct.h index 5c29ddf204..1197812798 100644 --- a/modules/audio_processing/agc/agc_manager_direct.h +++ b/modules/audio_processing/agc/agc_manager_direct.h @@ -17,8 +17,8 @@ #include "absl/types/optional.h" #include "api/array_view.h" #include "modules/audio_processing/agc/agc.h" -#include "modules/audio_processing/agc/clipping_predictor.h" -#include "modules/audio_processing/agc/clipping_predictor_evaluator.h" +#include "modules/audio_processing/agc2/clipping_predictor.h" +#include "modules/audio_processing/agc2/clipping_predictor_evaluator.h" #include "modules/audio_processing/audio_buffer.h" #include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/logging/apm_data_dumper.h" diff --git a/modules/audio_processing/agc2/BUILD.gn b/modules/audio_processing/agc2/BUILD.gn index 64a7b38c02..d6e684e588 100644 --- a/modules/audio_processing/agc2/BUILD.gn +++ b/modules/audio_processing/agc2/BUILD.gn @@ -69,6 +69,51 @@ rtc_library("biquad_filter") { ] } +rtc_library("clipping_predictor") { + visibility = [ + "../agc:agc", + "./*", + ] + + sources = [ + "clipping_predictor.cc", + "clipping_predictor.h", + "clipping_predictor_level_buffer.cc", + "clipping_predictor_level_buffer.h", + ] + + deps = [ + ":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") { + visibility = [ + "../agc:agc", + "./*", + ] + + 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_source_set("common") { sources = [ "agc2_common.h" ] } @@ -126,6 +171,16 @@ rtc_library("gain_applier") { ] } +rtc_source_set("gain_map") { + visibility = [ + "..:analog_mic_simulation", + "../agc:agc", + "./*", + ] + + sources = [ "gain_map_internal.h" ] +} + rtc_library("noise_level_estimator") { sources = [ "noise_level_estimator.cc", @@ -256,6 +311,29 @@ rtc_library("fixed_digital_unittests") { ] } +rtc_library("input_volume_controller_unittests") { + testonly = true + sources = [ + "clipping_predictor_evaluator_unittest.cc", + "clipping_predictor_level_buffer_unittest.cc", + "clipping_predictor_unittest.cc", + ] + + configs += [ "..:apm_debug_dump" ] + + deps = [ + ":clipping_predictor", + ":clipping_predictor_evaluator", + ":gain_map", + "../../../rtc_base:checks", + "../../../rtc_base:random", + "../../../rtc_base:safe_conversions", + "../../../test:test_support", + ] + + absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] +} + rtc_library("noise_estimator_unittests") { testonly = true configs += [ "..:apm_debug_dump" ] diff --git a/modules/audio_processing/agc/clipping_predictor.cc b/modules/audio_processing/agc2/clipping_predictor.cc similarity index 98% rename from modules/audio_processing/agc/clipping_predictor.cc rename to modules/audio_processing/agc2/clipping_predictor.cc index 58b3a2769c..2bf5fb2e32 100644 --- a/modules/audio_processing/agc/clipping_predictor.cc +++ b/modules/audio_processing/agc2/clipping_predictor.cc @@ -8,14 +8,14 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "modules/audio_processing/agc/clipping_predictor.h" +#include "modules/audio_processing/agc2/clipping_predictor.h" #include #include #include "common_audio/include/audio_util.h" -#include "modules/audio_processing/agc/clipping_predictor_level_buffer.h" -#include "modules/audio_processing/agc/gain_map_internal.h" +#include "modules/audio_processing/agc2/clipping_predictor_level_buffer.h" +#include "modules/audio_processing/agc2/gain_map_internal.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" #include "rtc_base/numerics/safe_minmax.h" diff --git a/modules/audio_processing/agc/clipping_predictor.h b/modules/audio_processing/agc2/clipping_predictor.h similarity index 92% rename from modules/audio_processing/agc/clipping_predictor.h rename to modules/audio_processing/agc2/clipping_predictor.h index ee2b6ef1e7..14612508c0 100644 --- a/modules/audio_processing/agc/clipping_predictor.h +++ b/modules/audio_processing/agc2/clipping_predictor.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_H_ -#define MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_H_ +#ifndef MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_H_ +#define MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_H_ #include #include @@ -46,7 +46,6 @@ class ClippingPredictor { int default_step, int min_mic_level, int max_mic_level) const = 0; - }; // Creates a ClippingPredictor based on the provided `config`. When enabled, @@ -60,4 +59,4 @@ std::unique_ptr CreateClippingPredictor( } // namespace webrtc -#endif // MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_H_ +#endif // MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_H_ diff --git a/modules/audio_processing/agc/clipping_predictor_evaluator.cc b/modules/audio_processing/agc2/clipping_predictor_evaluator.cc similarity index 99% rename from modules/audio_processing/agc/clipping_predictor_evaluator.cc rename to modules/audio_processing/agc2/clipping_predictor_evaluator.cc index ed7198d119..0bda41bd75 100644 --- a/modules/audio_processing/agc/clipping_predictor_evaluator.cc +++ b/modules/audio_processing/agc2/clipping_predictor_evaluator.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "modules/audio_processing/agc/clipping_predictor_evaluator.h" +#include "modules/audio_processing/agc2/clipping_predictor_evaluator.h" #include diff --git a/modules/audio_processing/agc/clipping_predictor_evaluator.h b/modules/audio_processing/agc2/clipping_predictor_evaluator.h similarity index 95% rename from modules/audio_processing/agc/clipping_predictor_evaluator.h rename to modules/audio_processing/agc2/clipping_predictor_evaluator.h index 348f753493..084ae90071 100644 --- a/modules/audio_processing/agc/clipping_predictor_evaluator.h +++ b/modules/audio_processing/agc2/clipping_predictor_evaluator.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_EVALUATOR_H_ -#define MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_EVALUATOR_H_ +#ifndef MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_EVALUATOR_H_ +#define MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_EVALUATOR_H_ #include @@ -119,4 +119,4 @@ absl::optional ComputeClippingPredictionMetrics( } // namespace webrtc -#endif // MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_EVALUATOR_H_ +#endif // MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_EVALUATOR_H_ diff --git a/modules/audio_processing/agc/clipping_predictor_evaluator_unittest.cc b/modules/audio_processing/agc2/clipping_predictor_evaluator_unittest.cc similarity index 99% rename from modules/audio_processing/agc/clipping_predictor_evaluator_unittest.cc rename to modules/audio_processing/agc2/clipping_predictor_evaluator_unittest.cc index b2d2797ca5..8337d44bc3 100644 --- a/modules/audio_processing/agc/clipping_predictor_evaluator_unittest.cc +++ b/modules/audio_processing/agc2/clipping_predictor_evaluator_unittest.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "modules/audio_processing/agc/clipping_predictor_evaluator.h" +#include "modules/audio_processing/agc2/clipping_predictor_evaluator.h" #include #include diff --git a/modules/audio_processing/agc/clipping_predictor_level_buffer.cc b/modules/audio_processing/agc2/clipping_predictor_level_buffer.cc similarity index 96% rename from modules/audio_processing/agc/clipping_predictor_level_buffer.cc rename to modules/audio_processing/agc2/clipping_predictor_level_buffer.cc index bc33cda040..fe4cf2a154 100644 --- a/modules/audio_processing/agc/clipping_predictor_level_buffer.cc +++ b/modules/audio_processing/agc2/clipping_predictor_level_buffer.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "modules/audio_processing/agc/clipping_predictor_level_buffer.h" +#include "modules/audio_processing/agc2/clipping_predictor_level_buffer.h" #include #include diff --git a/modules/audio_processing/agc/clipping_predictor_level_buffer.h b/modules/audio_processing/agc2/clipping_predictor_level_buffer.h similarity index 91% rename from modules/audio_processing/agc/clipping_predictor_level_buffer.h rename to modules/audio_processing/agc2/clipping_predictor_level_buffer.h index f3e8368194..c9032773a6 100644 --- a/modules/audio_processing/agc/clipping_predictor_level_buffer.h +++ b/modules/audio_processing/agc2/clipping_predictor_level_buffer.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_LEVEL_BUFFER_H_ -#define MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_LEVEL_BUFFER_H_ +#ifndef MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_LEVEL_BUFFER_H_ +#define MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_LEVEL_BUFFER_H_ #include #include @@ -68,4 +68,4 @@ class ClippingPredictorLevelBuffer { } // namespace webrtc -#endif // MODULES_AUDIO_PROCESSING_AGC_CLIPPING_PREDICTOR_LEVEL_BUFFER_H_ +#endif // MODULES_AUDIO_PROCESSING_AGC2_CLIPPING_PREDICTOR_LEVEL_BUFFER_H_ diff --git a/modules/audio_processing/agc/clipping_predictor_level_buffer_unittest.cc b/modules/audio_processing/agc2/clipping_predictor_level_buffer_unittest.cc similarity index 98% rename from modules/audio_processing/agc/clipping_predictor_level_buffer_unittest.cc rename to modules/audio_processing/agc2/clipping_predictor_level_buffer_unittest.cc index 7e594a1eca..7af9a436c9 100644 --- a/modules/audio_processing/agc/clipping_predictor_level_buffer_unittest.cc +++ b/modules/audio_processing/agc2/clipping_predictor_level_buffer_unittest.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "modules/audio_processing/agc/clipping_predictor_level_buffer.h" +#include "modules/audio_processing/agc2/clipping_predictor_level_buffer.h" #include diff --git a/modules/audio_processing/agc/clipping_predictor_unittest.cc b/modules/audio_processing/agc2/clipping_predictor_unittest.cc similarity index 99% rename from modules/audio_processing/agc/clipping_predictor_unittest.cc rename to modules/audio_processing/agc2/clipping_predictor_unittest.cc index e848e1a724..af73107749 100644 --- a/modules/audio_processing/agc/clipping_predictor_unittest.cc +++ b/modules/audio_processing/agc2/clipping_predictor_unittest.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "modules/audio_processing/agc/clipping_predictor.h" +#include "modules/audio_processing/agc2/clipping_predictor.h" #include #include diff --git a/modules/audio_processing/agc/gain_map_internal.h b/modules/audio_processing/agc2/gain_map_internal.h similarity index 91% rename from modules/audio_processing/agc/gain_map_internal.h rename to modules/audio_processing/agc2/gain_map_internal.h index 547f0f312e..75e421899f 100644 --- a/modules/audio_processing/agc/gain_map_internal.h +++ b/modules/audio_processing/agc2/gain_map_internal.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef MODULES_AUDIO_PROCESSING_AGC_GAIN_MAP_INTERNAL_H_ -#define MODULES_AUDIO_PROCESSING_AGC_GAIN_MAP_INTERNAL_H_ +#ifndef MODULES_AUDIO_PROCESSING_AGC2_GAIN_MAP_INTERNAL_H_ +#define MODULES_AUDIO_PROCESSING_AGC2_GAIN_MAP_INTERNAL_H_ namespace webrtc { @@ -37,4 +37,4 @@ static const int kGainMap[kGainMapSize] = { } // namespace webrtc -#endif // MODULES_AUDIO_PROCESSING_AGC_GAIN_MAP_INTERNAL_H_ +#endif // MODULES_AUDIO_PROCESSING_AGC2_GAIN_MAP_INTERNAL_H_ diff --git a/modules/audio_processing/test/fake_recording_device.cc b/modules/audio_processing/test/fake_recording_device.cc index 3a35ee9d74..3fd80b2ede 100644 --- a/modules/audio_processing/test/fake_recording_device.cc +++ b/modules/audio_processing/test/fake_recording_device.cc @@ -14,7 +14,7 @@ #include #include "absl/types/optional.h" -#include "modules/audio_processing/agc/gain_map_internal.h" +#include "modules/audio_processing/agc2/gain_map_internal.h" #include "rtc_base/logging.h" #include "rtc_base/numerics/safe_conversions.h" #include "rtc_base/numerics/safe_minmax.h" @@ -94,8 +94,8 @@ class FakeRecordingDeviceLinear final : public FakeRecordingDeviceWorker { } }; -float ComputeAgc1LinearFactor(const absl::optional& undo_mic_level, - int mic_level) { +float ComputeAgcLinearFactor(const absl::optional& undo_mic_level, + int mic_level) { // If an undo level is specified, virtually restore the unmodified // microphone level; otherwise simulate the mic gain only. const int undo_level = @@ -105,14 +105,14 @@ float ComputeAgc1LinearFactor(const absl::optional& undo_mic_level, // Roughly dB-scale fake recording device. Valid levels are [0, 255]. The mic // applies a gain from kGainMap in agc/gain_map_internal.h. -class FakeRecordingDeviceAgc1 final : public FakeRecordingDeviceWorker { +class FakeRecordingDeviceAgc final : public FakeRecordingDeviceWorker { public: - explicit FakeRecordingDeviceAgc1(const int initial_mic_level) + explicit FakeRecordingDeviceAgc(const int initial_mic_level) : FakeRecordingDeviceWorker(initial_mic_level) {} - ~FakeRecordingDeviceAgc1() override = default; + ~FakeRecordingDeviceAgc() override = default; void ModifyBufferInt16(rtc::ArrayView buffer) override { const float scaling_factor = - ComputeAgc1LinearFactor(undo_mic_level_, mic_level_); + ComputeAgcLinearFactor(undo_mic_level_, mic_level_); const size_t number_of_samples = buffer.size(); int16_t* data = buffer.data(); for (size_t i = 0; i < number_of_samples; ++i) { @@ -121,7 +121,7 @@ class FakeRecordingDeviceAgc1 final : public FakeRecordingDeviceWorker { } void ModifyBufferFloat(ChannelBuffer* buffer) override { const float scaling_factor = - ComputeAgc1LinearFactor(undo_mic_level_, mic_level_); + ComputeAgcLinearFactor(undo_mic_level_, mic_level_); for (size_t c = 0; c < buffer->num_channels(); ++c) { for (size_t i = 0; i < buffer->num_frames(); ++i) { buffer->channels()[c][i] = @@ -145,7 +145,7 @@ FakeRecordingDevice::FakeRecordingDevice(int initial_mic_level, worker_ = std::make_unique(initial_mic_level); break; case 2: - worker_ = std::make_unique(initial_mic_level); + worker_ = std::make_unique(initial_mic_level); break; default: RTC_DCHECK_NOTREACHED();