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

Unified Diff: media/base/audio_renderer_mixer_input.cc

Issue 381823003: Allow AudioRendererMixerInputs to be restarted after stopped. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Created 6 years, 5 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
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 d1568d0c64fe214b8dcc4e468a107d2c24665149..ab9f0a7ecab20e0d2c6ddae12fc6bcc690009960 100644
--- a/media/base/audio_renderer_mixer_input.cc
+++ b/media/base/audio_renderer_mixer_input.cc
@@ -24,7 +24,6 @@ AudioRendererMixerInput::AudioRendererMixerInput(
}
AudioRendererMixerInput::~AudioRendererMixerInput() {
- DCHECK(!callback_);
DCHECK(!playing_);
DCHECK(!mixer_);
}
@@ -38,16 +37,16 @@ void AudioRendererMixerInput::Initialize(
params_ = params;
callback_ = callback;
initialized_ = true;
- mixer_ = get_mixer_cb_.Run(params_);
-
- // Note: OnRenderError() may be called immediately after this call completes,
- // so ensure |callback_| has been set first.
- mixer_->AddErrorCallback(error_cb_);
}
void AudioRendererMixerInput::Start() {
DCHECK(initialized_);
DCHECK(!playing_);
+ DCHECK(!mixer_);
+ mixer_ = get_mixer_cb_.Run(params_);
+
+ // Note: OnRenderError() may be called immediately after this call returns.
+ mixer_->AddErrorCallback(error_cb_);
}
void AudioRendererMixerInput::Stop() {
@@ -58,17 +57,19 @@ void AudioRendererMixerInput::Stop() {
playing_ = false;
}
- // Once Stop() is called the input can no longer be used.
- if (callback_) {
+ if (mixer_) {
+ // TODO(dalecurtis): This is required so that |callback_| isn't called after
+ // Stop() by an error event since it may outlive this ref-counted object. We
+ // should instead have sane ownership semantics: http://crbug.com/151051
mixer_->RemoveErrorCallback(error_cb_);
remove_mixer_cb_.Run(params_);
mixer_ = NULL;
- callback_ = NULL;
}
}
void AudioRendererMixerInput::Play() {
DCHECK(initialized_);
+ DCHECK(mixer_);
if (playing_)
return;
@@ -79,6 +80,7 @@ void AudioRendererMixerInput::Play() {
void AudioRendererMixerInput::Pause() {
DCHECK(initialized_);
+ DCHECK(mixer_);
if (!playing_)
return;
« no previous file with comments | « content/renderer/media/audio_renderer_mixer_manager_unittest.cc ('k') | media/base/audio_renderer_mixer_input_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698