| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "remoting/host/audio_volume_filter.h" |
| |
| #include "base/stl_util.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace remoting { |
| |
| namespace { |
| |
| class FakeAudioVolumeFilter : public AudioVolumeFilter { |
| public: |
| FakeAudioVolumeFilter(int silence_threshold) |
| : AudioVolumeFilter(silence_threshold) {} |
| ~FakeAudioVolumeFilter() override = default; |
| |
| void set_audio_level(float level) { level_ = level; } |
| |
| protected: |
| float GetAudioLevel() override { return level_; } |
| |
| private: |
| float level_ = 0; |
| }; |
| |
| } // namespace |
| |
| TEST(AudioVolumeFilterTest, TwoChannels) { |
| int16_t samples[] = |
| {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10}; |
| FakeAudioVolumeFilter filter(0); |
| filter.set_audio_level(0.5f); |
| filter.Initialize(9, 2); |
| // After applying the audio volume, the |samples| should still pass the |
| // AudioSilenceDetector, AudioVolumeFilter::Apply() returns true under this |
| // condition. Ditto. |
| ASSERT_TRUE(filter.Apply(samples, base::size(samples) / 2)); |
| } |
| |
| TEST(AudioVolumeFilterTest, ThreeChannels) { |
| int16_t samples[] = |
| {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11}; |
| FakeAudioVolumeFilter filter(0); |
| filter.set_audio_level(0.5f); |
| filter.Initialize(6, 3); |
| ASSERT_TRUE(filter.Apply(samples, base::size(samples) / 3)); |
| } |
| |
| TEST(AudioVolumeFilterTest, SilentSamples) { |
| int16_t samples[] = |
| {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; |
| FakeAudioVolumeFilter filter(0); |
| filter.set_audio_level(0.5f); |
| filter.Initialize(9, 2); |
| ASSERT_FALSE(filter.Apply(samples, base::size(samples) / 2)); |
| } |
| |
| TEST(AudioVolumeFilterTest, AudioLevel0) { |
| int16_t samples[] = |
| {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10}; |
| FakeAudioVolumeFilter filter(0); |
| filter.set_audio_level(0); |
| filter.Initialize(9, 2); |
| ASSERT_FALSE(filter.Apply(samples, base::size(samples) / 2)); |
| } |
| |
| TEST(AudioVolumeFilterTest, SilentAfterApplying) { |
| int16_t samples[] = |
| {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; |
| FakeAudioVolumeFilter filter(0); |
| filter.set_audio_level(0.9f); |
| filter.Initialize(9, 2); |
| ASSERT_TRUE(filter.Apply(samples, base::size(samples) / 2)); |
| } |
| |
| } // namespace remoting |