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

Side by Side Diff: content/renderer/media/webrtc_audio_device_unittest.cc

Issue 10537121: Adds AudioDevice factory for all audio clients in Chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years, 5 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 | Annotate | Revision Log
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 "base/environment.h" 5 #include "base/environment.h"
6 #include "base/test/test_timeouts.h" 6 #include "base/test/test_timeouts.h"
7 #include "content/renderer/media/audio_hardware.h" 7 #include "content/renderer/media/audio_hardware.h"
8 #include "content/renderer/media/webrtc_audio_device_impl.h" 8 #include "content/renderer/media/webrtc_audio_device_impl.h"
9 #include "content/test/webrtc_audio_device_test.h" 9 #include "content/test/webrtc_audio_device_test.h"
10 #include "media/audio/audio_manager.h" 10 #include "media/audio/audio_manager.h"
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 EXPECT_FALSE(FindElementInArray(valid_rates, arraysize(valid_rates), 225 EXPECT_FALSE(FindElementInArray(valid_rates, arraysize(valid_rates),
226 invalid_rates[i])); 226 invalid_rates[i]));
227 } 227 }
228 } 228 }
229 229
230 // Basic test that instantiates and initializes an instance of 230 // Basic test that instantiates and initializes an instance of
231 // WebRtcAudioDeviceImpl. 231 // WebRtcAudioDeviceImpl.
232 TEST_F(WebRTCAudioDeviceTest, Construct) { 232 TEST_F(WebRTCAudioDeviceTest, Construct) {
233 AudioUtilNoHardware audio_util(48000, 48000, CHANNEL_LAYOUT_MONO); 233 AudioUtilNoHardware audio_util(48000, 48000, CHANNEL_LAYOUT_MONO);
234 SetAudioUtilCallback(&audio_util); 234 SetAudioUtilCallback(&audio_util);
235 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( 235 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device(
236 new WebRtcAudioDeviceImpl()); 236 new WebRtcAudioDeviceImpl());
237 237
238 audio_device->SetSessionId(1); 238 webrtc_audio_device->SetSessionId(1);
239 239
240 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 240 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
241 ASSERT_TRUE(engine.valid()); 241 ASSERT_TRUE(engine.valid());
242 242
243 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 243 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
244 int err = base->Init(audio_device); 244 int err = base->Init(webrtc_audio_device);
245 EXPECT_EQ(0, err); 245 EXPECT_EQ(0, err);
246 EXPECT_EQ(0, base->Terminate()); 246 EXPECT_EQ(0, base->Terminate());
247 } 247 }
248 248
249 // Verify that a call to webrtc::VoEBase::StartPlayout() starts audio output 249 // Verify that a call to webrtc::VoEBase::StartPlayout() starts audio output
250 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will 250 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will
251 // be utilized to implement the actual audio path. The test registers a 251 // be utilized to implement the actual audio path. The test registers a
252 // webrtc::VoEExternalMedia implementation to hijack the output audio and 252 // webrtc::VoEExternalMedia implementation to hijack the output audio and
253 // verify that streaming starts correctly. 253 // verify that streaming starts correctly.
254 // Disabled when running headless since the bots don't have the required config. 254 // Disabled when running headless since the bots don't have the required config.
(...skipping 11 matching lines...) Expand all
266 266
267 EXPECT_CALL(media_observer(), 267 EXPECT_CALL(media_observer(),
268 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); 268 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1);
269 EXPECT_CALL(media_observer(), 269 EXPECT_CALL(media_observer(),
270 OnSetAudioStreamPlaying(_, 1, true)).Times(1); 270 OnSetAudioStreamPlaying(_, 1, true)).Times(1);
271 EXPECT_CALL(media_observer(), 271 EXPECT_CALL(media_observer(),
272 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); 272 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1);
273 EXPECT_CALL(media_observer(), 273 EXPECT_CALL(media_observer(),
274 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); 274 OnDeleteAudioStream(_, 1)).Times(AnyNumber());
275 275
276 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( 276 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device(
277 new WebRtcAudioDeviceImpl()); 277 new WebRtcAudioDeviceImpl());
278 audio_device->SetSessionId(1); 278 webrtc_audio_device->SetSessionId(1);
279 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 279 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
280 ASSERT_TRUE(engine.valid()); 280 ASSERT_TRUE(engine.valid());
281 281
282 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 282 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
283 ASSERT_TRUE(base.valid()); 283 ASSERT_TRUE(base.valid());
284 int err = base->Init(audio_device); 284 int err = base->Init(webrtc_audio_device);
285 ASSERT_EQ(0, err); 285 ASSERT_EQ(0, err);
286 286
287 int ch = base->CreateChannel(); 287 int ch = base->CreateChannel();
288 EXPECT_NE(-1, ch); 288 EXPECT_NE(-1, ch);
289 289
290 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); 290 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get());
291 ASSERT_TRUE(external_media.valid()); 291 ASSERT_TRUE(external_media.valid());
292 292
293 base::WaitableEvent event(false, false); 293 base::WaitableEvent event(false, false);
294 scoped_ptr<WebRTCMediaProcessImpl> media_process( 294 scoped_ptr<WebRTCMediaProcessImpl> media_process(
295 new WebRTCMediaProcessImpl(&event)); 295 new WebRTCMediaProcessImpl(&event));
296 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( 296 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing(
297 ch, webrtc::kPlaybackPerChannel, *media_process.get())); 297 ch, webrtc::kPlaybackPerChannel, *media_process.get()));
298 298
299 EXPECT_EQ(0, base->StartPlayout(ch)); 299 EXPECT_EQ(0, base->StartPlayout(ch));
300 300
301 EXPECT_TRUE(event.TimedWait( 301 EXPECT_TRUE(event.TimedWait(
302 base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms()))); 302 base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms())));
303 WaitForIOThreadCompletion(); 303 WaitForIOThreadCompletion();
304 304
305 EXPECT_TRUE(audio_device->playing()); 305 EXPECT_TRUE(webrtc_audio_device->playing());
306 EXPECT_FALSE(audio_device->recording()); 306 EXPECT_FALSE(webrtc_audio_device->recording());
307 EXPECT_EQ(ch, media_process->channel_id()); 307 EXPECT_EQ(ch, media_process->channel_id());
308 EXPECT_EQ(webrtc::kPlaybackPerChannel, media_process->type()); 308 EXPECT_EQ(webrtc::kPlaybackPerChannel, media_process->type());
309 EXPECT_EQ(80, media_process->packet_size()); 309 EXPECT_EQ(80, media_process->packet_size());
310 EXPECT_EQ(8000, media_process->sample_rate()); 310 EXPECT_EQ(8000, media_process->sample_rate());
311 311
312 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( 312 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing(
313 ch, webrtc::kPlaybackPerChannel)); 313 ch, webrtc::kPlaybackPerChannel));
314 EXPECT_EQ(0, base->StopPlayout(ch)); 314 EXPECT_EQ(0, base->StopPlayout(ch));
315 315
316 EXPECT_EQ(0, base->DeleteChannel(ch)); 316 EXPECT_EQ(0, base->DeleteChannel(ch));
(...skipping 18 matching lines...) Expand all
335 AudioUtil audio_util; 335 AudioUtil audio_util;
336 SetAudioUtilCallback(&audio_util); 336 SetAudioUtilCallback(&audio_util);
337 337
338 if (!HardwareSampleRatesAreValid()) 338 if (!HardwareSampleRatesAreValid())
339 return; 339 return;
340 340
341 // TODO(tommi): extend MediaObserver and MockMediaObserver with support 341 // TODO(tommi): extend MediaObserver and MockMediaObserver with support
342 // for new interfaces, like OnSetAudioStreamRecording(). When done, add 342 // for new interfaces, like OnSetAudioStreamRecording(). When done, add
343 // EXPECT_CALL() macros here. 343 // EXPECT_CALL() macros here.
344 344
345 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( 345 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device(
346 new WebRtcAudioDeviceImpl()); 346 new WebRtcAudioDeviceImpl());
347 audio_device->SetSessionId(1); 347 webrtc_audio_device->SetSessionId(1);
348 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 348 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
349 ASSERT_TRUE(engine.valid()); 349 ASSERT_TRUE(engine.valid());
350 350
351 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 351 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
352 ASSERT_TRUE(base.valid()); 352 ASSERT_TRUE(base.valid());
353 int err = base->Init(audio_device); 353 int err = base->Init(webrtc_audio_device);
354 ASSERT_EQ(0, err); 354 ASSERT_EQ(0, err);
355 355
356 int ch = base->CreateChannel(); 356 int ch = base->CreateChannel();
357 EXPECT_NE(-1, ch); 357 EXPECT_NE(-1, ch);
358 358
359 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); 359 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get());
360 ASSERT_TRUE(external_media.valid()); 360 ASSERT_TRUE(external_media.valid());
361 361
362 base::WaitableEvent event(false, false); 362 base::WaitableEvent event(false, false);
363 scoped_ptr<WebRTCMediaProcessImpl> media_process( 363 scoped_ptr<WebRTCMediaProcessImpl> media_process(
364 new WebRTCMediaProcessImpl(&event)); 364 new WebRTCMediaProcessImpl(&event));
365 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( 365 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing(
366 ch, webrtc::kRecordingPerChannel, *media_process.get())); 366 ch, webrtc::kRecordingPerChannel, *media_process.get()));
367 367
368 // We must add an external transport implementation to be able to start 368 // We must add an external transport implementation to be able to start
369 // recording without actually sending encoded packets to the network. All 369 // recording without actually sending encoded packets to the network. All
370 // we want to do here is to verify that audio capturing starts as it should. 370 // we want to do here is to verify that audio capturing starts as it should.
371 ScopedWebRTCPtr<webrtc::VoENetwork> network(engine.get()); 371 ScopedWebRTCPtr<webrtc::VoENetwork> network(engine.get());
372 scoped_ptr<WebRTCTransportImpl> transport( 372 scoped_ptr<WebRTCTransportImpl> transport(
373 new WebRTCTransportImpl(network.get())); 373 new WebRTCTransportImpl(network.get()));
374 EXPECT_EQ(0, network->RegisterExternalTransport(ch, *transport.get())); 374 EXPECT_EQ(0, network->RegisterExternalTransport(ch, *transport.get()));
375 EXPECT_EQ(0, base->StartSend(ch)); 375 EXPECT_EQ(0, base->StartSend(ch));
376 376
377 EXPECT_TRUE(event.TimedWait( 377 EXPECT_TRUE(event.TimedWait(
378 base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms()))); 378 base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms())));
379 WaitForIOThreadCompletion(); 379 WaitForIOThreadCompletion();
380 380
381 EXPECT_FALSE(audio_device->playing()); 381 EXPECT_FALSE(webrtc_audio_device->playing());
382 EXPECT_TRUE(audio_device->recording()); 382 EXPECT_TRUE(webrtc_audio_device->recording());
383 EXPECT_EQ(ch, media_process->channel_id()); 383 EXPECT_EQ(ch, media_process->channel_id());
384 EXPECT_EQ(webrtc::kRecordingPerChannel, media_process->type()); 384 EXPECT_EQ(webrtc::kRecordingPerChannel, media_process->type());
385 EXPECT_EQ(80, media_process->packet_size()); 385 EXPECT_EQ(80, media_process->packet_size());
386 EXPECT_EQ(8000, media_process->sample_rate()); 386 EXPECT_EQ(8000, media_process->sample_rate());
387 387
388 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( 388 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing(
389 ch, webrtc::kRecordingPerChannel)); 389 ch, webrtc::kRecordingPerChannel));
390 EXPECT_EQ(0, base->StopSend(ch)); 390 EXPECT_EQ(0, base->StopSend(ch));
391 391
392 EXPECT_EQ(0, base->DeleteChannel(ch)); 392 EXPECT_EQ(0, base->DeleteChannel(ch));
(...skipping 19 matching lines...) Expand all
412 412
413 EXPECT_CALL(media_observer(), 413 EXPECT_CALL(media_observer(),
414 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); 414 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1);
415 EXPECT_CALL(media_observer(), 415 EXPECT_CALL(media_observer(),
416 OnSetAudioStreamPlaying(_, 1, true)).Times(1); 416 OnSetAudioStreamPlaying(_, 1, true)).Times(1);
417 EXPECT_CALL(media_observer(), 417 EXPECT_CALL(media_observer(),
418 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); 418 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1);
419 EXPECT_CALL(media_observer(), 419 EXPECT_CALL(media_observer(),
420 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); 420 OnDeleteAudioStream(_, 1)).Times(AnyNumber());
421 421
422 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( 422 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device(
423 new WebRtcAudioDeviceImpl()); 423 new WebRtcAudioDeviceImpl());
424 audio_device->SetSessionId(1); 424 webrtc_audio_device->SetSessionId(1);
425 425
426 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 426 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
427 ASSERT_TRUE(engine.valid()); 427 ASSERT_TRUE(engine.valid());
428 428
429 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 429 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
430 ASSERT_TRUE(base.valid()); 430 ASSERT_TRUE(base.valid());
431 int err = base->Init(audio_device); 431 int err = base->Init(webrtc_audio_device);
432 ASSERT_EQ(0, err); 432 ASSERT_EQ(0, err);
433 433
434 int ch = base->CreateChannel(); 434 int ch = base->CreateChannel();
435 EXPECT_NE(-1, ch); 435 EXPECT_NE(-1, ch);
436 EXPECT_EQ(0, base->StartPlayout(ch)); 436 EXPECT_EQ(0, base->StartPlayout(ch));
437 437
438 ScopedWebRTCPtr<webrtc::VoEFile> file(engine.get()); 438 ScopedWebRTCPtr<webrtc::VoEFile> file(engine.get());
439 ASSERT_TRUE(file.valid()); 439 ASSERT_TRUE(file.valid());
440 int duration = 0; 440 int duration = 0;
441 EXPECT_EQ(0, file->GetFileDuration(file_path.c_str(), duration, 441 EXPECT_EQ(0, file->GetFileDuration(file_path.c_str(), duration,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 480
481 EXPECT_CALL(media_observer(), 481 EXPECT_CALL(media_observer(),
482 OnSetAudioStreamStatus(_, 1, StrEq("created"))); 482 OnSetAudioStreamStatus(_, 1, StrEq("created")));
483 EXPECT_CALL(media_observer(), 483 EXPECT_CALL(media_observer(),
484 OnSetAudioStreamPlaying(_, 1, true)); 484 OnSetAudioStreamPlaying(_, 1, true));
485 EXPECT_CALL(media_observer(), 485 EXPECT_CALL(media_observer(),
486 OnSetAudioStreamStatus(_, 1, StrEq("closed"))); 486 OnSetAudioStreamStatus(_, 1, StrEq("closed")));
487 EXPECT_CALL(media_observer(), 487 EXPECT_CALL(media_observer(),
488 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); 488 OnDeleteAudioStream(_, 1)).Times(AnyNumber());
489 489
490 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( 490 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device(
491 new WebRtcAudioDeviceImpl()); 491 new WebRtcAudioDeviceImpl());
492 audio_device->SetSessionId(1); 492 webrtc_audio_device->SetSessionId(1);
493 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 493 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
494 ASSERT_TRUE(engine.valid()); 494 ASSERT_TRUE(engine.valid());
495 495
496 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 496 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
497 ASSERT_TRUE(base.valid()); 497 ASSERT_TRUE(base.valid());
498 int err = base->Init(audio_device); 498 int err = base->Init(webrtc_audio_device);
499 ASSERT_EQ(0, err); 499 ASSERT_EQ(0, err);
500 500
501 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); 501 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get());
502 ASSERT_TRUE(audio_processing.valid()); 502 ASSERT_TRUE(audio_processing.valid());
503 bool enabled = false; 503 bool enabled = false;
504 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; 504 webrtc::AgcModes agc_mode = webrtc::kAgcDefault;
505 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); 505 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode));
506 EXPECT_TRUE(enabled); 506 EXPECT_TRUE(enabled);
507 EXPECT_EQ(agc_mode, webrtc::kAgcAdaptiveAnalog); 507 EXPECT_EQ(agc_mode, webrtc::kAgcAdaptiveAnalog);
508 508
(...skipping 13 matching lines...) Expand all
522 MessageLoop::QuitClosure(), 522 MessageLoop::QuitClosure(),
523 TestTimeouts::action_timeout()); 523 TestTimeouts::action_timeout());
524 message_loop_.Run(); 524 message_loop_.Run();
525 525
526 EXPECT_EQ(0, base->StopSend(ch)); 526 EXPECT_EQ(0, base->StopSend(ch));
527 EXPECT_EQ(0, base->StopPlayout(ch)); 527 EXPECT_EQ(0, base->StopPlayout(ch));
528 528
529 EXPECT_EQ(0, base->DeleteChannel(ch)); 529 EXPECT_EQ(0, base->DeleteChannel(ch));
530 EXPECT_EQ(0, base->Terminate()); 530 EXPECT_EQ(0, base->Terminate());
531 } 531 }
OLDNEW
« no previous file with comments | « content/renderer/media/webrtc_audio_device_impl.cc ('k') | content/renderer/render_view_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698