| 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..d09cebf7667460cf82a6ea869e791dbb69c1b62a 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,12 +57,13 @@ 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;
|
| }
|
| }
|
|
|
|
|