Chromium Code Reviews| Index: media/audio/win/waveout_output_win.cc |
| =================================================================== |
| --- media/audio/win/waveout_output_win.cc (revision 117014) |
| +++ media/audio/win/waveout_output_win.cc (working copy) |
| @@ -87,7 +87,8 @@ |
| buffer_size_(params.GetPacketSize()), |
| volume_(1), |
| channels_(params.channels), |
| - pending_bytes_(0) { |
| + pending_bytes_(0), |
| + thread_id_(GetCurrentThreadId()) { |
| format_.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; |
| format_.Format.nChannels = params.channels; |
| format_.Format.nSamplesPerSec = params.sample_rate; |
| @@ -112,6 +113,7 @@ |
| } |
| bool PCMWaveOutAudioOutputStream::Open() { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| if (state_ != PCMA_BRAND_NEW) |
| return false; |
| if (BufferSize() * num_buffers_ > kMaxOpenBufferSize) |
| @@ -145,6 +147,7 @@ |
| } |
| void PCMWaveOutAudioOutputStream::SetupBuffers() { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| buffers_.reset(new char[BufferSize() * num_buffers_]); |
| for (int ix = 0; ix != num_buffers_; ++ix) { |
| WAVEHDR* buffer = GetBuffer(ix); |
| @@ -161,6 +164,7 @@ |
| } |
| void PCMWaveOutAudioOutputStream::FreeBuffers() { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| for (int ix = 0; ix != num_buffers_; ++ix) { |
| ::waveOutUnprepareHeader(waveout_, GetBuffer(ix), sizeof(WAVEHDR)); |
| } |
| @@ -171,6 +175,7 @@ |
| // this then we would always get the driver callback when it is about to run |
| // samples and that would leave too little time to react. |
| void PCMWaveOutAudioOutputStream::Start(AudioSourceCallback* callback) { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| if (state_ != PCMA_READY) |
| return; |
| callback_ = callback; |
| @@ -185,6 +190,8 @@ |
| INFINITE, |
| WT_EXECUTEDEFAULT); |
| if (!waiting_handle) { |
| + volatile DWORD code = GetLastError(); |
| + CHECK_NE(waiting_handle, static_cast<HANDLE>(NULL)); |
| HandleError(MMSYSERR_ERROR); |
| return; |
| } |
| @@ -212,6 +219,7 @@ |
| MMRESULT result = ::waveOutPause(waveout_); |
| if (result != MMSYSERR_NOERROR) { |
| + CHECK_EQ(result, static_cast<MMRESULT>(MMSYSERR_NOERROR)); |
|
cpu_(ooo_6.6-7.5)
2012/01/11 01:00:39
in here (and some other cases) you are testing the
|
| HandleError(result); |
| return; |
| } |
| @@ -221,12 +229,14 @@ |
| for (int ix = 0; ix != num_buffers_; ++ix) { |
| result = ::waveOutWrite(waveout_, GetBuffer(ix), sizeof(WAVEHDR)); |
| if (result != MMSYSERR_NOERROR) { |
| + CHECK_EQ(result, static_cast<MMRESULT>(MMSYSERR_NOERROR)); |
| HandleError(result); |
| break; |
| } |
| } |
| result = ::waveOutRestart(waveout_); |
| if (result != MMSYSERR_NOERROR) { |
| + CHECK_EQ(result, static_cast<MMRESULT>(MMSYSERR_NOERROR)); |
| HandleError(result); |
| return; |
| } |
| @@ -240,6 +250,7 @@ |
| // should be under its own lock, and checking the liveness and |
| // acquiring the lock on stream should be done atomically. |
| void PCMWaveOutAudioOutputStream::Stop() { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| if (state_ != PCMA_PLAYING) |
| return; |
| state_ = PCMA_STOPPING; |
| @@ -248,6 +259,7 @@ |
| // Stop playback. |
| MMRESULT res = ::waveOutReset(waveout_); |
| if (res != MMSYSERR_NOERROR) { |
| + CHECK_EQ(res, static_cast<MMRESULT>(MMSYSERR_NOERROR)); |
| state_ = PCMA_PLAYING; |
| HandleError(res); |
| return; |
| @@ -267,6 +279,8 @@ |
| if (waiting_handle) { |
| BOOL unregister = UnregisterWaitEx(waiting_handle, INVALID_HANDLE_VALUE); |
| if (!unregister) { |
| + volatile DWORD code = GetLastError(); |
| + CHECK_NE(unregister, FALSE); |
|
cpu_(ooo_6.6-7.5)
2012/01/11 01:00:39
same here.
|
| state_ = PCMA_PLAYING; |
| HandleError(MMSYSERR_ERROR); |
| } |
| @@ -283,10 +297,12 @@ |
| // as callback_ is set to NULL. Just print it and hope somebody somehow |
| // will find it... |
| void PCMWaveOutAudioOutputStream::Close() { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| Stop(); // Just to be sure. No-op if not playing. |
| if (waveout_) { |
| MMRESULT res = ::waveOutClose(waveout_); |
| if (res != MMSYSERR_NOERROR) { |
| + CHECK_EQ(res, static_cast<MMRESULT>(MMSYSERR_NOERROR)); |
| HandleError(res); |
| return; |
| } |
| @@ -301,18 +317,21 @@ |
| } |
| void PCMWaveOutAudioOutputStream::SetVolume(double volume) { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| if (!waveout_) |
| return; |
| volume_ = static_cast<float>(volume); |
| } |
| void PCMWaveOutAudioOutputStream::GetVolume(double* volume) { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| if (!waveout_) |
| return; |
| *volume = volume_; |
| } |
| void PCMWaveOutAudioOutputStream::HandleError(MMRESULT error) { |
| + CHECK_EQ(thread_id_, GetCurrentThreadId()); |
| DLOG(WARNING) << "PCMWaveOutAudio error " << error; |
| if (callback_) |
| callback_->OnError(this, error); |