audio_volume_filter_unittest.cc 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "remoting/host/audio_volume_filter.h"
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. namespace remoting {
  7. namespace {
  8. class FakeAudioVolumeFilter : public AudioVolumeFilter {
  9. public:
  10. FakeAudioVolumeFilter(int silence_threshold)
  11. : AudioVolumeFilter(silence_threshold) {}
  12. ~FakeAudioVolumeFilter() override = default;
  13. void set_audio_level(float level) { level_ = level; }
  14. protected:
  15. float GetAudioLevel() override { return level_; }
  16. private:
  17. float level_ = 0;
  18. };
  19. } // namespace
  20. TEST(AudioVolumeFilterTest, TwoChannels) {
  21. int16_t samples[] =
  22. {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10};
  23. FakeAudioVolumeFilter filter(0);
  24. filter.set_audio_level(0.5f);
  25. filter.Initialize(9, 2);
  26. // After applying the audio volume, the |samples| should still pass the
  27. // AudioSilenceDetector, AudioVolumeFilter::Apply() returns true under this
  28. // condition. Ditto.
  29. ASSERT_TRUE(filter.Apply(samples, std::size(samples) / 2));
  30. }
  31. TEST(AudioVolumeFilterTest, ThreeChannels) {
  32. int16_t samples[] =
  33. {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11};
  34. FakeAudioVolumeFilter filter(0);
  35. filter.set_audio_level(0.5f);
  36. filter.Initialize(6, 3);
  37. ASSERT_TRUE(filter.Apply(samples, std::size(samples) / 3));
  38. }
  39. TEST(AudioVolumeFilterTest, SilentSamples) {
  40. int16_t samples[] =
  41. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  42. FakeAudioVolumeFilter filter(0);
  43. filter.set_audio_level(0.5f);
  44. filter.Initialize(9, 2);
  45. ASSERT_FALSE(filter.Apply(samples, std::size(samples) / 2));
  46. }
  47. TEST(AudioVolumeFilterTest, AudioLevel0) {
  48. int16_t samples[] =
  49. {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10};
  50. FakeAudioVolumeFilter filter(0);
  51. filter.set_audio_level(0);
  52. filter.Initialize(9, 2);
  53. ASSERT_FALSE(filter.Apply(samples, std::size(samples) / 2));
  54. }
  55. TEST(AudioVolumeFilterTest, SilentAfterApplying) {
  56. int16_t samples[] =
  57. {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
  58. FakeAudioVolumeFilter filter(0);
  59. filter.set_audio_level(0.9f);
  60. filter.Initialize(9, 2);
  61. ASSERT_TRUE(filter.Apply(samples, std::size(samples) / 2));
  62. }
  63. } // namespace remoting