Chromium Code Reviews| Index: media/audio/audio_output_proxy.cc | 
| =================================================================== | 
| --- media/audio/audio_output_proxy.cc (revision 129817) | 
| +++ 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); | 
| 
 
tommi (sloooow) - chröme
2012/04/03 13:47:51
DCHECK(!audio_source_callback_)?
 
enal1
2012/04/04 18:46:55
Done.
 
 | 
| - physical_stream_= dispatcher_->StreamStarted(); | 
| + audio_source_callback_ = callback; | 
| 
 
tommi (sloooow) - chröme
2012/04/03 13:47:51
nit: just assign to this variable where you set st
 
enal1
2012/04/04 18:46:55
audio_source_callback_->OnMoreData() is called by
 
 | 
| + pending_bytes_ = 0; | 
| + physical_stream_= dispatcher_->StreamStarted(callback, this); | 
| 
 
vrk (LEFT CHROMIUM)
2012/03/30 22:25:58
Yikes, this is a big hack. If |dispatcher_| is an
 
enal1
2012/04/04 18:46:55
Done.
 
 | 
| 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; |