Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / voice_engine / test / auto_test / standard / volume_test.cc
1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10
11 #include "webrtc/voice_engine/test/auto_test/fixtures/after_streaming_fixture.h"
12
13 namespace {
14
15 void ExpectVolumeNear(int expected, int actual) {
16   // The hardware volume may be more coarsely quantized than [0, 255], so
17   // it is not always reasonable to expect to get exactly what we set. This
18   // allows for some error.
19   const int kMaxVolumeError = 10;
20   EXPECT_NEAR(expected, actual, kMaxVolumeError);
21   EXPECT_GE(actual, 0);
22   EXPECT_LE(actual, 255);
23 }
24
25 }  // namespace
26
27 class VolumeTest : public AfterStreamingFixture {
28 };
29
30 // TODO(phoglund): a number of tests are disabled here on Linux, all pending
31 // investigation in
32 // http://code.google.com/p/webrtc/issues/detail?id=367
33
34 TEST_F(VolumeTest, DefaultSpeakerVolumeIsAtMost255) {
35   unsigned int volume = 1000;
36   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
37   EXPECT_LE(volume, 255u);
38 }
39
40 TEST_F(VolumeTest, SetVolumeBeforePlayoutWorks) {
41   // This is a rather specialized test, intended to exercise some PulseAudio
42   // code. However, these conditions should be satisfied on any platform.
43   unsigned int original_volume = 0;
44   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(original_volume));
45   Sleep(1000);
46
47   EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(200));
48   unsigned int volume;
49   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
50   ExpectVolumeNear(200u, volume);
51
52   PausePlaying();
53   ResumePlaying();
54   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
55   // Ensure the volume has not changed after resuming playout.
56   ExpectVolumeNear(200u, volume);
57
58   PausePlaying();
59   EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(100));
60   ResumePlaying();
61   // Ensure the volume set while paused is retained.
62   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
63   ExpectVolumeNear(100u, volume);
64
65   EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(original_volume));
66 }
67
68 TEST_F(VolumeTest, ManualSetVolumeWorks) {
69   unsigned int original_volume = 0;
70   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(original_volume));
71   Sleep(1000);
72
73   TEST_LOG("Setting speaker volume to 0 out of 255.\n");
74   EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(0));
75   unsigned int volume;
76   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
77   ExpectVolumeNear(0u, volume);
78   Sleep(1000);
79
80   TEST_LOG("Setting speaker volume to 100 out of 255.\n");
81   EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(100));
82   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
83   ExpectVolumeNear(100u, volume);
84   Sleep(1000);
85
86   // Set the volume to 255 very briefly so we don't blast the poor user
87   // listening to this. This is just to test the call succeeds.
88   EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(255));
89   EXPECT_EQ(0, voe_volume_control_->GetSpeakerVolume(volume));
90   ExpectVolumeNear(255u, volume);
91
92   TEST_LOG("Setting speaker volume to the original %d out of 255.\n",
93       original_volume);
94   EXPECT_EQ(0, voe_volume_control_->SetSpeakerVolume(original_volume));
95   Sleep(1000);
96 }
97
98 TEST_F(VolumeTest, DISABLED_ON_LINUX(DefaultMicrophoneVolumeIsAtMost255)) {
99   unsigned int volume = 1000;
100   EXPECT_EQ(0, voe_volume_control_->GetMicVolume(volume));
101   EXPECT_LE(volume, 255u);
102 }
103
104 TEST_F(VolumeTest, DISABLED_ON_LINUX(
105           ManualRequiresMicrophoneCanSetMicrophoneVolumeWithAcgOff)) {
106   SwitchToManualMicrophone();
107   EXPECT_EQ(0, voe_apm_->SetAgcStatus(false));
108
109   unsigned int original_volume = 0;
110   EXPECT_EQ(0, voe_volume_control_->GetMicVolume(original_volume));
111
112   TEST_LOG("Setting microphone volume to 0.\n");
113   EXPECT_EQ(0, voe_volume_control_->SetMicVolume(channel_));
114   Sleep(1000);
115   TEST_LOG("Setting microphone volume to 255.\n");
116   EXPECT_EQ(0, voe_volume_control_->SetMicVolume(255));
117   Sleep(1000);
118   TEST_LOG("Setting microphone volume back to saved value.\n");
119   EXPECT_EQ(0, voe_volume_control_->SetMicVolume(original_volume));
120   Sleep(1000);
121 }
122
123 TEST_F(VolumeTest, ChannelScalingIsOneByDefault) {
124   float scaling = -1.0f;
125
126   EXPECT_EQ(0, voe_volume_control_->GetChannelOutputVolumeScaling(
127       channel_, scaling));
128   EXPECT_FLOAT_EQ(1.0f, scaling);
129 }
130
131 TEST_F(VolumeTest, ManualCanSetChannelScaling) {
132   EXPECT_EQ(0, voe_volume_control_->SetChannelOutputVolumeScaling(
133       channel_, 0.1f));
134
135   float scaling = 1.0f;
136   EXPECT_EQ(0, voe_volume_control_->GetChannelOutputVolumeScaling(
137       channel_, scaling));
138
139   EXPECT_FLOAT_EQ(0.1f, scaling);
140
141   TEST_LOG("Channel scaling set to 0.1: audio should be barely audible.\n");
142   Sleep(2000);
143 }
144
145 TEST_F(VolumeTest, InputMutingIsNotEnabledByDefault) {
146   bool is_muted = true;
147   EXPECT_EQ(0, voe_volume_control_->GetInputMute(channel_, is_muted));
148   EXPECT_FALSE(is_muted);
149 }
150
151 TEST_F(VolumeTest, DISABLED_ON_LINUX(ManualInputMutingMutesMicrophone)) {
152   SwitchToManualMicrophone();
153
154   // Enable muting.
155   EXPECT_EQ(0, voe_volume_control_->SetInputMute(channel_, true));
156   bool is_muted = false;
157   EXPECT_EQ(0, voe_volume_control_->GetInputMute(channel_, is_muted));
158   EXPECT_TRUE(is_muted);
159
160   TEST_LOG("Muted: talk into microphone and verify you can't hear yourself.\n");
161   Sleep(2000);
162
163   // Test that we can disable muting.
164   EXPECT_EQ(0, voe_volume_control_->SetInputMute(channel_, false));
165   EXPECT_EQ(0, voe_volume_control_->GetInputMute(channel_, is_muted));
166   EXPECT_FALSE(is_muted);
167
168   TEST_LOG("Unmuted: talk into microphone and verify you can hear yourself.\n");
169   Sleep(2000);
170 }
171
172 TEST_F(VolumeTest, DISABLED_ON_LINUX(SystemInputMutingIsNotEnabledByDefault)) {
173   bool is_muted = true;
174   EXPECT_EQ(0, voe_volume_control_->GetSystemInputMute(is_muted));
175   EXPECT_FALSE(is_muted);
176 }
177
178 TEST_F(VolumeTest, DISABLED_ON_LINUX(ManualSystemInputMutingMutesMicrophone)) {
179   SwitchToManualMicrophone();
180
181   // Enable system input muting.
182   EXPECT_EQ(0, voe_volume_control_->SetSystemInputMute(true));
183   bool is_muted = false;
184   EXPECT_EQ(0, voe_volume_control_->GetSystemInputMute(is_muted));
185   EXPECT_TRUE(is_muted);
186
187   TEST_LOG("Muted: talk into microphone and verify you can't hear yourself.\n");
188   Sleep(2000);
189
190   // Test that we can disable system input muting.
191   EXPECT_EQ(0, voe_volume_control_->SetSystemInputMute(false));
192   EXPECT_EQ(0, voe_volume_control_->GetSystemInputMute(is_muted));
193   EXPECT_FALSE(is_muted);
194
195   TEST_LOG("Unmuted: talk into microphone and verify you can hear yourself.\n");
196   Sleep(2000);
197 }
198
199 TEST_F(VolumeTest, DISABLED_ON_LINUX(SystemOutputMutingIsNotEnabledByDefault)) {
200   bool is_muted = true;
201   EXPECT_EQ(0, voe_volume_control_->GetSystemOutputMute(is_muted));
202   EXPECT_FALSE(is_muted);
203 }
204
205 TEST_F(VolumeTest, ManualSystemOutputMutingMutesOutput) {
206   // Enable muting.
207   EXPECT_EQ(0, voe_volume_control_->SetSystemOutputMute(true));
208   bool is_muted = false;
209   EXPECT_EQ(0, voe_volume_control_->GetSystemOutputMute(is_muted));
210   EXPECT_TRUE(is_muted);
211
212   TEST_LOG("Muted: you should hear no audio.\n");
213   Sleep(2000);
214
215   // Test that we can disable muting.
216   EXPECT_EQ(0, voe_volume_control_->SetSystemOutputMute(false));
217   EXPECT_EQ(0, voe_volume_control_->GetSystemOutputMute(is_muted));
218   EXPECT_FALSE(is_muted);
219
220   TEST_LOG("Unmuted: you should hear audio.\n");
221   Sleep(2000);
222 }
223
224 TEST_F(VolumeTest, ManualTestInputAndOutputLevels) {
225   SwitchToManualMicrophone();
226
227   TEST_LOG("Speak and verify that the following levels look right:\n");
228   for (int i = 0; i < 5; i++) {
229     Sleep(1000);
230     unsigned int input_level = 0;
231     unsigned int output_level = 0;
232     unsigned int input_level_full_range = 0;
233     unsigned int output_level_full_range = 0;
234
235     EXPECT_EQ(0, voe_volume_control_->GetSpeechInputLevel(
236         input_level));
237     EXPECT_EQ(0, voe_volume_control_->GetSpeechOutputLevel(
238         channel_, output_level));
239     EXPECT_EQ(0, voe_volume_control_->GetSpeechInputLevelFullRange(
240         input_level_full_range));
241     EXPECT_EQ(0, voe_volume_control_->GetSpeechOutputLevelFullRange(
242         channel_, output_level_full_range));
243
244     TEST_LOG("    warped levels (0-9)    : in=%5d, out=%5d\n",
245         input_level, output_level);
246     TEST_LOG("    linear levels (0-32768): in=%5d, out=%5d\n",
247         input_level_full_range, output_level_full_range);
248   }
249 }
250
251 TEST_F(VolumeTest, ChannelsAreNotPannedByDefault) {
252   float left = -1.0;
253   float right = -1.0;
254
255   EXPECT_EQ(0, voe_volume_control_->GetOutputVolumePan(channel_, left, right));
256   EXPECT_FLOAT_EQ(1.0, left);
257   EXPECT_FLOAT_EQ(1.0, right);
258 }
259
260 TEST_F(VolumeTest, ManualTestChannelPanning) {
261   TEST_LOG("Panning left.\n");
262   EXPECT_EQ(0, voe_volume_control_->SetOutputVolumePan(channel_, 0.8f, 0.1f));
263   Sleep(1000);
264
265   TEST_LOG("Back to center.\n");
266   EXPECT_EQ(0, voe_volume_control_->SetOutputVolumePan(channel_, 1.0f, 1.0f));
267   Sleep(1000);
268
269   TEST_LOG("Panning right.\n");
270   EXPECT_EQ(0, voe_volume_control_->SetOutputVolumePan(channel_, 0.1f, 0.8f));
271   Sleep(1000);
272
273   // To finish, verify that the getter works.
274   float left = 0.0f;
275   float right = 0.0f;
276
277   EXPECT_EQ(0, voe_volume_control_->GetOutputVolumePan(channel_, left, right));
278   EXPECT_FLOAT_EQ(0.1f, left);
279   EXPECT_FLOAT_EQ(0.8f, right);
280 }