Chromium Code Reviews| Index: media/audio/audio_output_proxy.cc |
| =================================================================== |
| --- media/audio/audio_output_proxy.cc (revision 130123) |
| +++ media/audio/audio_output_proxy.cc (working copy) |
| @@ -12,21 +12,21 @@ |
| AudioOutputProxy::AudioOutputProxy(AudioOutputDispatcher* dispatcher) |
| : dispatcher_(dispatcher), |
| state_(kCreated), |
| - physical_stream_(NULL), |
| - volume_(1.0) { |
| + volume_(1.0), |
| + audio_source_callback_(NULL) { |
| } |
| AudioOutputProxy::~AudioOutputProxy() { |
| DCHECK(CalledOnValidThread()); |
| DCHECK(state_ == kCreated || state_ == kClosed); |
| - DCHECK(!physical_stream_); |
| + DCHECK(!audio_source_callback_); |
| } |
| bool AudioOutputProxy::Open() { |
| DCHECK(CalledOnValidThread()); |
| DCHECK_EQ(state_, kCreated); |
| - if (!dispatcher_->StreamOpened()) { |
| + if (!dispatcher_->OpenStream()) { |
| state_ = kError; |
| return false; |
| } |
| @@ -37,18 +37,16 @@ |
| void AudioOutputProxy::Start(AudioSourceCallback* callback) { |
| DCHECK(CalledOnValidThread()); |
| - DCHECK(physical_stream_ == NULL); |
| DCHECK_EQ(state_, kOpened); |
| + DCHECK(!audio_source_callback_); |
| - physical_stream_= dispatcher_->StreamStarted(); |
| - if (!physical_stream_) { |
| + audio_source_callback_ = callback; |
| + if (!dispatcher_->StartStream(callback, this)) { |
| state_ = kError; |
| callback->OnError(this, 0); |
| + audio_source_callback_ = NULL; |
| return; |
| } |
| - |
| - physical_stream_->SetVolume(volume_); |
| - physical_stream_->Start(callback); |
| state_ = kPlaying; |
| } |
| @@ -57,33 +55,32 @@ |
| if (state_ != kPlaying) |
| return; |
| - DCHECK(physical_stream_); |
| - physical_stream_->Stop(); |
| - dispatcher_->StreamStopped(physical_stream_); |
| - physical_stream_ = NULL; |
| + dispatcher_->StopStream(this); |
| + 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_); |
|
vrk (LEFT CHROMIUM)
2012/04/06 23:37:05
See suggestion in audio_output_mixer.h, and remove
enal1
2012/04/16 22:01:35
Done.
|
| + volume_ = volume; |
| } |
| + dispatcher_->StreamVolumeSet(this, volume); |
| } |
| void AudioOutputProxy::GetVolume(double* volume) { |
| - DCHECK(CalledOnValidThread()); |
| + base::AutoLock lock(lock_); |
| *volume = volume_; |
| } |
| void AudioOutputProxy::Close() { |
| DCHECK(CalledOnValidThread()); |
| DCHECK(state_ == kCreated || state_ == kError || state_ == kOpened); |
| - DCHECK(!physical_stream_); |
| + DCHECK(!audio_source_callback_); |
| if (state_ != kCreated) |
| - dispatcher_->StreamClosed(); |
| + dispatcher_->CloseStream(this); |
| state_ = kClosed; |
| @@ -93,3 +90,23 @@ |
| // dispatcher+audio manager. |
| delete this; |
| } |
| + |
| +uint32 AudioOutputProxy::OnMoreData(AudioOutputStream* stream, |
|
vrk (LEFT CHROMIUM)
2012/04/06 23:37:05
See suggestion in audio_output_mixer.h, and remove
enal1
2012/04/16 22:01:35
Done.
|
| + uint8* dest, |
| + uint32 max_size, |
| + AudioBuffersState buffers_state) { |
| + DCHECK(stream == this); |
| + return audio_source_callback_->OnMoreData(stream, |
| + dest, |
| + max_size, |
| + buffers_state); |
| +} |
| + |
| +void AudioOutputProxy::OnError(AudioOutputStream* stream, int code) { |
| + DCHECK(stream == this); |
| + audio_source_callback_->OnError(stream, code); |
| +} |
| + |
| +void AudioOutputProxy::WaitTillDataReady() { |
| + audio_source_callback_->WaitTillDataReady(); |
| +} |