| Index: media/audio/win/audio_output_win_unittest.cc
|
| diff --git a/media/audio/win/audio_output_win_unittest.cc b/media/audio/win/audio_output_win_unittest.cc
|
| index 2e864502e328372c74bf62724b6be5660b378fea..7665d088820d9f6d5f80d2ecbacba52a721276a7 100644
|
| --- a/media/audio/win/audio_output_win_unittest.cc
|
| +++ b/media/audio/win/audio_output_win_unittest.cc
|
| @@ -36,8 +36,7 @@ class TestSourceBasic : public AudioOutputStream::AudioSourceCallback {
|
| public:
|
| explicit TestSourceBasic()
|
| : callback_count_(0),
|
| - had_error_(0),
|
| - was_closed_(0) {
|
| + had_error_(0) {
|
| }
|
| // AudioSourceCallback::OnMoreData implementation:
|
| virtual uint32 OnMoreData(AudioOutputStream* stream, uint8* dest,
|
| @@ -48,10 +47,6 @@ class TestSourceBasic : public AudioOutputStream::AudioSourceCallback {
|
| reinterpret_cast<char*>(dest)[0] = 1;
|
| return max_size;
|
| }
|
| - // AudioSourceCallback::OnClose implementation:
|
| - virtual void OnClose(AudioOutputStream* stream) {
|
| - ++was_closed_;
|
| - }
|
| // AudioSourceCallback::OnError implementation:
|
| virtual void OnError(AudioOutputStream* stream, int code) {
|
| ++had_error_;
|
| @@ -68,15 +63,10 @@ class TestSourceBasic : public AudioOutputStream::AudioSourceCallback {
|
| void set_error(bool error) {
|
| had_error_ += error ? 1 : 0;
|
| }
|
| - // Returns how many times the OnClose callback was called.
|
| - int was_closed() const {
|
| - return was_closed_;
|
| - }
|
|
|
| private:
|
| int callback_count_;
|
| int had_error_;
|
| - int was_closed_;
|
| };
|
|
|
| bool IsRunningHeadless() {
|
| @@ -153,7 +143,6 @@ class MockAudioSource : public AudioOutputStream::AudioSourceCallback {
|
| MOCK_METHOD4(OnMoreData, uint32(AudioOutputStream* stream, uint8* dest,
|
| uint32 max_size,
|
| AudioBuffersState buffers_state));
|
| - MOCK_METHOD1(OnClose, void(AudioOutputStream* stream));
|
| MOCK_METHOD2(OnError, void(AudioOutputStream* stream, int code));
|
| };
|
|
|
| @@ -211,16 +200,15 @@ TEST(WinAudioTest, MockStreamBasicCallbacks) {
|
| AudioManager* audio_man = AudioManager::GetAudioManager();
|
| ASSERT_TRUE(NULL != audio_man);
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| - AudioParameters(AudioParameters::AUDIO_MOCK, 2, 8000, 8));
|
| + AudioParameters(AudioParameters::AUDIO_MOCK, 2, 8000, 8, 128));
|
| ASSERT_TRUE(NULL != oas);
|
| - EXPECT_TRUE(oas->Open(256));
|
| + EXPECT_TRUE(oas->Open());
|
| TestSourceBasic source;
|
| oas->Start(&source);
|
| EXPECT_GT(source.callback_count(), 0);
|
| oas->Stop();
|
| oas->Close();
|
| EXPECT_EQ(0, source.had_error());
|
| - EXPECT_EQ(1, source.was_closed());
|
| }
|
|
|
| // ===========================================================================
|
| @@ -240,7 +228,7 @@ TEST(WinAudioTest, PCMWaveStreamGetAndClose) {
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| - AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 2, 8000, 16));
|
| + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 2, 8000, 16, 256));
|
| ASSERT_TRUE(NULL != oas);
|
| oas->Close();
|
| }
|
| @@ -255,17 +243,21 @@ TEST(WinAudioTest, SanityOnMakeParams) {
|
| return;
|
| AudioParameters::Format fmt = AudioParameters::AUDIO_PCM_LINEAR;
|
| EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream(
|
| - AudioParameters(fmt, 9, 8000, 16)));
|
| + AudioParameters(fmt, 9, 8000, 16, 256)));
|
| + EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream(
|
| + AudioParameters(fmt, 1, 1024 * 1024, 16, 256)));
|
| + EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream(
|
| + AudioParameters(fmt, 2, 8000, 80, 256)));
|
| EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream(
|
| - AudioParameters(fmt, 1, 1024 * 1024, 16)));
|
| + AudioParameters(fmt, -2, 8000, 16, 256)));
|
| EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream(
|
| - AudioParameters(fmt, 2, 8000, 80)));
|
| + AudioParameters(fmt, 2, -8000, 16, 256)));
|
| EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream(
|
| - AudioParameters(fmt, -2, 8000, 16)));
|
| + AudioParameters(fmt, 1, 8000, 16, -100)));
|
| EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream(
|
| - AudioParameters(fmt, 2, -8000, 16)));
|
| + AudioParameters(fmt, 1, 8000, 16, 0)));
|
| EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream(
|
| - AudioParameters(fmt, 2, -8000, -16)));
|
| + AudioParameters(fmt, 1, 8000, 16, 100000)));
|
| }
|
|
|
| // Test that it can be opened and closed.
|
| @@ -277,9 +269,9 @@ TEST(WinAudioTest, PCMWaveStreamOpenAndClose) {
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| - AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 2, 8000, 16));
|
| + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 2, 8000, 16, 256));
|
| ASSERT_TRUE(NULL != oas);
|
| - EXPECT_TRUE(oas->Open(1024));
|
| + EXPECT_TRUE(oas->Open());
|
| oas->Close();
|
| }
|
|
|
| @@ -292,9 +284,9 @@ TEST(WinAudioTest, PCMWaveStreamOpenLimit) {
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| - AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 2, 8000, 16));
|
| - ASSERT_TRUE(NULL != oas);
|
| - EXPECT_FALSE(oas->Open(1024 * 1024 * 1024));
|
| + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 2, 8000, 16,
|
| + 1024 * 1024 * 1024));
|
| + ASSERT_TRUE(NULL == oas);
|
| oas->Close();
|
| }
|
|
|
| @@ -308,10 +300,10 @@ TEST(WinAudioTest, PCMWaveStreamTripleBuffer) {
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| - AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1, 16000, 16));
|
| + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1, 16000, 16, 256));
|
| ASSERT_TRUE(NULL != oas);
|
| TestSourceTripleBuffer test_triple_buffer;
|
| - EXPECT_TRUE(oas->Open(512));
|
| + EXPECT_TRUE(oas->Open());
|
| oas->Start(&test_triple_buffer);
|
| ::Sleep(300);
|
| EXPECT_GT(test_triple_buffer.callback_count(), kNumBuffers);
|
| @@ -332,10 +324,10 @@ TEST(WinAudioTest, PCMWaveSlowSource) {
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| - AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1, 16000, 16));
|
| + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1, 16000, 16, 256));
|
| ASSERT_TRUE(NULL != oas);
|
| TestSourceLaggy test_laggy(2, 90);
|
| - EXPECT_TRUE(oas->Open(512));
|
| + EXPECT_TRUE(oas->Open());
|
| // The test parameters cause a callback every 32 ms and the source is
|
| // sleeping for 90 ms, so it is guaranteed that we run out of ready buffers.
|
| oas->Start(&test_laggy);
|
| @@ -357,16 +349,16 @@ TEST(WinAudioTest, PCMWaveStreamPlaySlowLoop) {
|
| ASSERT_TRUE(NULL != audio_man);
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| + uint32 samples_100_ms = AudioParameters::kAudioCDSampleRate / 10;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1,
|
| - AudioParameters::kAudioCDSampleRate, 16));
|
| + AudioParameters::kAudioCDSampleRate, 16, samples_100_ms));
|
| ASSERT_TRUE(NULL != oas);
|
|
|
| SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
|
| 200.0, AudioParameters::kAudioCDSampleRate);
|
| - uint32 bytes_100_ms = (AudioParameters::kAudioCDSampleRate / 10) * 2;
|
|
|
| - EXPECT_TRUE(oas->Open(bytes_100_ms));
|
| + EXPECT_TRUE(oas->Open());
|
| oas->SetVolume(1.0);
|
|
|
| for (int ix = 0; ix != 5; ++ix) {
|
| @@ -388,16 +380,16 @@ TEST(WinAudioTest, PCMWaveStreamPlay200HzTone44Kss) {
|
| ASSERT_TRUE(NULL != audio_man);
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| + uint32 samples_100_ms = AudioParameters::kAudioCDSampleRate / 10;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1,
|
| - AudioParameters::kAudioCDSampleRate, 16));
|
| + AudioParameters::kAudioCDSampleRate, 16, samples_100_ms));
|
| ASSERT_TRUE(NULL != oas);
|
|
|
| SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
|
| 200.0, AudioParameters::kAudioCDSampleRate);
|
| - uint32 bytes_100_ms = (AudioParameters::kAudioCDSampleRate / 10) * 2;
|
|
|
| - EXPECT_TRUE(oas->Open(bytes_100_ms));
|
| + EXPECT_TRUE(oas->Open());
|
| oas->SetVolume(1.0);
|
| oas->Start(&source);
|
| ::Sleep(500);
|
| @@ -416,16 +408,17 @@ TEST(WinAudioTest, PCMWaveStreamPlay200HzTone22Kss) {
|
| ASSERT_TRUE(NULL != audio_man);
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| + uint32 samples_100_ms = AudioParameters::kAudioCDSampleRate / 20;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1,
|
| - AudioParameters::kAudioCDSampleRate / 2, 16));
|
| + AudioParameters::kAudioCDSampleRate / 2, 16,
|
| + samples_100_ms));
|
| ASSERT_TRUE(NULL != oas);
|
|
|
| SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
|
| 200.0, AudioParameters::kAudioCDSampleRate/2);
|
| - uint32 bytes_100_ms = (AudioParameters::kAudioCDSampleRate / 20) * 2;
|
|
|
| - EXPECT_TRUE(oas->Open(bytes_100_ms));
|
| + EXPECT_TRUE(oas->Open());
|
|
|
| oas->SetVolume(0.5);
|
| oas->Start(&source);
|
| @@ -462,29 +455,33 @@ TEST(WinAudioTest, PushSourceFile16KHz) {
|
| ASSERT_TRUE(NULL != audio_man);
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| +
|
| + // Compute buffer size for 100ms of audio.
|
| + const uint32 kSamples100ms = (16000 / 1000) * 100;
|
| + const uint32 kSize100ms = kSamples100ms * 2;
|
| +
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| - AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1, 16000, 16));
|
| + AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1, 16000, 16,
|
| + kSamples100ms));
|
| ASSERT_TRUE(NULL != oas);
|
|
|
| - // compute buffer size for 100ms of audio. Which is 3200 bytes.
|
| - const uint32 kSize50ms = 2 * (16000 / 1000) * 100;
|
| - EXPECT_TRUE(oas->Open(kSize50ms));
|
| + EXPECT_TRUE(oas->Open());
|
|
|
| uint32 offset = 0;
|
| - const uint32 kMaxStartOffset = file_reader.size() - kSize50ms;
|
| + const uint32 kMaxStartOffset = file_reader.size() - kSize100ms;
|
|
|
| // We buffer and play at the same time, buffering happens every ~10ms and the
|
| - // consuming of the buffer happens every ~50ms. We do 100 buffers which
|
| + // consuming of the buffer happens every ~100ms. We do 100 buffers which
|
| // effectively wrap around the file more than once.
|
| PushSource push_source;
|
| for (uint32 ix = 0; ix != 100; ++ix) {
|
| - push_source.Write(file_reader.GetChunkAt(offset), kSize50ms);
|
| + push_source.Write(file_reader.GetChunkAt(offset), kSize100ms);
|
| if (ix == 2) {
|
| // For glitch free, start playing after some buffers are in.
|
| oas->Start(&push_source);
|
| }
|
| ::Sleep(10);
|
| - offset += kSize50ms;
|
| + offset += kSize100ms;
|
| if (offset > kMaxStartOffset)
|
| offset = 0;
|
| }
|
| @@ -506,16 +503,16 @@ TEST(WinAudioTest, PCMWaveStreamPlayTwice200HzTone44Kss) {
|
| ASSERT_TRUE(NULL != audio_man);
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| +
|
| + uint32 samples_100_ms = AudioParameters::kAudioCDSampleRate / 10;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1,
|
| - AudioParameters::kAudioCDSampleRate, 16));
|
| + AudioParameters::kAudioCDSampleRate, 16, samples_100_ms));
|
| ASSERT_TRUE(NULL != oas);
|
|
|
| SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
|
| 200.0, AudioParameters::kAudioCDSampleRate);
|
| - uint32 bytes_100_ms = (AudioParameters::kAudioCDSampleRate / 10) * 2;
|
| -
|
| - EXPECT_TRUE(oas->Open(bytes_100_ms));
|
| + EXPECT_TRUE(oas->Open());
|
| oas->SetVolume(1.0);
|
|
|
| // Play the wave for .5 seconds.
|
| @@ -545,17 +542,17 @@ TEST(WinAudioTest, PCMWaveStreamPlay200HzTone44KssLowLatency) {
|
| ASSERT_TRUE(NULL != audio_man);
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| +
|
| + uint32 samples_50_ms = AudioParameters::kAudioCDSampleRate / 20;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, 1,
|
| - AudioParameters::kAudioCDSampleRate, 16));
|
| + AudioParameters::kAudioCDSampleRate, 16, samples_50_ms));
|
| ASSERT_TRUE(NULL != oas);
|
|
|
| SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1,
|
| 200.0, AudioParameters::kAudioCDSampleRate);
|
| - uint32 bytes_50_ms = (AudioParameters::kAudioCDSampleRate / 20) *
|
| - sizeof(uint16);
|
|
|
| - EXPECT_TRUE(oas->Open(bytes_50_ms));
|
| + EXPECT_TRUE(oas->Open());
|
| oas->SetVolume(1.0);
|
|
|
| // Play the wave for .8 seconds.
|
| @@ -573,14 +570,17 @@ TEST(WinAudioTest, PCMWaveStreamPendingBytes) {
|
| ASSERT_TRUE(NULL != audio_man);
|
| if (!audio_man->HasAudioOutputDevices())
|
| return;
|
| +
|
| + uint32 samples_100_ms = AudioParameters::kAudioCDSampleRate / 10;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1,
|
| - AudioParameters::kAudioCDSampleRate, 16));
|
| + AudioParameters::kAudioCDSampleRate, 16, samples_100_ms));
|
| ASSERT_TRUE(NULL != oas);
|
|
|
| NiceMock<MockAudioSource> source;
|
| - uint32 bytes_100_ms = (AudioParameters::kAudioCDSampleRate / 10) * 2;
|
| - EXPECT_TRUE(oas->Open(bytes_100_ms));
|
| + EXPECT_TRUE(oas->Open());
|
| +
|
| + uint32 bytes_100_ms = samples_100_ms * 2;
|
|
|
| // We expect the amount of pending bytes will reaching 2 times of
|
| // |bytes_100_ms| because the audio output stream has a triple buffer scheme.
|
| @@ -637,9 +637,6 @@ class SyncSocketSource : public AudioOutputStream::AudioSourceCallback {
|
| uint32 got = socket_->Receive(dest, max_size);
|
| return got;
|
| }
|
| - // AudioSourceCallback::OnClose implementation:
|
| - virtual void OnClose(AudioOutputStream* stream) {
|
| - }
|
| // AudioSourceCallback::OnError implementation:
|
| virtual void OnError(AudioOutputStream* stream, int code) {
|
| }
|
| @@ -703,14 +700,14 @@ TEST(WinAudioTest, SyncSocketBasic) {
|
| return;
|
|
|
| int sample_rate = AudioParameters::kAudioCDSampleRate;
|
| + const uint32 kSamples20ms = sample_rate / 50;
|
| AudioOutputStream* oas = audio_man->MakeAudioOutputStream(
|
| AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, 1,
|
| - sample_rate, 16));
|
| + sample_rate, 16, kSamples20ms));
|
| ASSERT_TRUE(NULL != oas);
|
|
|
| // compute buffer size for 20ms of audio, 882 samples (mono).
|
| - const uint32 kSamples20ms = sample_rate / 50 * sizeof(uint16);
|
| - ASSERT_TRUE(oas->Open(kSamples20ms));
|
| + ASSERT_TRUE(oas->Open());
|
|
|
| base::SyncSocket* sockets[2];
|
| ASSERT_TRUE(base::SyncSocket::CreatePair(sockets));
|
|
|