| 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..3baac46831ee91dc16dcd7a35d600c80ff88bb2a 100644
|
| --- a/media/audio/virtual_audio_output_stream.cc
|
| +++ b/media/audio/virtual_audio_output_stream.cc
|
| @@ -4,30 +4,28 @@
|
|
|
| #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)
|
| + : params_(params), message_loop_(message_loop),
|
| + target_input_stream_(target), callback_(NULL), volume_(1.0f) {
|
| + DCHECK(params_.IsValid());
|
| + DCHECK(message_loop_);
|
| + DCHECK(target);
|
| }
|
|
|
| VirtualAudioOutputStream::~VirtualAudioOutputStream() {
|
| DCHECK(!callback_);
|
| - DCHECK(!attached_);
|
| +}
|
| +
|
| +void VirtualAudioOutputStream::RunOnceClosed(const base::Closure& cb) {
|
| + DCHECK(on_close_cb_.is_null());
|
| + on_close_cb_ = cb;
|
| }
|
|
|
| bool VirtualAudioOutputStream::Open() {
|
| @@ -37,30 +35,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 (!on_close_cb_.is_null()) {
|
| + const base::Closure cb = on_close_cb_;
|
| + on_close_cb_.Reset();
|
| + cb.Run();
|
| + }
|
| }
|
|
|
| void VirtualAudioOutputStream::SetVolume(double volume) {
|
| + DCHECK(message_loop_->BelongsToCurrentThread());
|
| volume_ = volume;
|
| }
|
|
|
| void VirtualAudioOutputStream::GetVolume(double* volume) {
|
| + DCHECK(message_loop_->BelongsToCurrentThread());
|
| *volume = volume_;
|
| }
|
|
|
|
|