summaryrefslogtreecommitdiffstats
path: root/media/audio/win
diff options
context:
space:
mode:
authorhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-05 02:35:27 +0000
committerhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-05 02:35:27 +0000
commit5c87288b5c019bb8bb728c5e213a38ec1917bab5 (patch)
tree32f6e420aade6248ef1eceb6aae819d3533f2765 /media/audio/win
parent4d4c32c6d0f9afda02dd545d7d7b2bc3625e9cd0 (diff)
downloadchromium_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.cc39
-rw-r--r--media/audio/win/waveout_output_win.cc2
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