Home | History | Annotate | Download | only in host
      1 // Copyright (c) 2012 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 
      5 #include "remoting/host/audio_silence_detector.h"
      6 
      7 #include "base/basictypes.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 
     10 namespace remoting {
     11 
     12 namespace {
     13 
     14 const int kSamplingRate = 1000;
     15 
     16 void TestSilenceDetector(AudioSilenceDetector* target,
     17                          const int16* samples, int samples_count,
     18                          bool silence_expected) {
     19   target->Reset(kSamplingRate, 1);
     20   bool silence_started = false;
     21   int threshold_length = 0;
     22   for (int i = 0; i < 3 * kSamplingRate / samples_count; ++i) {
     23     bool result = target->IsSilence(samples, samples_count);
     24     if (silence_started) {
     25       ASSERT_TRUE(result);
     26     } else if (result) {
     27       silence_started = true;
     28       threshold_length = i * samples_count;
     29     }
     30   }
     31 
     32   // Check that the silence was detected if it was expected.
     33   EXPECT_EQ(silence_expected, silence_started);
     34 
     35   if (silence_expected) {
     36     // Check that silence threshold is between 0.5 and 2 seconds.
     37     EXPECT_GE(threshold_length, kSamplingRate / 2);
     38     EXPECT_LE(threshold_length, kSamplingRate * 2);
     39   }
     40 }
     41 
     42 }  // namespace
     43 
     44 TEST(AudioSilenceDetectorTest, Silence) {
     45   const int16 kSamples[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
     46 
     47   AudioSilenceDetector target(0);
     48   TestSilenceDetector(&target, kSamples, arraysize(kSamples), true);
     49 }
     50 
     51 TEST(AudioSilenceDetectorTest, Sound) {
     52   const int16 kSamples[] = {65, 73, 83, 89, 92, -1, 5, 9, 123, 0};
     53 
     54   AudioSilenceDetector target(0);
     55   TestSilenceDetector(&target, kSamples, arraysize(kSamples), false);
     56 }
     57 
     58 TEST(AudioSilenceDetectorTest, Threshold) {
     59   const int16 kSamples[] = {0, 0, 0, 0, 1, 0, 0, -1, 0, 0};
     60 
     61   AudioSilenceDetector target1(0);
     62   TestSilenceDetector(&target1, kSamples, arraysize(kSamples), false);
     63 
     64   AudioSilenceDetector target2(1);
     65   TestSilenceDetector(&target2, kSamples, arraysize(kSamples), true);
     66 }
     67 
     68 }  // namespace remoting
     69