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

Side by Side Diff: media/audio/win/audio_output_win_unittest.cc

Issue 357004: SetVolume and GetVolume take one volume instead of separate left and right vo... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month 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
« no previous file with comments | « media/audio/mac/audio_output_mac_unittest.cc ('k') | media/audio/win/waveout_output_win.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) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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 <windows.h> 5 #include <windows.h>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/base_paths.h" 8 #include "base/base_paths.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "media/audio/audio_output.h" 10 #include "media/audio/audio_output.h"
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 AudioOutputStream* oas = 296 AudioOutputStream* oas =
297 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, 16000, 16); 297 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, 16000, 16);
298 ASSERT_TRUE(NULL != oas); 298 ASSERT_TRUE(NULL != oas);
299 TestSourceTripleBuffer test_triple_buffer; 299 TestSourceTripleBuffer test_triple_buffer;
300 EXPECT_TRUE(oas->Open(512)); 300 EXPECT_TRUE(oas->Open(512));
301 oas->Start(&test_triple_buffer); 301 oas->Start(&test_triple_buffer);
302 ::Sleep(300); 302 ::Sleep(300);
303 EXPECT_GT(test_triple_buffer.callback_count(), kNumBuffers); 303 EXPECT_GT(test_triple_buffer.callback_count(), kNumBuffers);
304 EXPECT_FALSE(test_triple_buffer.had_error()); 304 EXPECT_FALSE(test_triple_buffer.had_error());
305 oas->Stop(); 305 oas->Stop();
306 ::Sleep(1000); 306 ::Sleep(500);
307 oas->Close(); 307 oas->Close();
308 } 308 }
309 309
310 // Test potential deadlock situation if the source is slow or blocks for some 310 // Test potential deadlock situation if the source is slow or blocks for some
311 // time. The actual EXPECT_GT are mostly meaningless and the real test is that 311 // time. The actual EXPECT_GT are mostly meaningless and the real test is that
312 // the test completes in reasonable time. 312 // the test completes in reasonable time.
313 TEST(WinAudioTest, PCMWaveSlowSource) { 313 TEST(WinAudioTest, PCMWaveSlowSource) {
314 if (IsRunningHeadless()) 314 if (IsRunningHeadless())
315 return; 315 return;
316 AudioManager* audio_man = AudioManager::GetAudioManager(); 316 AudioManager* audio_man = AudioManager::GetAudioManager();
317 ASSERT_TRUE(NULL != audio_man); 317 ASSERT_TRUE(NULL != audio_man);
318 if (!audio_man->HasAudioDevices()) 318 if (!audio_man->HasAudioDevices())
319 return; 319 return;
320 AudioOutputStream* oas = 320 AudioOutputStream* oas =
321 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, 16000, 16); 321 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, 16000, 16);
322 ASSERT_TRUE(NULL != oas); 322 ASSERT_TRUE(NULL != oas);
323 TestSourceLaggy test_laggy(2, 90); 323 TestSourceLaggy test_laggy(2, 90);
324 EXPECT_TRUE(oas->Open(512)); 324 EXPECT_TRUE(oas->Open(512));
325 // The test parameters cause a callback every 32 ms and the source is 325 // The test parameters cause a callback every 32 ms and the source is
326 // sleeping for 90 ms, so it is guaranteed that we run out of ready buffers. 326 // sleeping for 90 ms, so it is guaranteed that we run out of ready buffers.
327 oas->Start(&test_laggy); 327 oas->Start(&test_laggy);
328 ::Sleep(1000); 328 ::Sleep(500);
329 EXPECT_GT(test_laggy.callback_count(), 2); 329 EXPECT_GT(test_laggy.callback_count(), 2);
330 EXPECT_FALSE(test_laggy.had_error()); 330 EXPECT_FALSE(test_laggy.had_error());
331 oas->Stop(); 331 oas->Stop();
332 ::Sleep(1000); 332 ::Sleep(500);
333 oas->Close(); 333 oas->Close();
334 } 334 }
335 335
336 // Test another potential deadlock situation if the thread that calls Start() 336 // Test another potential deadlock situation if the thread that calls Start()
337 // gets paused. This test is best when run over RDP with audio enabled. See 337 // gets paused. This test is best when run over RDP with audio enabled. See
338 // bug 19276 for more details. 338 // bug 19276 for more details.
339 TEST(WinAudioTest, PCMWaveStreamPlaySlowLoop) { 339 TEST(WinAudioTest, PCMWaveStreamPlaySlowLoop) {
340 if (IsRunningHeadless()) 340 if (IsRunningHeadless())
341 return; 341 return;
342 AudioManager* audio_man = AudioManager::GetAudioManager(); 342 AudioManager* audio_man = AudioManager::GetAudioManager();
343 ASSERT_TRUE(NULL != audio_man); 343 ASSERT_TRUE(NULL != audio_man);
344 if (!audio_man->HasAudioDevices()) 344 if (!audio_man->HasAudioDevices())
345 return; 345 return;
346 AudioOutputStream* oas = 346 AudioOutputStream* oas =
347 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, 347 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1,
348 AudioManager::kAudioCDSampleRate, 16); 348 AudioManager::kAudioCDSampleRate, 16);
349 ASSERT_TRUE(NULL != oas); 349 ASSERT_TRUE(NULL != oas);
350 350
351 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, 351 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
352 200.0, AudioManager::kAudioCDSampleRate); 352 200.0, AudioManager::kAudioCDSampleRate);
353 size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 10) * 2; 353 size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 10) * 2;
354 354
355 EXPECT_TRUE(oas->Open(bytes_100_ms)); 355 EXPECT_TRUE(oas->Open(bytes_100_ms));
356 oas->SetVolume(1.0, 1.0); 356 oas->SetVolume(1.0);
357 357
358 for (int ix = 0; ix != 25; ++ix) { 358 for (int ix = 0; ix != 5; ++ix) {
359 oas->Start(&source); 359 oas->Start(&source);
360 ::Sleep(10); 360 ::Sleep(10);
361 oas->Stop(); 361 oas->Stop();
362 } 362 }
363 oas->Close(); 363 oas->Close();
364 } 364 }
365 365
366 366
367 // This test produces actual audio for 1.5 seconds on the default wave 367 // This test produces actual audio for .5 seconds on the default wave
368 // device at 44.1K s/sec. Parameters have been chosen carefully so you should 368 // device at 44.1K s/sec. Parameters have been chosen carefully so you should
369 // not hear pops or noises while the sound is playing. 369 // not hear pops or noises while the sound is playing.
370 TEST(WinAudioTest, PCMWaveStreamPlay200HzTone44Kss) { 370 TEST(WinAudioTest, PCMWaveStreamPlay200HzTone44Kss) {
371 if (IsRunningHeadless()) 371 if (IsRunningHeadless())
372 return; 372 return;
373 AudioManager* audio_man = AudioManager::GetAudioManager(); 373 AudioManager* audio_man = AudioManager::GetAudioManager();
374 ASSERT_TRUE(NULL != audio_man); 374 ASSERT_TRUE(NULL != audio_man);
375 if (!audio_man->HasAudioDevices()) 375 if (!audio_man->HasAudioDevices())
376 return; 376 return;
377 AudioOutputStream* oas = 377 AudioOutputStream* oas =
378 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, 378 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1,
379 AudioManager::kAudioCDSampleRate, 16); 379 AudioManager::kAudioCDSampleRate, 16);
380 ASSERT_TRUE(NULL != oas); 380 ASSERT_TRUE(NULL != oas);
381 381
382 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, 382 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
383 200.0, AudioManager::kAudioCDSampleRate); 383 200.0, AudioManager::kAudioCDSampleRate);
384 size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 10) * 2; 384 size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 10) * 2;
385 385
386 EXPECT_TRUE(oas->Open(bytes_100_ms)); 386 EXPECT_TRUE(oas->Open(bytes_100_ms));
387 oas->SetVolume(1.0, 1.0); 387 oas->SetVolume(1.0);
388 oas->Start(&source); 388 oas->Start(&source);
389 ::Sleep(1500); 389 ::Sleep(500);
390 oas->Stop(); 390 oas->Stop();
391 oas->Close(); 391 oas->Close();
392 } 392 }
393 393
394 // This test produces actual audio for for 1.5 seconds on the default wave 394 // This test produces actual audio for for .5 seconds on the default wave
395 // device at 22K s/sec. Parameters have been chosen carefully so you should 395 // device at 22K s/sec. Parameters have been chosen carefully so you should
396 // not hear pops or noises while the sound is playing. The audio also should 396 // not hear pops or noises while the sound is playing. The audio also should
397 // sound with a lower volume than PCMWaveStreamPlay200HzTone44Kss. 397 // sound with a lower volume than PCMWaveStreamPlay200HzTone44Kss.
398 TEST(WinAudioTest, PCMWaveStreamPlay200HzTone22Kss) { 398 TEST(WinAudioTest, PCMWaveStreamPlay200HzTone22Kss) {
399 if (IsRunningHeadless()) 399 if (IsRunningHeadless())
400 return; 400 return;
401 AudioManager* audio_man = AudioManager::GetAudioManager(); 401 AudioManager* audio_man = AudioManager::GetAudioManager();
402 ASSERT_TRUE(NULL != audio_man); 402 ASSERT_TRUE(NULL != audio_man);
403 if (!audio_man->HasAudioDevices()) 403 if (!audio_man->HasAudioDevices())
404 return; 404 return;
405 AudioOutputStream* oas = 405 AudioOutputStream* oas =
406 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, 406 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1,
407 AudioManager::kAudioCDSampleRate/2, 16); 407 AudioManager::kAudioCDSampleRate/2, 16);
408 ASSERT_TRUE(NULL != oas); 408 ASSERT_TRUE(NULL != oas);
409 409
410 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, 410 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
411 200.0, AudioManager::kAudioCDSampleRate/2); 411 200.0, AudioManager::kAudioCDSampleRate/2);
412 size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 20) * 2; 412 size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 20) * 2;
413 413
414 EXPECT_TRUE(oas->Open(bytes_100_ms)); 414 EXPECT_TRUE(oas->Open(bytes_100_ms));
415 415
416 oas->SetVolume(0.5, 0.5); 416 oas->SetVolume(0.5);
417 oas->Start(&source); 417 oas->Start(&source);
418 ::Sleep(1500); 418 ::Sleep(500);
419 419
420 // Test that the volume is within the set limits. 420 // Test that the volume is within the set limits.
421 double left_volume = 0.0; 421 double volume = 0.0;
422 double right_volume = 0.0; 422 oas->GetVolume(&volume);
423 oas->GetVolume(&left_volume, &right_volume); 423 EXPECT_LT(volume, 0.51);
424 EXPECT_LT(left_volume, 0.51); 424 EXPECT_GT(volume, 0.49);
425 EXPECT_GT(left_volume, 0.49);
426 EXPECT_LT(right_volume, 0.51);
427 EXPECT_GT(right_volume, 0.49);
428 oas->Stop(); 425 oas->Stop();
429 oas->Close(); 426 oas->Close();
430 } 427 }
431 428
432 // Uses the PushSource to play a 2 seconds file clip for about 5 seconds. We 429 // Uses the PushSource to play a 2 seconds file clip for about 5 seconds. We
433 // try hard to generate situation where the two threads are accessing the 430 // try hard to generate situation where the two threads are accessing the
434 // object roughly at the same time. What you hear is a sweeping tone from 1KHz 431 // object roughly at the same time. What you hear is a sweeping tone from 1KHz
435 // to 2KHz with a bit of fade out at the end for one second. The file is two 432 // to 2KHz with a bit of fade out at the end for one second. The file is two
436 // of these sweeping tones back to back. 433 // of these sweeping tones back to back.
437 TEST(WinAudioTest, PushSourceFile16KHz) { 434 TEST(WinAudioTest, PushSourceFile16KHz) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 // For glitch free, start playing after some buffers are in. 469 // For glitch free, start playing after some buffers are in.
473 oas->Start(&push_source); 470 oas->Start(&push_source);
474 } 471 }
475 ::Sleep(10); 472 ::Sleep(10);
476 offset += kSize50ms; 473 offset += kSize50ms;
477 if (offset > kMaxStartOffset) 474 if (offset > kMaxStartOffset)
478 offset = 0; 475 offset = 0;
479 } 476 }
480 477
481 // Play a little bit more of the file. 478 // Play a little bit more of the file.
482 ::Sleep(4000); 479 ::Sleep(500);
483 480
484 oas->Stop(); 481 oas->Stop();
485 oas->Close(); 482 oas->Close();
486 } 483 }
487 484
488 // This test is to make sure an AudioOutputStream can be started after it was 485 // This test is to make sure an AudioOutputStream can be started after it was
489 // stopped. You will here two 1.5 seconds wave signal separated by 0.5 seconds 486 // stopped. You will here two .5 seconds wave signal separated by 0.5 seconds
490 // of silence. 487 // of silence.
491 TEST(WinAudioTest, PCMWaveStreamPlayTwice200HzTone44Kss) { 488 TEST(WinAudioTest, PCMWaveStreamPlayTwice200HzTone44Kss) {
492 if (IsRunningHeadless()) 489 if (IsRunningHeadless())
493 return; 490 return;
494 AudioManager* audio_man = AudioManager::GetAudioManager(); 491 AudioManager* audio_man = AudioManager::GetAudioManager();
495 ASSERT_TRUE(NULL != audio_man); 492 ASSERT_TRUE(NULL != audio_man);
496 if (!audio_man->HasAudioDevices()) 493 if (!audio_man->HasAudioDevices())
497 return; 494 return;
498 AudioOutputStream* oas = 495 AudioOutputStream* oas =
499 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, 496 audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1,
500 AudioManager::kAudioCDSampleRate, 16); 497 AudioManager::kAudioCDSampleRate, 16);
501 ASSERT_TRUE(NULL != oas); 498 ASSERT_TRUE(NULL != oas);
502 499
503 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, 500 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
504 200.0, AudioManager::kAudioCDSampleRate); 501 200.0, AudioManager::kAudioCDSampleRate);
505 size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 10) * 2; 502 size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 10) * 2;
506 503
507 EXPECT_TRUE(oas->Open(bytes_100_ms)); 504 EXPECT_TRUE(oas->Open(bytes_100_ms));
508 oas->SetVolume(1.0, 1.0); 505 oas->SetVolume(1.0);
509 506
510 // Play the wave for 1.5 seconds. 507 // Play the wave for .5 seconds.
511 oas->Start(&source); 508 oas->Start(&source);
512 ::Sleep(1500); 509 ::Sleep(500);
513 oas->Stop(); 510 oas->Stop();
514 511
515 // Sleep to give silence after stopping the AudioOutputStream. 512 // Sleep to give silence after stopping the AudioOutputStream.
513 ::Sleep(250);
514
515 // Start again and play for .5 seconds.
516 oas->Start(&source);
516 ::Sleep(500); 517 ::Sleep(500);
517
518 // Start again and play for 1.5 seconds.
519 oas->Start(&source);
520 ::Sleep(1500);
521 oas->Stop(); 518 oas->Stop();
522 519
523 oas->Close(); 520 oas->Close();
524 } 521 }
525 522
526 // Check that the pending bytes value is correct what the stream starts. 523 // Check that the pending bytes value is correct what the stream starts.
527 TEST(WinAudioTest, PCMWaveStreamPendingBytes) { 524 TEST(WinAudioTest, PCMWaveStreamPendingBytes) {
528 if (IsRunningHeadless()) 525 if (IsRunningHeadless())
529 return; 526 return;
530 AudioManager* audio_man = AudioManager::GetAudioManager(); 527 AudioManager* audio_man = AudioManager::GetAudioManager();
(...skipping 28 matching lines...) Expand all
559 .WillOnce(Return(0)); 556 .WillOnce(Return(0));
560 EXPECT_CALL(source, OnMoreData(oas, NotNull(), bytes_100_ms, 0)) 557 EXPECT_CALL(source, OnMoreData(oas, NotNull(), bytes_100_ms, 0))
561 .Times(AnyNumber()) 558 .Times(AnyNumber())
562 .WillRepeatedly(Return(0)); 559 .WillRepeatedly(Return(0));
563 560
564 oas->Start(&source); 561 oas->Start(&source);
565 ::Sleep(500); 562 ::Sleep(500);
566 oas->Stop(); 563 oas->Stop();
567 oas->Close(); 564 oas->Close();
568 } 565 }
OLDNEW
« no previous file with comments | « media/audio/mac/audio_output_mac_unittest.cc ('k') | media/audio/win/waveout_output_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698