Index: media/audio/virtual_audio_output_stream.cc |
diff --git a/media/audio/virtual_audio_output_stream.cc b/media/audio/virtual_audio_output_stream.cc |
index 43c449bc74b3d140c1431411d20adad681e1b949..43b83cf2be888ba6414667e599a11badea38f06d 100644 |
--- a/media/audio/virtual_audio_output_stream.cc |
+++ b/media/audio/virtual_audio_output_stream.cc |
@@ -4,20 +4,22 @@ |
#include "media/audio/virtual_audio_output_stream.h" |
-#include "base/message_loop/message_loop_proxy.h" |
+#include "base/logging.h" |
#include "media/audio/virtual_audio_input_stream.h" |
namespace media { |
VirtualAudioOutputStream::VirtualAudioOutputStream( |
- const AudioParameters& params, base::MessageLoopProxy* message_loop, |
- VirtualAudioInputStream* target, const AfterCloseCallback& after_close_cb) |
- : params_(params), message_loop_(message_loop), |
- target_input_stream_(target), after_close_cb_(after_close_cb), |
- callback_(NULL), volume_(1.0f) { |
+ const AudioParameters& params, VirtualAudioInputStream* target, |
+ const AfterCloseCallback& after_close_cb) |
+ : params_(params), target_input_stream_(target), |
+ after_close_cb_(after_close_cb), callback_(NULL), volume_(1.0f) { |
DCHECK(params_.IsValid()); |
- DCHECK(message_loop_); |
DCHECK(target); |
+ |
+ // VAOS can be constructed on any thread, but will DCHECK that all |
+ // AudioOutputStream methods are called from the same thread. |
+ thread_checker_.DetachFromThread(); |
} |
VirtualAudioOutputStream::~VirtualAudioOutputStream() { |
@@ -25,27 +27,27 @@ VirtualAudioOutputStream::~VirtualAudioOutputStream() { |
} |
bool VirtualAudioOutputStream::Open() { |
- DCHECK(message_loop_->BelongsToCurrentThread()); |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
return true; |
} |
void VirtualAudioOutputStream::Start(AudioSourceCallback* callback) { |
- DCHECK(message_loop_->BelongsToCurrentThread()); |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(!callback_); |
callback_ = callback; |
target_input_stream_->AddOutputStream(this, params_); |
} |
void VirtualAudioOutputStream::Stop() { |
- DCHECK(message_loop_->BelongsToCurrentThread()); |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
if (callback_) { |
- callback_ = NULL; |
target_input_stream_->RemoveOutputStream(this, params_); |
+ callback_ = NULL; |
} |
} |
void VirtualAudioOutputStream::Close() { |
- DCHECK(message_loop_->BelongsToCurrentThread()); |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
Stop(); |
@@ -60,18 +62,19 @@ void VirtualAudioOutputStream::Close() { |
} |
void VirtualAudioOutputStream::SetVolume(double volume) { |
- DCHECK(message_loop_->BelongsToCurrentThread()); |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
volume_ = volume; |
} |
void VirtualAudioOutputStream::GetVolume(double* volume) { |
- DCHECK(message_loop_->BelongsToCurrentThread()); |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
*volume = volume_; |
} |
double VirtualAudioOutputStream::ProvideInput(AudioBus* audio_bus, |
base::TimeDelta buffer_delay) { |
- DCHECK(message_loop_->BelongsToCurrentThread()); |
+ // Note: This method may be invoked on any one thread, depending on the |
+ // platform. |
DCHECK(callback_); |
const int frames = callback_->OnMoreData(audio_bus, AudioBuffersState()); |