Index: media/audio/audio_output_proxy.cc |
=================================================================== |
--- media/audio/audio_output_proxy.cc (revision 128216) |
+++ media/audio/audio_output_proxy.cc (working copy) |
@@ -13,13 +13,16 @@ |
: dispatcher_(dispatcher), |
state_(kCreated), |
physical_stream_(NULL), |
- volume_(1.0) { |
+ volume_(1.0), |
+ audio_source_callback_(NULL), |
+ pending_bytes_(0) { |
} |
AudioOutputProxy::~AudioOutputProxy() { |
DCHECK(CalledOnValidThread()); |
DCHECK(state_ == kCreated || state_ == kClosed); |
DCHECK(!physical_stream_); |
+ DCHECK(!audio_source_callback_); |
} |
bool AudioOutputProxy::Open() { |
@@ -40,15 +43,16 @@ |
DCHECK(physical_stream_ == NULL); |
DCHECK_EQ(state_, kOpened); |
- physical_stream_= dispatcher_->StreamStarted(); |
+ audio_source_callback_ = callback; |
+ pending_bytes_ = 0; |
+ physical_stream_= dispatcher_->StreamStarted(callback, this); |
vrk (LEFT CHROMIUM)
2012/03/30 22:25:58
nit: space before "="
|
if (!physical_stream_) { |
state_ = kError; |
callback->OnError(this, 0); |
+ audio_source_callback_ = NULL; |
return; |
} |
- physical_stream_->SetVolume(volume_); |
- physical_stream_->Start(callback); |
state_ = kPlaying; |
} |
@@ -58,22 +62,23 @@ |
return; |
DCHECK(physical_stream_); |
- physical_stream_->Stop(); |
- dispatcher_->StreamStopped(physical_stream_); |
+ dispatcher_->StreamStopped(physical_stream_, this); |
physical_stream_ = NULL; |
+ audio_source_callback_ = NULL; |
state_ = kOpened; |
} |
void AudioOutputProxy::SetVolume(double volume) { |
DCHECK(CalledOnValidThread()); |
- volume_ = volume; |
- if (physical_stream_) { |
- physical_stream_->SetVolume(volume); |
+ { |
+ base::AutoLock lock(lock_); |
+ volume_ = volume; |
} |
+ dispatcher_->StreamVolumeSet(physical_stream_, volume); |
} |
void AudioOutputProxy::GetVolume(double* volume) { |
- DCHECK(CalledOnValidThread()); |
+ base::AutoLock lock(lock_); |
*volume = volume_; |
} |
@@ -81,9 +86,10 @@ |
DCHECK(CalledOnValidThread()); |
DCHECK(state_ == kCreated || state_ == kError || state_ == kOpened); |
DCHECK(!physical_stream_); |
+ DCHECK(!audio_source_callback_); |
if (state_ != kCreated) |
- dispatcher_->StreamClosed(); |
+ dispatcher_->StreamClosed(this); |
state_ = kClosed; |