| Index: webrtc/modules/audio_processing/agc/agc_unittest.cc
|
| diff --git a/webrtc/modules/audio_processing/agc/agc_unittest.cc b/webrtc/modules/audio_processing/agc/agc_unittest.cc
|
| deleted file mode 100644
|
| index 8c6278f40e727908da4b943cbd6278f18e8c7897..0000000000000000000000000000000000000000
|
| --- a/webrtc/modules/audio_processing/agc/agc_unittest.cc
|
| +++ /dev/null
|
| @@ -1,162 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2012 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/modules/audio_processing/agc/agc.h"
|
| -
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -#include "webrtc/modules/include/module_common_types.h"
|
| -#include "webrtc/test/testsupport/fileutils.h"
|
| -#include "webrtc/tools/agc/test_utils.h"
|
| -
|
| -using ::testing::_;
|
| -using ::testing::AllOf;
|
| -using ::testing::AtLeast;
|
| -using ::testing::Eq;
|
| -using ::testing::Gt;
|
| -using ::testing::InSequence;
|
| -using ::testing::Lt;
|
| -using ::testing::Mock;
|
| -using ::testing::SaveArg;
|
| -
|
| -namespace webrtc {
|
| -namespace {
|
| -
|
| -// The tested values depend on this assumed gain.
|
| -const int kMaxGain = 80;
|
| -
|
| -MATCHER_P(GtPointee, p, "") { return arg > *p; }
|
| -MATCHER_P(LtPointee, p, "") { return arg < *p; }
|
| -
|
| -class AgcChecker {
|
| - public:
|
| - MOCK_METHOD2(LevelChanged, void(int iterations, int level));
|
| -};
|
| -
|
| -class AgcTest : public ::testing::Test {
|
| - protected:
|
| - AgcTest()
|
| - : agc_(),
|
| - checker_(),
|
| - mic_level_(128) {
|
| - }
|
| -
|
| - // A gain of <= -100 will zero out the signal.
|
| - void RunAgc(int iterations, float gain_db) {
|
| - FILE* input_file = fopen(
|
| - test::ResourcePath("voice_engine/audio_long16", "pcm").c_str(), "rb");
|
| - ASSERT_TRUE(input_file != NULL);
|
| -
|
| - AudioFrame frame;
|
| - frame.sample_rate_hz_ = 16000;
|
| - frame.num_channels_ = 1;
|
| - frame.samples_per_channel_ = frame.sample_rate_hz_ / 100;
|
| - const size_t length = frame.samples_per_channel_ * frame.num_channels_;
|
| -
|
| - float gain = Db2Linear(gain_db);
|
| - if (gain_db <= -100) {
|
| - gain = 0;
|
| - }
|
| -
|
| - for (int i = 0; i < iterations; ++i) {
|
| - ASSERT_EQ(length, fread(frame.data_, sizeof(int16_t), length,
|
| - input_file));
|
| - SimulateMic(kMaxGain, mic_level_, &frame);
|
| - ApplyGainLinear(gain, &frame);
|
| - ASSERT_GE(agc_.Process(frame), 0);
|
| -
|
| - int mic_level = agc_.MicLevel();
|
| - if (mic_level != mic_level_) {
|
| - printf("mic_level=%d\n", mic_level);
|
| - checker_.LevelChanged(i, mic_level);
|
| - }
|
| - mic_level_ = mic_level;
|
| - }
|
| - fclose(input_file);
|
| - }
|
| -
|
| - Agc agc_;
|
| - AgcChecker checker_;
|
| - // Stores mic level between multiple runs of RunAgc in one test.
|
| - int mic_level_;
|
| -};
|
| -
|
| -TEST_F(AgcTest, UpwardsChangeIsLimited) {
|
| - {
|
| - InSequence seq;
|
| - EXPECT_CALL(checker_, LevelChanged(Lt(500), Eq(179))).Times(1);
|
| - EXPECT_CALL(checker_, LevelChanged(_, Gt(179))).Times(AtLeast(1));
|
| - }
|
| - RunAgc(1000, -40);
|
| -}
|
| -
|
| -TEST_F(AgcTest, DownwardsChangeIsLimited) {
|
| - {
|
| - InSequence seq;
|
| - EXPECT_CALL(checker_, LevelChanged(Lt(500), Eq(77))).Times(1);
|
| - EXPECT_CALL(checker_, LevelChanged(_, Lt(77))).Times(AtLeast(1));
|
| - }
|
| - RunAgc(1000, 40);
|
| -}
|
| -
|
| -TEST_F(AgcTest, MovesUpToMaxAndDownToMin) {
|
| - int last_level = 128;
|
| - EXPECT_CALL(checker_, LevelChanged(_, GtPointee(&last_level)))
|
| - .Times(AtLeast(2))
|
| - .WillRepeatedly(SaveArg<1>(&last_level));
|
| - RunAgc(1000, -30);
|
| - EXPECT_EQ(255, last_level);
|
| - Mock::VerifyAndClearExpectations(&checker_);
|
| -
|
| - EXPECT_CALL(checker_, LevelChanged(_, LtPointee(&last_level)))
|
| - .Times(AtLeast(2))
|
| - .WillRepeatedly(SaveArg<1>(&last_level));
|
| - RunAgc(1000, 50);
|
| - EXPECT_EQ(1, last_level);
|
| -}
|
| -
|
| -TEST_F(AgcTest, HandlesZeroSignal) {
|
| - int last_level = 128;
|
| - // Doesn't respond to a zero signal.
|
| - EXPECT_CALL(checker_, LevelChanged(_, _)).Times(0);
|
| - RunAgc(1000, -100);
|
| - Mock::VerifyAndClearExpectations(&checker_);
|
| -
|
| - // Reacts as usual afterwards.
|
| - EXPECT_CALL(checker_, LevelChanged(_, GtPointee(&last_level)))
|
| - .Times(AtLeast(2))
|
| - .WillRepeatedly(SaveArg<1>(&last_level));
|
| - RunAgc(500, -20);
|
| -}
|
| -
|
| -TEST_F(AgcTest, ReachesSteadyState) {
|
| - int last_level = 128;
|
| - EXPECT_CALL(checker_, LevelChanged(_, _))
|
| - .Times(AtLeast(2))
|
| - .WillRepeatedly(SaveArg<1>(&last_level));
|
| - RunAgc(1000, -20);
|
| - Mock::VerifyAndClearExpectations(&checker_);
|
| -
|
| - // If the level changes, it should be in a narrow band around the previous
|
| - // adaptation.
|
| - EXPECT_CALL(checker_, LevelChanged(_,
|
| - AllOf(Gt(last_level * 0.95), Lt(last_level * 1.05))))
|
| - .Times(AtLeast(0));
|
| - RunAgc(1000, -20);
|
| -}
|
| -
|
| -// TODO(ajm): Add this test; requires measuring the signal RMS.
|
| -TEST_F(AgcTest, AdaptsToCorrectRMS) {
|
| -}
|
| -
|
| -} // namespace
|
| -} // namespace webrtc
|
| -
|
|
|