Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(288)

Unified Diff: webrtc/tools/agc/agc_manager_unittest.cc

Issue 1299143003: Remove AgcManager. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Initialize volume Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/tools/agc/agc_manager_integrationtest.cc ('k') | webrtc/tools/agc/agc_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/tools/agc/agc_manager_unittest.cc
diff --git a/webrtc/tools/agc/agc_manager_unittest.cc b/webrtc/tools/agc/agc_manager_unittest.cc
deleted file mode 100644
index e54923b9654271fd24ab1123d031c56cb3465b68..0000000000000000000000000000000000000000
--- a/webrtc/tools/agc/agc_manager_unittest.cc
+++ /dev/null
@@ -1,741 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#include "webrtc/tools/agc/agc_manager.h"
-
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "webrtc/common_types.h"
-#include "webrtc/modules/audio_processing/agc/mock_agc.h"
-#include "webrtc/modules/audio_processing/include/mock_audio_processing.h"
-#include "webrtc/system_wrappers/interface/trace.h"
-#include "webrtc/voice_engine/mock/fake_voe_external_media.h"
-#include "webrtc/voice_engine/mock/mock_voe_volume_control.h"
-#include "webrtc/test/testsupport/trace_to_stderr.h"
-
-using ::testing::_;
-using ::testing::DoAll;
-using ::testing::Eq;
-using ::testing::Mock;
-using ::testing::Return;
-using ::testing::SetArgPointee;
-using ::testing::SetArgReferee;
-
-namespace webrtc {
-namespace {
-
-const int kSampleRateHz = 32000;
-const int kNumChannels = 1;
-const size_t kSamplesPerChannel = static_cast<size_t>(kSampleRateHz / 100);
-const float kAboveClippedThreshold = 0.2f;
-
-} // namespace
-
-class AgcManagerUnitTest : public ::testing::Test {
- protected:
- AgcManagerUnitTest()
- : media_(),
- volume_(),
- agc_(new MockAgc),
- audioproc_(new MockAudioProcessing),
- gctrl_(audioproc_->gain_control()),
- manager_(&media_, &volume_, agc_, audioproc_) {
- EXPECT_CALL(*gctrl_, Enable(true));
- ExpectInitialize();
- manager_.Enable(true);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(Return(false));
- // TODO(bjornv): Find a better solution that adds an initial volume here
- // instead of applying SetVolumeAndProcess(128u) in each test, but at the
- // same time can test a too low initial value.
- }
-
- void SetInitialVolume(unsigned int volume) {
- ExpectInitialize();
- manager_.CaptureDeviceChanged();
- ExpectCheckVolumeAndReset(volume);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_)).WillOnce(Return(false));
- PostProcCallback(1);
- }
-
- void SetVolumeAndProcess(unsigned int volume) {
- // Volume is checked on first process call.
- ExpectCheckVolumeAndReset(volume);
- PostProcCallback(1);
- }
-
- void ExpectCheckVolumeAndReset(unsigned int volume) {
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillOnce(DoAll(SetArgReferee<0>(volume), Return(0)));
- EXPECT_CALL(*agc_, Reset());
- }
-
- void ExpectVolumeChange(unsigned int current_volume,
- unsigned int new_volume) {
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillOnce(DoAll(SetArgReferee<0>(current_volume), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(Eq(new_volume))).WillOnce(Return(0));
- }
-
- void ExpectInitialize() {
- EXPECT_CALL(*gctrl_, set_mode(GainControl::kFixedDigital));
- EXPECT_CALL(*gctrl_, set_target_level_dbfs(2));
- EXPECT_CALL(*gctrl_, set_compression_gain_db(7));
- EXPECT_CALL(*gctrl_, enable_limiter(true));
- }
-
- void PreProcCallback(int num_calls) {
- for (int i = 0; i < num_calls; ++i) {
- media_.CallProcess(kRecordingPreprocessing, NULL, kSamplesPerChannel,
- kSampleRateHz, kNumChannels);
- }
- }
-
- void PostProcCallback(int num_calls) {
- for (int i = 0; i < num_calls; ++i) {
- EXPECT_CALL(*agc_, Process(_, _, _)).WillOnce(Return(0));
- EXPECT_CALL(*audioproc_, ProcessStream(_)).WillOnce(Return(0));
- media_.CallProcess(kRecordingAllChannelsMixed, NULL, kSamplesPerChannel,
- kSampleRateHz, kNumChannels);
- }
- }
-
- ~AgcManagerUnitTest() {
- EXPECT_CALL(volume_, Release()).WillOnce(Return(0));
- }
-
- FakeVoEExternalMedia media_;
- MockVoEVolumeControl volume_;
- MockAgc* agc_;
- MockAudioProcessing* audioproc_;
- MockGainControl* gctrl_;
- AgcManager manager_;
- test::TraceToStderr trace_to_stderr;
-};
-
-TEST_F(AgcManagerUnitTest, MicVolumeResponseToRmsError) {
- SetVolumeAndProcess(128u);
- // Compressor default; no residual error.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(5), Return(true)));
- PostProcCallback(1);
-
- // Inside the compressor's window; no change of volume.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(10), Return(true)));
- PostProcCallback(1);
-
- // Above the compressor's window; volume should be increased.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(11), Return(true)));
- ExpectVolumeChange(128u, 130u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(20), Return(true)));
- ExpectVolumeChange(130u, 168u);
- PostProcCallback(1);
-
- // Inside the compressor's window; no change of volume.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(5), Return(true)));
- PostProcCallback(1);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(0), Return(true)));
- PostProcCallback(1);
-
- // Below the compressor's window; volume should be decreased.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-1), Return(true)));
- ExpectVolumeChange(168u, 167u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-1), Return(true)));
- ExpectVolumeChange(167u, 163u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-9), Return(true)));
- ExpectVolumeChange(163u, 129u);
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, MicVolumeIsLimited) {
- SetVolumeAndProcess(128u);
- // Maximum upwards change is limited.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(30), Return(true)));
- ExpectVolumeChange(128u, 183u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(30), Return(true)));
- ExpectVolumeChange(183u, 243u);
- PostProcCallback(1);
-
- // Won't go higher than the maximum.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(30), Return(true)));
- ExpectVolumeChange(243u, 255u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-1), Return(true)));
- ExpectVolumeChange(255u, 254u);
- PostProcCallback(1);
-
- // Maximum downwards change is limited.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-40), Return(true)));
- ExpectVolumeChange(254u, 194u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-40), Return(true)));
- ExpectVolumeChange(194u, 137u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-40), Return(true)));
- ExpectVolumeChange(137u, 88u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-40), Return(true)));
- ExpectVolumeChange(88u, 54u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-40), Return(true)));
- ExpectVolumeChange(54u, 33u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-40), Return(true)));
- ExpectVolumeChange(33u, 18u);
- PostProcCallback(1);
-
- // Won't go lower than the minimum.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-40), Return(true)));
- ExpectVolumeChange(18u, 12u);
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, CompressorStepsTowardsTarget) {
- SetVolumeAndProcess(128u);
- // Compressor default; no call to set_compression_gain_db.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(5), Return(true)))
- .WillRepeatedly(Return(false));
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(20);
-
- // Moves slowly upwards.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(9), Return(true)))
- .WillRepeatedly(Return(false));
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(8)).WillOnce(Return(0));
- PostProcCallback(1);
-
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(9)).WillOnce(Return(0));
- PostProcCallback(1);
-
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(20);
-
- // Moves slowly downward, then reverses before reaching the original target.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(5), Return(true)))
- .WillRepeatedly(Return(false));
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(8)).WillOnce(Return(0));
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(9), Return(true)))
- .WillRepeatedly(Return(false));
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(9)).WillOnce(Return(0));
- PostProcCallback(1);
-
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(20);
-}
-
-TEST_F(AgcManagerUnitTest, CompressorErrorIsDeemphasized) {
- SetVolumeAndProcess(128u);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(10), Return(true)))
- .WillRepeatedly(Return(false));
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(8)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(9)).WillOnce(Return(0));
- PostProcCallback(1);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(20);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(0), Return(true)))
- .WillRepeatedly(Return(false));
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(8)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(7)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(6)).WillOnce(Return(0));
- PostProcCallback(1);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(_)).Times(0);
- PostProcCallback(20);
-}
-
-TEST_F(AgcManagerUnitTest, CompressorReachesMaximum) {
- SetVolumeAndProcess(128u);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(10), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(10), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(10), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(10), Return(true)))
- .WillRepeatedly(Return(false));
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(8)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(9)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(10)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(11)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(12)).WillOnce(Return(0));
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, CompressorReachesMinimum) {
- SetVolumeAndProcess(128u);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(0), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(0), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(0), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(0), Return(true)))
- .WillRepeatedly(Return(false));
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(6)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(5)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(4)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(3)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(2)).WillOnce(Return(0));
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, NoActionWhileMuted) {
- SetVolumeAndProcess(128u);
- manager_.SetCaptureMuted(true);
- media_.CallProcess(kRecordingAllChannelsMixed, NULL, kSamplesPerChannel,
- kSampleRateHz, kNumChannels);
-}
-
-TEST_F(AgcManagerUnitTest, UnmutingChecksVolumeWithoutRaising) {
- SetVolumeAndProcess(128u);
- manager_.SetCaptureMuted(true);
- manager_.SetCaptureMuted(false);
- ExpectCheckVolumeAndReset(127u);
- // SetMicVolume should not be called.
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(Return(false));
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, UnmutingRaisesTooLowVolume) {
- SetVolumeAndProcess(128u);
- manager_.SetCaptureMuted(true);
- manager_.SetCaptureMuted(false);
- ExpectCheckVolumeAndReset(11u);
- EXPECT_CALL(volume_, SetMicVolume(Eq(12u))).WillOnce(Return(0));
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(Return(false));
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, ChangingDevicesChecksVolume) {
- SetVolumeAndProcess(128u);
- ExpectInitialize();
- manager_.CaptureDeviceChanged();
- ExpectCheckVolumeAndReset(128u);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(Return(false));
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, LowInitialVolumeIsRaised) {
- ExpectCheckVolumeAndReset(11u);
-#if defined(WEBRTC_CHROMIUM_BUILD)
- // Should set MicVolume to kMinInitMicLevel = 85 if built with Chromium.
- EXPECT_CALL(volume_, SetMicVolume(Eq(85u))).WillOnce(Return(0));
-#else
- // Otherwise it will raise to the kMinMicLevel = 12.
- EXPECT_CALL(volume_, SetMicVolume(Eq(12u))).WillOnce(Return(0));
-#endif
- PostProcCallback(1);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(Return(false));
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, ManualLevelChangeResultsInNoSetMicCall) {
- SetVolumeAndProcess(128u);
- // Change outside of compressor's range, which would normally trigger a call
- // to SetMicVolume.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(11), Return(true)));
- // GetMicVolume returns a value outside of the quantization slack, indicating
- // a manual volume change.
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillOnce(DoAll(SetArgReferee<0>(154u), Return(0)));
- // SetMicVolume should not be called.
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(1);
- PostProcCallback(1);
-
- // Do the same thing, except downwards now.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-1), Return(true)));
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillOnce(DoAll(SetArgReferee<0>(100u), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(1);
- PostProcCallback(1);
-
- // And finally verify the AGC continues working without a manual change.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-1), Return(true)));
- ExpectVolumeChange(100u, 99u);
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, RecoveryAfterManualLevelChangeFromMax) {
- SetVolumeAndProcess(128u);
- // Force the mic up to max volume. Takes a few steps due to the residual
- // gain limitation.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillRepeatedly(DoAll(SetArgPointee<0>(30), Return(true)));
- ExpectVolumeChange(128u, 183u);
- PostProcCallback(1);
- ExpectVolumeChange(183u, 243u);
- PostProcCallback(1);
- ExpectVolumeChange(243u, 255u);
- PostProcCallback(1);
-
- // Manual change does not result in SetMicVolume call.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-1), Return(true)));
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillOnce(DoAll(SetArgReferee<0>(50u), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(1);
- PostProcCallback(1);
-
- // Continues working as usual afterwards.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(20), Return(true)));
- ExpectVolumeChange(50u, 69u);
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, RecoveryAfterManualLevelChangeBelowMin) {
- SetVolumeAndProcess(128u);
- // Manual change below min.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-1), Return(true)));
- // Don't set to zero, which will cause AGC to take no action.
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillOnce(DoAll(SetArgReferee<0>(1u), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(1);
- PostProcCallback(1);
-
- // Continues working as usual afterwards.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(11), Return(true)));
- ExpectVolumeChange(1u, 2u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(30), Return(true)));
- ExpectVolumeChange(2u, 11u);
- PostProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(20), Return(true)));
- ExpectVolumeChange(11u, 18u);
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, NoClippingHasNoImpact) {
- SetVolumeAndProcess(128u);
- EXPECT_CALL(volume_, GetMicVolume(_)).Times(0);
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(0);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _)).WillRepeatedly(Return(0));
- PreProcCallback(100);
-}
-
-TEST_F(AgcManagerUnitTest, ClippingUnderThresholdHasNoImpact) {
- SetVolumeAndProcess(128u);
- EXPECT_CALL(volume_, GetMicVolume(_)).Times(0);
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(0);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _)).WillOnce(Return(0.099));
- PreProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, ClippingLowersVolume) {
- SetVolumeAndProcess(128u);
- SetInitialVolume(255u);
-
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _)).WillOnce(Return(0.101));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(255u, 240u);
- PreProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, WaitingPeriodBetweenClippingChecks) {
- SetVolumeAndProcess(128u);
- SetInitialVolume(255u);
-
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(255u, 240u);
- PreProcCallback(1);
-
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillRepeatedly(Return(kAboveClippedThreshold));
- EXPECT_CALL(volume_, GetMicVolume(_)).Times(0);
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(0);
- PreProcCallback(300);
-
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(240u, 225u);
- PreProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, ClippingLoweringIsLimited) {
- SetVolumeAndProcess(128u);
- SetInitialVolume(180u);
-
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(180u, 170u);
- PreProcCallback(1);
-
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillRepeatedly(Return(kAboveClippedThreshold));
- EXPECT_CALL(volume_, GetMicVolume(_)).Times(0);
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(0);
- PreProcCallback(1000);
-}
-
-TEST_F(AgcManagerUnitTest, ClippingMaxIsRespectedWhenEqualToLevel) {
- SetVolumeAndProcess(128u);
- SetInitialVolume(255u);
-
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(255u, 240u);
- PreProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillRepeatedly(DoAll(SetArgPointee<0>(30), Return(true)));
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillRepeatedly(DoAll(SetArgReferee<0>(240u), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- PostProcCallback(10);
-}
-
-TEST_F(AgcManagerUnitTest, ClippingMaxIsRespectedWhenHigherThanLevel) {
- SetVolumeAndProcess(128u);
- SetInitialVolume(200u);
-
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(200u, 185u);
- PreProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillRepeatedly(DoAll(SetArgPointee<0>(40), Return(true)));
- ExpectVolumeChange(185u, 240u);
- PostProcCallback(1);
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillRepeatedly(DoAll(SetArgReferee<0>(240u), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- PostProcCallback(10);
-}
-
-TEST_F(AgcManagerUnitTest, MaxCompressionIsIncreasedAfterClipping) {
- SetVolumeAndProcess(128u);
- SetInitialVolume(210u);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(210u, 195u);
- PreProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(11), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(11), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(11), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(11), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(11), Return(true)))
- .WillRepeatedly(Return(false));
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(8)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(9)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(10)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(11)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(12)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(13)).WillOnce(Return(0));
- PostProcCallback(1);
-
- // Continue clipping until we hit the maximum surplus compression.
- PreProcCallback(300);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(195u, 180u);
- PreProcCallback(1);
-
- PreProcCallback(300);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(180u, 170u);
- PreProcCallback(1);
-
- // Current level is now at the minimum, but the maximum allowed level still
- // has more to decrease.
- PreProcCallback(300);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- PreProcCallback(1);
-
- PreProcCallback(300);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- PreProcCallback(1);
-
- PreProcCallback(300);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- PreProcCallback(1);
-
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(16), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(16), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(16), Return(true)))
- .WillOnce(DoAll(SetArgPointee<0>(16), Return(true)))
- .WillRepeatedly(Return(false));
- PostProcCallback(19);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(14)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(15)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(16)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(17)).WillOnce(Return(0));
- PostProcCallback(20);
- EXPECT_CALL(*gctrl_, set_compression_gain_db(18)).WillOnce(Return(0));
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, UserCanRaiseVolumeAfterClipping) {
- SetVolumeAndProcess(128u);
- SetInitialVolume(225u);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(*agc_, Reset()).Times(1);
- ExpectVolumeChange(225u, 210u);
- PreProcCallback(1);
-
- // High enough error to trigger a volume check.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(14), Return(true)));
- // User changed the volume.
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillOnce(DoAll(SetArgReferee<0>(250u), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(1);
- PostProcCallback(1);
-
- // Move down...
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(-10), Return(true)));
- ExpectVolumeChange(250u, 210u);
- PostProcCallback(1);
- // And back up to the new max established by the user.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(40), Return(true)));
- ExpectVolumeChange(210u, 250u);
- PostProcCallback(1);
- // Will not move above new maximum.
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillOnce(DoAll(SetArgPointee<0>(30), Return(true)));
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillRepeatedly(DoAll(SetArgReferee<0>(250u), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- PostProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, ClippingDoesNotPullLowVolumeBackUp) {
- SetVolumeAndProcess(128u);
- SetInitialVolume(80u);
- EXPECT_CALL(*agc_, AnalyzePreproc(_, _))
- .WillOnce(Return(kAboveClippedThreshold));
- EXPECT_CALL(volume_, GetMicVolume(_)).Times(0);
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- EXPECT_CALL(*agc_, Reset()).Times(0);
- PreProcCallback(1);
-}
-
-TEST_F(AgcManagerUnitTest, TakesNoActionOnZeroMicVolume) {
- SetVolumeAndProcess(128u);
- EXPECT_CALL(*agc_, GetRmsErrorDb(_))
- .WillRepeatedly(DoAll(SetArgPointee<0>(30), Return(true)));
- EXPECT_CALL(volume_, GetMicVolume(_))
- .WillRepeatedly(DoAll(SetArgReferee<0>(0), Return(0)));
- EXPECT_CALL(volume_, SetMicVolume(_)).Times(0);
- PostProcCallback(10);
-}
-
-} // namespace webrtc
« no previous file with comments | « webrtc/tools/agc/agc_manager_integrationtest.cc ('k') | webrtc/tools/agc/agc_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698