diff options
author | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-05 02:35:27 +0000 |
---|---|---|
committer | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-05 02:35:27 +0000 |
commit | 5c87288b5c019bb8bb728c5e213a38ec1917bab5 (patch) | |
tree | 32f6e420aade6248ef1eceb6aae819d3533f2765 /media/audio/win | |
parent | 4d4c32c6d0f9afda02dd545d7d7b2bc3625e9cd0 (diff) | |
download | chromium_src-5c87288b5c019bb8bb728c5e213a38ec1917bab5.zip chromium_src-5c87288b5c019bb8bb728c5e213a38ec1917bab5.tar.gz chromium_src-5c87288b5c019bb8bb728c5e213a38ec1917bab5.tar.bz2 |
Changed to use PushSource for the intermediate buffer
between the IPC layer and the audio hardware interface.
We have completely moved away from being blocking in
AudioRendererHost.
Since we'll be using PushSource for a longer period
of buffering. It's necessary to have
Play/Pause functionality in the AudioOutputStream,
this is simulated by start/stop the AudioOutputStream
multiple times.
Review URL: http://codereview.chromium.org/114069
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17707 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/win')
-rw-r--r-- | media/audio/win/audio_output_win_unittest.cc | 39 | ||||
-rw-r--r-- | media/audio/win/waveout_output_win.cc | 2 |
2 files changed, 41 insertions, 0 deletions
diff --git a/media/audio/win/audio_output_win_unittest.cc b/media/audio/win/audio_output_win_unittest.cc index 5e58798..c71d944 100644 --- a/media/audio/win/audio_output_win_unittest.cc +++ b/media/audio/win/audio_output_win_unittest.cc @@ -444,3 +444,42 @@ TEST(WinAudioTest, PushSourceFile16KHz) { oas->Stop(); oas->Close(); } + +// This test is to make sure an AudioOutputStream can be started after it was +// stopped. You will here two 1.5 seconds wave signal separated by 0.5 seconds +// of silence. +TEST(WinAudioTest, PCMWaveStreamPlayTwice200HzTone44Kss) { + if (IsRunningHeadless()) + return; + AudioManager* audio_man = AudioManager::GetAudioManager(); + ASSERT_TRUE(NULL != audio_man); + if (!audio_man->HasAudioDevices()) + return; + AudioOutputStream* oas = + audio_man->MakeAudioStream(AudioManager::AUDIO_PCM_LINEAR, 1, + AudioManager::kAudioCDSampleRate, 16); + ASSERT_TRUE(NULL != oas); + + SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, + 200.0, AudioManager::kAudioCDSampleRate); + size_t bytes_100_ms = (AudioManager::kAudioCDSampleRate / 10) * 2; + + EXPECT_TRUE(oas->Open(bytes_100_ms)); + oas->SetVolume(1.0, 1.0); + + // Play the wave for 1.5 seconds. + oas->Start(&source); + ::Sleep(1500); + oas->Stop(); + + // Sleep to give silence after stopping the AudioOutputStream. + ::Sleep(500); + + // Start again and play for 1.5 seconds. + oas->Start(&source); + ::Sleep(1500); + oas->Stop(); + + oas->Close(); +} + diff --git a/media/audio/win/waveout_output_win.cc b/media/audio/win/waveout_output_win.cc index 2f5d8ab..9828bd8 100644 --- a/media/audio/win/waveout_output_win.cc +++ b/media/audio/win/waveout_output_win.cc @@ -171,7 +171,9 @@ void PCMWaveOutAudioOutputStream::Stop() { if (res != MMSYSERR_NOERROR) { state_ = PCMA_PLAYING; HandleError(res); + return; } + state_ = PCMA_READY; } // We can Close in any state except that trying to close a stream that is |