Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Side by Side Diff: media/audio/mac/audio_low_latency_input_mac_unittest.cc

Issue 1864483002: Forward output glitch information from stream WebRTC log (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/audio/mac/audio_low_latency_input_mac.cc ('k') | media/audio/mac/audio_manager_mac.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/environment.h" 9 #include "base/environment.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 127
128 // Convenience method which creates a default AudioInputStream object using 128 // Convenience method which creates a default AudioInputStream object using
129 // a 10ms frame size and a sample rate which is set to the hardware sample 129 // a 10ms frame size and a sample rate which is set to the hardware sample
130 // rate. 130 // rate.
131 AudioInputStream* CreateDefaultAudioInputStream() { 131 AudioInputStream* CreateDefaultAudioInputStream() {
132 int fs = static_cast<int>(AUAudioInputStream::HardwareSampleRate()); 132 int fs = static_cast<int>(AUAudioInputStream::HardwareSampleRate());
133 int samples_per_packet = fs / 100; 133 int samples_per_packet = fs / 100;
134 AudioInputStream* ais = audio_manager_->MakeAudioInputStream( 134 AudioInputStream* ais = audio_manager_->MakeAudioInputStream(
135 AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, 135 AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY,
136 CHANNEL_LAYOUT_STEREO, fs, 16, samples_per_packet), 136 CHANNEL_LAYOUT_STEREO, fs, 16, samples_per_packet),
137 AudioDeviceDescription::kDefaultDeviceId); 137 AudioDeviceDescription::kDefaultDeviceId,
138 base::Bind(&MacAudioInputTest::OnLogMessage, base::Unretained(this)));
138 EXPECT_TRUE(ais); 139 EXPECT_TRUE(ais);
139 return ais; 140 return ais;
140 } 141 }
141 142
142 // Convenience method which creates an AudioInputStream object with a 143 // Convenience method which creates an AudioInputStream object with a
143 // specified channel layout. 144 // specified channel layout.
144 AudioInputStream* CreateAudioInputStream(ChannelLayout channel_layout) { 145 AudioInputStream* CreateAudioInputStream(ChannelLayout channel_layout) {
145 int fs = static_cast<int>(AUAudioInputStream::HardwareSampleRate()); 146 int fs = static_cast<int>(AUAudioInputStream::HardwareSampleRate());
146 int samples_per_packet = fs / 100; 147 int samples_per_packet = fs / 100;
147 AudioInputStream* ais = audio_manager_->MakeAudioInputStream( 148 AudioInputStream* ais = audio_manager_->MakeAudioInputStream(
148 AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, 149 AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
149 fs, 16, samples_per_packet), 150 fs, 16, samples_per_packet),
150 AudioDeviceDescription::kDefaultDeviceId); 151 AudioDeviceDescription::kDefaultDeviceId,
152 base::Bind(&MacAudioInputTest::OnLogMessage, base::Unretained(this)));
151 EXPECT_TRUE(ais); 153 EXPECT_TRUE(ais);
152 return ais; 154 return ais;
153 } 155 }
154 156
157 void OnLogMessage(const std::string& message) { log_message_ = message; }
158
155 base::MessageLoop message_loop_; 159 base::MessageLoop message_loop_;
156 ScopedAudioManagerPtr audio_manager_; 160 ScopedAudioManagerPtr audio_manager_;
161 std::string log_message_;
157 }; 162 };
158 163
159 // Test Create(), Close(). 164 // Test Create(), Close().
160 TEST_F(MacAudioInputTest, AUAudioInputStreamCreateAndClose) { 165 TEST_F(MacAudioInputTest, AUAudioInputStreamCreateAndClose) {
161 ABORT_AUDIO_TEST_IF_NOT(InputDevicesAvailable()); 166 ABORT_AUDIO_TEST_IF_NOT(InputDevicesAvailable());
162 AudioInputStream* ais = CreateDefaultAudioInputStream(); 167 AudioInputStream* ais = CreateDefaultAudioInputStream();
163 ais->Close(); 168 ais->Close();
164 } 169 }
165 170
166 // Test Open(), Close(). 171 // Test Open(), Close().
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 // estimate. 214 // estimate.
210 base::RunLoop run_loop; 215 base::RunLoop run_loop;
211 EXPECT_CALL(sink, OnData(ais, NotNull(), _, _)) 216 EXPECT_CALL(sink, OnData(ais, NotNull(), _, _))
212 .Times(AtLeast(10)) 217 .Times(AtLeast(10))
213 .WillRepeatedly(CheckCountAndPostQuitTask( 218 .WillRepeatedly(CheckCountAndPostQuitTask(
214 &count, 10, &message_loop_, run_loop.QuitClosure())); 219 &count, 10, &message_loop_, run_loop.QuitClosure()));
215 ais->Start(&sink); 220 ais->Start(&sink);
216 run_loop.Run(); 221 run_loop.Run();
217 ais->Stop(); 222 ais->Stop();
218 ais->Close(); 223 ais->Close();
224
225 EXPECT_FALSE(log_message_.empty());
219 } 226 }
220 227
221 // Verify that recording starts and stops correctly in mono using mocked sink. 228 // Verify that recording starts and stops correctly in mono using mocked sink.
222 TEST_F(MacAudioInputTest, AUAudioInputStreamVerifyStereoRecording) { 229 TEST_F(MacAudioInputTest, AUAudioInputStreamVerifyStereoRecording) {
223 ABORT_AUDIO_TEST_IF_NOT(InputDevicesAvailable()); 230 ABORT_AUDIO_TEST_IF_NOT(InputDevicesAvailable());
224 231
225 int count = 0; 232 int count = 0;
226 233
227 // Create an audio input stream which records in stereo. 234 // Create an audio input stream which records in stereo.
228 AudioInputStream* ais = CreateAudioInputStream(CHANNEL_LAYOUT_STEREO); 235 AudioInputStream* ais = CreateAudioInputStream(CHANNEL_LAYOUT_STEREO);
(...skipping 13 matching lines...) Expand all
242 // more analysis of the delay estimates are done. 249 // more analysis of the delay estimates are done.
243 base::RunLoop run_loop; 250 base::RunLoop run_loop;
244 EXPECT_CALL(sink, OnData(ais, NotNull(), _, _)) 251 EXPECT_CALL(sink, OnData(ais, NotNull(), _, _))
245 .Times(AtLeast(10)) 252 .Times(AtLeast(10))
246 .WillRepeatedly(CheckCountAndPostQuitTask( 253 .WillRepeatedly(CheckCountAndPostQuitTask(
247 &count, 10, &message_loop_, run_loop.QuitClosure())); 254 &count, 10, &message_loop_, run_loop.QuitClosure()));
248 ais->Start(&sink); 255 ais->Start(&sink);
249 run_loop.Run(); 256 run_loop.Run();
250 ais->Stop(); 257 ais->Stop();
251 ais->Close(); 258 ais->Close();
259
260 EXPECT_FALSE(log_message_.empty());
252 } 261 }
253 262
254 // This test is intended for manual tests and should only be enabled 263 // This test is intended for manual tests and should only be enabled
255 // when it is required to store the captured data on a local file. 264 // when it is required to store the captured data on a local file.
256 // By default, GTest will print out YOU HAVE 1 DISABLED TEST. 265 // By default, GTest will print out YOU HAVE 1 DISABLED TEST.
257 // To include disabled tests in test execution, just invoke the test program 266 // To include disabled tests in test execution, just invoke the test program
258 // with --gtest_also_run_disabled_tests or set the GTEST_ALSO_RUN_DISABLED_TESTS 267 // with --gtest_also_run_disabled_tests or set the GTEST_ALSO_RUN_DISABLED_TESTS
259 // environment variable to a value greater than 0. 268 // environment variable to a value greater than 0.
260 TEST_F(MacAudioInputTest, DISABLED_AUAudioInputStreamRecordToFile) { 269 TEST_F(MacAudioInputTest, DISABLED_AUAudioInputStreamRecordToFile) {
261 ABORT_AUDIO_TEST_IF_NOT(InputDevicesAvailable()); 270 ABORT_AUDIO_TEST_IF_NOT(InputDevicesAvailable());
262 const char* file_name = "out_stereo_10sec.pcm"; 271 const char* file_name = "out_stereo_10sec.pcm";
263 272
264 int fs = static_cast<int>(AUAudioInputStream::HardwareSampleRate()); 273 int fs = static_cast<int>(AUAudioInputStream::HardwareSampleRate());
265 AudioInputStream* ais = CreateDefaultAudioInputStream(); 274 AudioInputStream* ais = CreateDefaultAudioInputStream();
266 EXPECT_TRUE(ais->Open()); 275 EXPECT_TRUE(ais->Open());
267 276
268 fprintf(stderr, " File name : %s\n", file_name); 277 fprintf(stderr, " File name : %s\n", file_name);
269 fprintf(stderr, " Sample rate: %d\n", fs); 278 fprintf(stderr, " Sample rate: %d\n", fs);
270 WriteToFileAudioSink file_sink(file_name); 279 WriteToFileAudioSink file_sink(file_name);
271 fprintf(stderr, " >> Speak into the mic while recording...\n"); 280 fprintf(stderr, " >> Speak into the mic while recording...\n");
272 ais->Start(&file_sink); 281 ais->Start(&file_sink);
273 base::PlatformThread::Sleep(TestTimeouts::action_timeout()); 282 base::PlatformThread::Sleep(TestTimeouts::action_timeout());
274 ais->Stop(); 283 ais->Stop();
275 fprintf(stderr, " >> Recording has stopped.\n"); 284 fprintf(stderr, " >> Recording has stopped.\n");
276 ais->Close(); 285 ais->Close();
277 } 286 }
278 287
279 } // namespace media 288 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/mac/audio_low_latency_input_mac.cc ('k') | media/audio/mac/audio_manager_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698