Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Unified Diff: media/base/audio_renderer_mixer_input.cc

Issue 12102004: Renderer side audio device change wip... Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/audio_renderer_mixer_input.h ('k') | media/base/audio_renderer_sink.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « media/base/audio_renderer_mixer_input.h ('k') | media/base/audio_renderer_sink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698