AudioProcessing: Make minimum and maximum analog levels non-configurable
Remove analog_level_minimum and analog_level_maximum from AudioProcessing GainController1 and replace their use with fixed values 0 and 255, respectively. Bug: webrtc:12774 Change-Id: Ia4bfe5ed43a65f1587ed67f36bfbb2966b6fdf26 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/235822 Commit-Queue: Hanna Silen <silen@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35297}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
31b03e9d50
commit
cd59704f8d
@ -609,10 +609,6 @@ bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) {
|
|||||||
apm_config.gain_controller1.mode =
|
apm_config.gain_controller1.mode =
|
||||||
apm_config.gain_controller1.kAdaptiveAnalog;
|
apm_config.gain_controller1.kAdaptiveAnalog;
|
||||||
#endif
|
#endif
|
||||||
constexpr int kMinVolumeLevel = 0;
|
|
||||||
constexpr int kMaxVolumeLevel = 255;
|
|
||||||
apm_config.gain_controller1.analog_level_minimum = kMinVolumeLevel;
|
|
||||||
apm_config.gain_controller1.analog_level_maximum = kMaxVolumeLevel;
|
|
||||||
}
|
}
|
||||||
if (options.tx_agc_target_dbov) {
|
if (options.tx_agc_target_dbov) {
|
||||||
apm_config.gain_controller1.target_level_dbfs = *options.tx_agc_target_dbov;
|
apm_config.gain_controller1.target_level_dbfs = *options.tx_agc_target_dbov;
|
||||||
|
@ -760,8 +760,6 @@ class WebRtcVoiceEngineTestFake : public ::testing::TestWithParam<bool> {
|
|||||||
void VerifyGainControlEnabledCorrectly() {
|
void VerifyGainControlEnabledCorrectly() {
|
||||||
EXPECT_TRUE(apm_config_.gain_controller1.enabled);
|
EXPECT_TRUE(apm_config_.gain_controller1.enabled);
|
||||||
EXPECT_EQ(kDefaultAgcMode, apm_config_.gain_controller1.mode);
|
EXPECT_EQ(kDefaultAgcMode, apm_config_.gain_controller1.mode);
|
||||||
EXPECT_EQ(0, apm_config_.gain_controller1.analog_level_minimum);
|
|
||||||
EXPECT_EQ(255, apm_config_.gain_controller1.analog_level_maximum);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VerifyGainControlDefaultSettings() {
|
void VerifyGainControlDefaultSettings() {
|
||||||
|
@ -1867,7 +1867,6 @@ void AudioProcessingImpl::InitializeGainController1() {
|
|||||||
|
|
||||||
submodules_.gain_control->Initialize(num_proc_channels(),
|
submodules_.gain_control->Initialize(num_proc_channels(),
|
||||||
proc_sample_rate_hz());
|
proc_sample_rate_hz());
|
||||||
|
|
||||||
if (!config_.gain_controller1.analog_gain_controller.enabled) {
|
if (!config_.gain_controller1.analog_gain_controller.enabled) {
|
||||||
int error = submodules_.gain_control->set_mode(
|
int error = submodules_.gain_control->set_mode(
|
||||||
Agc1ConfigModeToInterfaceMode(config_.gain_controller1.mode));
|
Agc1ConfigModeToInterfaceMode(config_.gain_controller1.mode));
|
||||||
@ -1881,9 +1880,10 @@ void AudioProcessingImpl::InitializeGainController1() {
|
|||||||
error = submodules_.gain_control->enable_limiter(
|
error = submodules_.gain_control->enable_limiter(
|
||||||
config_.gain_controller1.enable_limiter);
|
config_.gain_controller1.enable_limiter);
|
||||||
RTC_DCHECK_EQ(kNoError, error);
|
RTC_DCHECK_EQ(kNoError, error);
|
||||||
|
constexpr int kAnalogLevelMinimum = 0;
|
||||||
|
constexpr int kAnalogLevelMaximum = 255;
|
||||||
error = submodules_.gain_control->set_analog_level_limits(
|
error = submodules_.gain_control->set_analog_level_limits(
|
||||||
config_.gain_controller1.analog_level_minimum,
|
kAnalogLevelMinimum, kAnalogLevelMaximum);
|
||||||
config_.gain_controller1.analog_level_maximum);
|
|
||||||
RTC_DCHECK_EQ(kNoError, error);
|
RTC_DCHECK_EQ(kNoError, error);
|
||||||
|
|
||||||
submodules_.agc_manager.reset();
|
submodules_.agc_manager.reset();
|
||||||
|
@ -200,8 +200,6 @@ void EnableAllAPComponents(AudioProcessing* ap) {
|
|||||||
apm_config.gain_controller1.enabled = true;
|
apm_config.gain_controller1.enabled = true;
|
||||||
apm_config.gain_controller1.mode =
|
apm_config.gain_controller1.mode =
|
||||||
AudioProcessing::Config::GainController1::kAdaptiveAnalog;
|
AudioProcessing::Config::GainController1::kAdaptiveAnalog;
|
||||||
apm_config.gain_controller1.analog_level_minimum = 0;
|
|
||||||
apm_config.gain_controller1.analog_level_maximum = 255;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
apm_config.noise_suppression.enabled = true;
|
apm_config.noise_suppression.enabled = true;
|
||||||
@ -1079,18 +1077,15 @@ TEST_F(ApmTest, GainControl) {
|
|||||||
EXPECT_EQ(apm_->kNoError, ProcessStreamChooser(kFloatFormat));
|
EXPECT_EQ(apm_->kNoError, ProcessStreamChooser(kFloatFormat));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Testing level limits
|
// Testing level limits.
|
||||||
std::array<int, 4> kMinLevels = {0, 0, 255, 65000};
|
constexpr int kMinLevel = 0;
|
||||||
std::array<int, 4> kMaxLevels = {255, 1024, 65535, 65535};
|
constexpr int kMaxLevel = 255;
|
||||||
for (size_t i = 0; i < kMinLevels.size(); ++i) {
|
apm_->set_stream_analog_level(kMinLevel);
|
||||||
int min_level = kMinLevels[i];
|
EXPECT_EQ(apm_->kNoError, ProcessStreamChooser(kFloatFormat));
|
||||||
int max_level = kMaxLevels[i];
|
apm_->set_stream_analog_level((kMinLevel + kMaxLevel) / 2);
|
||||||
config.gain_controller1.analog_level_minimum = min_level;
|
EXPECT_EQ(apm_->kNoError, ProcessStreamChooser(kFloatFormat));
|
||||||
config.gain_controller1.analog_level_maximum = max_level;
|
apm_->set_stream_analog_level(kMaxLevel);
|
||||||
apm_->ApplyConfig(config);
|
|
||||||
apm_->set_stream_analog_level((min_level + max_level) / 2);
|
|
||||||
EXPECT_EQ(apm_->kNoError, ProcessStreamChooser(kFloatFormat));
|
EXPECT_EQ(apm_->kNoError, ProcessStreamChooser(kFloatFormat));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
|
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
|
||||||
@ -1124,44 +1119,18 @@ TEST_F(ApmDeathTest, GainControlDiesOnTooHighCompressionGainDb) {
|
|||||||
EXPECT_DEATH(apm_->ApplyConfig(config), "");
|
EXPECT_DEATH(apm_->ApplyConfig(config), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ApmDeathTest, GainControlDiesOnTooLowAnalogLevelLowerLimit) {
|
|
||||||
auto config = apm_->GetConfig();
|
|
||||||
config.gain_controller1.enabled = true;
|
|
||||||
config.gain_controller1.analog_level_minimum = -1;
|
|
||||||
EXPECT_DEATH(apm_->ApplyConfig(config), "");
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(ApmDeathTest, GainControlDiesOnTooHighAnalogLevelUpperLimit) {
|
|
||||||
auto config = apm_->GetConfig();
|
|
||||||
config.gain_controller1.enabled = true;
|
|
||||||
config.gain_controller1.analog_level_maximum = 65536;
|
|
||||||
EXPECT_DEATH(apm_->ApplyConfig(config), "");
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(ApmDeathTest, GainControlDiesOnInvertedAnalogLevelLimits) {
|
|
||||||
auto config = apm_->GetConfig();
|
|
||||||
config.gain_controller1.enabled = true;
|
|
||||||
config.gain_controller1.analog_level_minimum = 512;
|
|
||||||
config.gain_controller1.analog_level_maximum = 255;
|
|
||||||
EXPECT_DEATH(apm_->ApplyConfig(config), "");
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(ApmDeathTest, ApmDiesOnTooLowAnalogLevel) {
|
TEST_F(ApmDeathTest, ApmDiesOnTooLowAnalogLevel) {
|
||||||
auto config = apm_->GetConfig();
|
auto config = apm_->GetConfig();
|
||||||
config.gain_controller1.enabled = true;
|
config.gain_controller1.enabled = true;
|
||||||
config.gain_controller1.analog_level_minimum = 255;
|
|
||||||
config.gain_controller1.analog_level_maximum = 512;
|
|
||||||
apm_->ApplyConfig(config);
|
apm_->ApplyConfig(config);
|
||||||
EXPECT_DEATH(apm_->set_stream_analog_level(254), "");
|
EXPECT_DEATH(apm_->set_stream_analog_level(-1), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ApmDeathTest, ApmDiesOnTooHighAnalogLevel) {
|
TEST_F(ApmDeathTest, ApmDiesOnTooHighAnalogLevel) {
|
||||||
auto config = apm_->GetConfig();
|
auto config = apm_->GetConfig();
|
||||||
config.gain_controller1.enabled = true;
|
config.gain_controller1.enabled = true;
|
||||||
config.gain_controller1.analog_level_minimum = 255;
|
|
||||||
config.gain_controller1.analog_level_maximum = 512;
|
|
||||||
apm_->ApplyConfig(config);
|
apm_->ApplyConfig(config);
|
||||||
EXPECT_DEATH(apm_->set_stream_analog_level(513), "");
|
EXPECT_DEATH(apm_->set_stream_analog_level(256), "");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -2928,14 +2897,6 @@ TEST(AudioProcessing, GainController1ConfigEqual) {
|
|||||||
b.enable_limiter = a.enable_limiter;
|
b.enable_limiter = a.enable_limiter;
|
||||||
EXPECT_EQ(a, b);
|
EXPECT_EQ(a, b);
|
||||||
|
|
||||||
a.analog_level_minimum++;
|
|
||||||
b.analog_level_minimum = a.analog_level_minimum;
|
|
||||||
EXPECT_EQ(a, b);
|
|
||||||
|
|
||||||
a.analog_level_maximum--;
|
|
||||||
b.analog_level_maximum = a.analog_level_maximum;
|
|
||||||
EXPECT_EQ(a, b);
|
|
||||||
|
|
||||||
auto& a_analog = a.analog_gain_controller;
|
auto& a_analog = a.analog_gain_controller;
|
||||||
auto& b_analog = b.analog_gain_controller;
|
auto& b_analog = b.analog_gain_controller;
|
||||||
|
|
||||||
@ -2982,14 +2943,6 @@ TEST(AudioProcessing, GainController1ConfigNotEqual) {
|
|||||||
EXPECT_NE(a, b);
|
EXPECT_NE(a, b);
|
||||||
a = b;
|
a = b;
|
||||||
|
|
||||||
a.analog_level_minimum++;
|
|
||||||
EXPECT_NE(a, b);
|
|
||||||
a = b;
|
|
||||||
|
|
||||||
a.analog_level_maximum--;
|
|
||||||
EXPECT_NE(a, b);
|
|
||||||
a = b;
|
|
||||||
|
|
||||||
auto& a_analog = a.analog_gain_controller;
|
auto& a_analog = a.analog_gain_controller;
|
||||||
const auto& b_analog = b.analog_gain_controller;
|
const auto& b_analog = b.analog_gain_controller;
|
||||||
|
|
||||||
|
@ -60,8 +60,6 @@ bool Agc1Config::operator==(const Agc1Config& rhs) const {
|
|||||||
target_level_dbfs == rhs.target_level_dbfs &&
|
target_level_dbfs == rhs.target_level_dbfs &&
|
||||||
compression_gain_db == rhs.compression_gain_db &&
|
compression_gain_db == rhs.compression_gain_db &&
|
||||||
enable_limiter == rhs.enable_limiter &&
|
enable_limiter == rhs.enable_limiter &&
|
||||||
analog_level_minimum == rhs.analog_level_minimum &&
|
|
||||||
analog_level_maximum == rhs.analog_level_maximum &&
|
|
||||||
analog_lhs.enabled == analog_rhs.enabled &&
|
analog_lhs.enabled == analog_rhs.enabled &&
|
||||||
analog_lhs.startup_min_volume == analog_rhs.startup_min_volume &&
|
analog_lhs.startup_min_volume == analog_rhs.startup_min_volume &&
|
||||||
analog_lhs.clipped_level_min == analog_rhs.clipped_level_min &&
|
analog_lhs.clipped_level_min == analog_rhs.clipped_level_min &&
|
||||||
@ -153,8 +151,6 @@ std::string AudioProcessing::Config::ToString() const {
|
|||||||
<< ", target_level_dbfs: " << gain_controller1.target_level_dbfs
|
<< ", target_level_dbfs: " << gain_controller1.target_level_dbfs
|
||||||
<< ", compression_gain_db: " << gain_controller1.compression_gain_db
|
<< ", compression_gain_db: " << gain_controller1.compression_gain_db
|
||||||
<< ", enable_limiter: " << gain_controller1.enable_limiter
|
<< ", enable_limiter: " << gain_controller1.enable_limiter
|
||||||
<< ", analog_level_minimum: " << gain_controller1.analog_level_minimum
|
|
||||||
<< ", analog_level_maximum: " << gain_controller1.analog_level_maximum
|
|
||||||
<< ", analog_gain_controller { enabled: "
|
<< ", analog_gain_controller { enabled: "
|
||||||
<< gain_controller1.analog_gain_controller.enabled
|
<< gain_controller1.analog_gain_controller.enabled
|
||||||
<< ", startup_min_volume: "
|
<< ", startup_min_volume: "
|
||||||
|
@ -291,10 +291,6 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
|
|||||||
// target level. Otherwise, the signal will be compressed but not limited
|
// target level. Otherwise, the signal will be compressed but not limited
|
||||||
// above the target level.
|
// above the target level.
|
||||||
bool enable_limiter = true;
|
bool enable_limiter = true;
|
||||||
// Sets the minimum and maximum analog levels of the audio capture device.
|
|
||||||
// Must be set if an analog mode is used. Limited to [0, 65535].
|
|
||||||
int analog_level_minimum = 0;
|
|
||||||
int analog_level_maximum = 255;
|
|
||||||
|
|
||||||
// Enables the analog gain controller functionality.
|
// Enables the analog gain controller functionality.
|
||||||
struct AnalogGainController {
|
struct AnalogGainController {
|
||||||
@ -621,7 +617,7 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
|
|||||||
|
|
||||||
// This must be called prior to ProcessStream() if and only if adaptive analog
|
// 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
|
// gain control is enabled, to pass the current analog level from the audio
|
||||||
// HAL. Must be within the range provided in Config::GainController1.
|
// HAL. Must be within the range [0, 255].
|
||||||
virtual void set_stream_analog_level(int level) = 0;
|
virtual void set_stream_analog_level(int level) = 0;
|
||||||
|
|
||||||
// When an analog mode is set, this should be called after ProcessStream()
|
// When an analog mode is set, this should be called after ProcessStream()
|
||||||
|
Reference in New Issue
Block a user