- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / host / audio_silence_detector_unittest.cc
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