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(); |
+} |