| 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);
|
| 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;
|
|
|
|
|