1 /*
2  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "modules/audio_processing/include/audio_processing.h"
12 
13 #include "rtc_base/strings/string_builder.h"
14 #include "rtc_base/system/arch.h"
15 
16 namespace webrtc {
17 namespace {
18 
NoiseSuppressionLevelToString(const AudioProcessing::Config::NoiseSuppression::Level & level)19 std::string NoiseSuppressionLevelToString(
20     const AudioProcessing::Config::NoiseSuppression::Level& level) {
21   switch (level) {
22     case AudioProcessing::Config::NoiseSuppression::Level::kLow:
23       return "Low";
24     case AudioProcessing::Config::NoiseSuppression::Level::kModerate:
25       return "Moderate";
26     case AudioProcessing::Config::NoiseSuppression::Level::kHigh:
27       return "High";
28     case AudioProcessing::Config::NoiseSuppression::Level::kVeryHigh:
29       return "VeryHigh";
30   }
31 }
32 
GainController1ModeToString(const AudioProcessing::Config::GainController1::Mode & mode)33 std::string GainController1ModeToString(
34     const AudioProcessing::Config::GainController1::Mode& mode) {
35   switch (mode) {
36     case AudioProcessing::Config::GainController1::Mode::kAdaptiveAnalog:
37       return "AdaptiveAnalog";
38     case AudioProcessing::Config::GainController1::Mode::kAdaptiveDigital:
39       return "AdaptiveDigital";
40     case AudioProcessing::Config::GainController1::Mode::kFixedDigital:
41       return "FixedDigital";
42   }
43 }
44 
GainController2LevelEstimatorToString(const AudioProcessing::Config::GainController2::LevelEstimator & level)45 std::string GainController2LevelEstimatorToString(
46     const AudioProcessing::Config::GainController2::LevelEstimator& level) {
47   switch (level) {
48     case AudioProcessing::Config::GainController2::LevelEstimator::kRms:
49       return "Rms";
50     case AudioProcessing::Config::GainController2::LevelEstimator::kPeak:
51       return "Peak";
52   }
53 }
54 
GetDefaultMaxInternalRate()55 int GetDefaultMaxInternalRate() {
56 #ifdef WEBRTC_ARCH_ARM_FAMILY
57   return 32000;
58 #else
59   return 48000;
60 #endif
61 }
62 
63 }  // namespace
64 
65 constexpr int AudioProcessing::kNativeSampleRatesHz[];
66 
SetRuntimeSetting(AudioProcessing::RuntimeSetting setting)67 void CustomProcessing::SetRuntimeSetting(
68     AudioProcessing::RuntimeSetting setting) {}
69 
Pipeline()70 AudioProcessing::Config::Pipeline::Pipeline()
71     : maximum_internal_processing_rate(GetDefaultMaxInternalRate()) {}
72 
ToString() const73 std::string AudioProcessing::Config::ToString() const {
74   char buf[1024];
75   rtc::SimpleStringBuilder builder(buf);
76   builder << "AudioProcessing::Config{ "
77              "pipeline: {"
78              "maximum_internal_processing_rate: "
79           << pipeline.maximum_internal_processing_rate
80           << ", multi_channel_render: " << pipeline.multi_channel_render
81           << ", "
82              ", multi_channel_capture: "
83           << pipeline.multi_channel_capture
84           << "}, "
85              "pre_amplifier: { enabled: "
86           << pre_amplifier.enabled
87           << ", fixed_gain_factor: " << pre_amplifier.fixed_gain_factor
88           << " }, high_pass_filter: { enabled: " << high_pass_filter.enabled
89           << " }, echo_canceller: { enabled: " << echo_canceller.enabled
90           << ", mobile_mode: " << echo_canceller.mobile_mode
91           << ", enforce_high_pass_filtering: "
92           << echo_canceller.enforce_high_pass_filtering
93           << " }, noise_suppression: { enabled: " << noise_suppression.enabled
94           << ", level: "
95           << NoiseSuppressionLevelToString(noise_suppression.level)
96           << " }, transient_suppression: { enabled: "
97           << transient_suppression.enabled
98           << " }, voice_detection: { enabled: " << voice_detection.enabled
99           << " }, gain_controller1: { enabled: " << gain_controller1.enabled
100           << ", mode: " << GainController1ModeToString(gain_controller1.mode)
101           << ", target_level_dbfs: " << gain_controller1.target_level_dbfs
102           << ", compression_gain_db: " << gain_controller1.compression_gain_db
103           << ", enable_limiter: " << gain_controller1.enable_limiter
104           << ", analog_level_minimum: " << gain_controller1.analog_level_minimum
105           << ", analog_level_maximum: " << gain_controller1.analog_level_maximum
106           << " }, gain_controller2: { enabled: " << gain_controller2.enabled
107           << ", fixed_digital: { gain_db: "
108           << gain_controller2.fixed_digital.gain_db
109           << " }, adaptive_digital: { enabled: "
110           << gain_controller2.adaptive_digital.enabled << ", level_estimator: "
111           << GainController2LevelEstimatorToString(
112                  gain_controller2.adaptive_digital.level_estimator)
113           << ", use_saturation_protector: "
114           << gain_controller2.adaptive_digital.use_saturation_protector
115           << ", extra_saturation_margin_db: "
116           << gain_controller2.adaptive_digital.extra_saturation_margin_db
117           << " } }, residual_echo_detector: { enabled: "
118           << residual_echo_detector.enabled
119           << " }, level_estimation: { enabled: " << level_estimation.enabled
120           << " } }";
121   return builder.str();
122 }
123 
124 }  // namespace webrtc
125