Chromium Code Reviews| Index: media/audio/virtual_audio_output_stream.cc |
| diff --git a/media/audio/virtual_audio_output_stream.cc b/media/audio/virtual_audio_output_stream.cc |
| index aacc6678d02065331eb2e061133646be8183e9e2..1d84a2ad28469fb3638cfb4be23018e6edeb1a0e 100644 |
| --- a/media/audio/virtual_audio_output_stream.cc |
| +++ b/media/audio/virtual_audio_output_stream.cc |
| @@ -4,30 +4,24 @@ |
| #include "media/audio/virtual_audio_output_stream.h" |
| -#include "base/message_loop.h" |
| -#include "media/audio/audio_manager_base.h" |
| +#include "base/message_loop_proxy.h" |
| #include "media/audio/virtual_audio_input_stream.h" |
| namespace media { |
| -// static |
| -VirtualAudioOutputStream* VirtualAudioOutputStream::MakeStream( |
| - AudioManagerBase* manager, const AudioParameters& params, |
| - base::MessageLoopProxy* message_loop, VirtualAudioInputStream* target) { |
| - return new VirtualAudioOutputStream(manager, params, message_loop, target); |
| -} |
| - |
| VirtualAudioOutputStream::VirtualAudioOutputStream( |
| - AudioManagerBase* manager, const AudioParameters& params, |
| - base::MessageLoopProxy* message_loop, VirtualAudioInputStream* target) |
| - : audio_manager_(manager), message_loop_(message_loop), callback_(NULL), |
| - params_(params), target_input_stream_(target), volume_(1.0f), |
| - attached_(false) { |
| + const AudioParameters& params, base::MessageLoopProxy* message_loop, |
| + VirtualAudioInputStream* target, const AfterCloseCallback& after_close_cb) |
| + : params_(params), message_loop_(message_loop), |
| + target_input_stream_(target), after_close_cb_(after_close_cb), |
| + callback_(NULL), volume_(1.0f) { |
| + DCHECK(params_.IsValid()); |
| + DCHECK(message_loop_); |
| + DCHECK(target); |
| } |
| VirtualAudioOutputStream::~VirtualAudioOutputStream() { |
| DCHECK(!callback_); |
| - DCHECK(!attached_); |
| } |
| bool VirtualAudioOutputStream::Open() { |
| @@ -37,30 +31,36 @@ bool VirtualAudioOutputStream::Open() { |
| void VirtualAudioOutputStream::Start(AudioSourceCallback* callback) { |
| DCHECK(message_loop_->BelongsToCurrentThread()); |
| - DCHECK(!attached_); |
| + DCHECK(!callback_); |
| callback_ = callback; |
| target_input_stream_->AddOutputStream(this, params_); |
| - attached_ = true; |
| } |
| void VirtualAudioOutputStream::Stop() { |
| DCHECK(message_loop_->BelongsToCurrentThread()); |
| - DCHECK(attached_); |
| - callback_ = NULL; |
| - target_input_stream_->RemoveOutputStream(this, params_); |
| - attached_ = false; |
| + if (callback_) { |
| + callback_ = NULL; |
| + target_input_stream_->RemoveOutputStream(this, params_); |
| + } |
| } |
| void VirtualAudioOutputStream::Close() { |
| DCHECK(message_loop_->BelongsToCurrentThread()); |
| - audio_manager_->ReleaseOutputStream(this); |
| + Stop(); |
| + if (!after_close_cb_.is_null()) { |
|
DaleCurtis
2013/01/17 01:15:52
Ditto.
miu
2013/01/17 05:33:55
Added the comments here as well.
|
| + const AfterCloseCallback cb = after_close_cb_; |
| + after_close_cb_.Reset(); |
| + cb.Run(this); |
| + } |
| } |
| void VirtualAudioOutputStream::SetVolume(double volume) { |
| + DCHECK(message_loop_->BelongsToCurrentThread()); |
| volume_ = volume; |
| } |
| void VirtualAudioOutputStream::GetVolume(double* volume) { |
| + DCHECK(message_loop_->BelongsToCurrentThread()); |
| *volume = volume_; |
| } |