| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "media/audio/win/wavein_input_win.h" | 5 #include "media/audio/win/wavein_input_win.h" |
| 6 | 6 |
| 7 #pragma comment(lib, "winmm.lib") | 7 #pragma comment(lib, "winmm.lib") |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "media/audio/audio_io.h" | 10 #include "media/audio/audio_io.h" |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 // As a result, |stopped_event_| will be signaled in callback method. | 155 // As a result, |stopped_event_| will be signaled in callback method. |
| 156 base::AutoLock auto_lock(lock_); | 156 base::AutoLock auto_lock(lock_); |
| 157 already_stopped = (callback_ == NULL); | 157 already_stopped = (callback_ == NULL); |
| 158 callback_ = NULL; | 158 callback_ = NULL; |
| 159 } | 159 } |
| 160 | 160 |
| 161 if (already_stopped) | 161 if (already_stopped) |
| 162 return; | 162 return; |
| 163 | 163 |
| 164 // Wait for the callback to finish, it will signal us when ready to be reset. | 164 // Wait for the callback to finish, it will signal us when ready to be reset. |
| 165 DWORD wait = ::WaitForSingleObject(stopped_event_, INFINITE); | 165 DWORD wait = ::WaitForSingleObject(stopped_event_.Get(), INFINITE); |
| 166 DCHECK_EQ(wait, WAIT_OBJECT_0); | 166 DCHECK_EQ(wait, WAIT_OBJECT_0); |
| 167 | 167 |
| 168 // Stop input and reset the current position to zero for |wavein_|. | 168 // Stop input and reset the current position to zero for |wavein_|. |
| 169 // All pending buffers are marked as done and returned to the application. | 169 // All pending buffers are marked as done and returned to the application. |
| 170 MMRESULT res = ::waveInReset(wavein_); | 170 MMRESULT res = ::waveInReset(wavein_); |
| 171 DCHECK_EQ(res, static_cast<MMRESULT>(MMSYSERR_NOERROR)); | 171 DCHECK_EQ(res, static_cast<MMRESULT>(MMSYSERR_NOERROR)); |
| 172 | 172 |
| 173 state_ = kStateReady; | 173 state_ = kStateReady; |
| 174 } | 174 } |
| 175 | 175 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 obj, obj->audio_bus_.get(), buffer->dwBytesRecorded, 0.0); | 301 obj, obj->audio_bus_.get(), buffer->dwBytesRecorded, 0.0); |
| 302 | 302 |
| 303 // Queue the finished buffer back with the audio driver. Since we are | 303 // Queue the finished buffer back with the audio driver. Since we are |
| 304 // reusing the same buffers we can get away without calling | 304 // reusing the same buffers we can get away without calling |
| 305 // waveInPrepareHeader. | 305 // waveInPrepareHeader. |
| 306 obj->QueueNextPacket(buffer); | 306 obj->QueueNextPacket(buffer); |
| 307 } else { | 307 } else { |
| 308 // Main thread has called Stop() and set |callback_| to NULL and is | 308 // Main thread has called Stop() and set |callback_| to NULL and is |
| 309 // now waiting to issue waveInReset which will kill this thread. | 309 // now waiting to issue waveInReset which will kill this thread. |
| 310 // We should not call AudioSourceCallback code anymore. | 310 // We should not call AudioSourceCallback code anymore. |
| 311 ::SetEvent(obj->stopped_event_); | 311 ::SetEvent(obj->stopped_event_.Get()); |
| 312 } | 312 } |
| 313 } else if (msg == WIM_CLOSE) { | 313 } else if (msg == WIM_CLOSE) { |
| 314 // Intentionaly no-op for now. | 314 // Intentionaly no-op for now. |
| 315 } else if (msg == WIM_OPEN) { | 315 } else if (msg == WIM_OPEN) { |
| 316 // Intentionaly no-op for now. | 316 // Intentionaly no-op for now. |
| 317 } | 317 } |
| 318 } | 318 } |
| 319 | 319 |
| 320 } // namespace media | 320 } // namespace media |
| OLD | NEW |