| Index: media/base/audio_renderer_mixer_input.cc
|
| diff --git a/media/base/audio_renderer_mixer_input.cc b/media/base/audio_renderer_mixer_input.cc
|
| index 569b126fd65ad3cb75b1c64bf9b587217edbd862..90f23d6d1e2631e9f3062a1f66ed06467885508a 100644
|
| --- a/media/base/audio_renderer_mixer_input.cc
|
| +++ b/media/base/audio_renderer_mixer_input.cc
|
| @@ -4,7 +4,9 @@
|
|
|
| #include "media/base/audio_renderer_mixer_input.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| +#include "base/message_loop.h"
|
| #include "media/base/audio_renderer_mixer.h"
|
|
|
| namespace media {
|
| @@ -22,9 +24,11 @@ AudioRendererMixerInput::AudioRendererMixerInput(
|
| }
|
|
|
| AudioRendererMixerInput::~AudioRendererMixerInput() {
|
| - // Mixer is no longer safe to use after |remove_mixer_cb_| has been called.
|
| - if (initialized_)
|
| - remove_mixer_cb_.Run(params_);
|
| + // |mixer_| is no longer safe to use after |remove_mixer_cb_| has been called.
|
| + if (initialized_) {
|
| + remove_mixer_cb_.Run(mixer_);
|
| + mixer_ = NULL;
|
| + }
|
| }
|
|
|
| void AudioRendererMixerInput::Initialize(
|
| @@ -35,6 +39,8 @@ void AudioRendererMixerInput::Initialize(
|
| mixer_ = get_mixer_cb_.Run(params_);
|
| callback_ = callback;
|
| initialized_ = true;
|
| +
|
| + started_on_message_loop_ = base::MessageLoopProxy::current();
|
| }
|
|
|
| void AudioRendererMixerInput::Start() {
|
| @@ -96,4 +102,30 @@ void AudioRendererMixerInput::OnRenderError() {
|
| callback_->OnRenderError();
|
| }
|
|
|
| +void AudioRendererMixerInput::OnDeviceChange() {
|
| + LOG(ERROR) << "DEVICE CHANGE SENT";
|
| + started_on_message_loop_->PostTask(FROM_HERE, base::Bind(
|
| + &AudioRendererMixerInput::UpdateMixer, this));
|
| +}
|
| +
|
| +void AudioRendererMixerInput::UpdateMixer() {
|
| + DCHECK(mixer_);
|
| + LOG(ERROR) << "AudioRendererMixerInput::kDeviceChange";
|
| +
|
| + // First see if a new mixer is actually necessary.
|
| + AudioRendererMixer* new_mixer = get_mixer_cb_.Run(params_);
|
| + if (new_mixer == mixer_) {
|
| + remove_mixer_cb_.Run(new_mixer);
|
| + return;
|
| + }
|
| +
|
| + LOG(ERROR) << "new mixer time!";
|
| + if (playing_)
|
| + mixer_->RemoveMixerInput(this);
|
| + remove_mixer_cb_.Run(mixer_);
|
| + mixer_ = new_mixer;
|
| + if (playing_)
|
| + mixer_->AddMixerInput(this);
|
| +}
|
| +
|
| } // namespace media
|
|
|