| Index: media/filters/audio_renderer_impl.cc
|
| diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
|
| index 4cb1f9d3c0b93a1d9ef098081f3fb46f96b6ad07..f9b314d2ec2536ff43b18fd15ae2db222f61a4a0 100644
|
| --- a/media/filters/audio_renderer_impl.cc
|
| +++ b/media/filters/audio_renderer_impl.cc
|
| @@ -147,8 +147,8 @@
|
| DCHECK_EQ(state_, kPaused);
|
|
|
| if (decrypting_demuxer_stream_) {
|
| - decrypting_demuxer_stream_->Reset(
|
| - base::Bind(&AudioRendererImpl::ResetDecoder, weak_this_));
|
| + decrypting_demuxer_stream_->Reset(BindToCurrentLoop(
|
| + base::Bind(&AudioRendererImpl::ResetDecoder, weak_this_)));
|
| return;
|
| }
|
|
|
| @@ -157,73 +157,54 @@
|
|
|
| void AudioRendererImpl::ResetDecoder() {
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| - decoder_->Reset(base::Bind(&AudioRendererImpl::ResetDecoderDone, weak_this_));
|
| + decoder_->Reset(BindToCurrentLoop(
|
| + base::Bind(&AudioRendererImpl::ResetDecoderDone, weak_this_)));
|
| }
|
|
|
| void AudioRendererImpl::ResetDecoderDone() {
|
| - DCHECK(task_runner_->BelongsToCurrentThread());
|
| + base::AutoLock auto_lock(lock_);
|
| + if (state_ == kStopped)
|
| + return;
|
| +
|
| + DCHECK_EQ(state_, kPaused);
|
| + DCHECK(!flush_cb_.is_null());
|
| +
|
| + audio_time_buffered_ = kNoTimestamp();
|
| + current_time_ = kNoTimestamp();
|
| + received_end_of_stream_ = false;
|
| + rendered_end_of_stream_ = false;
|
| + preroll_aborted_ = false;
|
| +
|
| + earliest_end_time_ = now_cb_.Run();
|
| + splicer_->Reset();
|
| + algorithm_->FlushBuffers();
|
| +
|
| + base::ResetAndReturn(&flush_cb_).Run();
|
| +}
|
| +
|
| +void AudioRendererImpl::Stop(const base::Closure& callback) {
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| + DCHECK(!callback.is_null());
|
| +
|
| + // TODO(scherkus): Consider invalidating |weak_factory_| and replacing
|
| + // task-running guards that check |state_| with DCHECK().
|
| +
|
| + if (sink_) {
|
| + sink_->Stop();
|
| + sink_ = NULL;
|
| + }
|
| +
|
| {
|
| base::AutoLock auto_lock(lock_);
|
| - if (state_ == kStopped)
|
| - return;
|
| -
|
| - DCHECK_EQ(state_, kPaused);
|
| - DCHECK(!flush_cb_.is_null());
|
| -
|
| - audio_time_buffered_ = kNoTimestamp();
|
| - current_time_ = kNoTimestamp();
|
| - received_end_of_stream_ = false;
|
| - rendered_end_of_stream_ = false;
|
| - preroll_aborted_ = false;
|
| -
|
| - earliest_end_time_ = now_cb_.Run();
|
| - splicer_->Reset();
|
| - algorithm_->FlushBuffers();
|
| - }
|
| - base::ResetAndReturn(&flush_cb_).Run();
|
| -}
|
| -
|
| -void AudioRendererImpl::StopDecoderDone() {
|
| - DCHECK(task_runner_->BelongsToCurrentThread());
|
| - {
|
| - base::AutoLock auto_lock(lock_);
|
| - if (state_ == kStopped)
|
| - return;
|
| -
|
| - DCHECK(!stop_cb_.is_null());
|
| - DCHECK(init_cb_.is_null());
|
| -
|
| ChangeState_Locked(kStopped);
|
| - algorithm_.reset();
|
| + algorithm_.reset(NULL);
|
| init_cb_.Reset();
|
| underflow_cb_.Reset();
|
| time_cb_.Reset();
|
| flush_cb_.Reset();
|
| }
|
| - base::ResetAndReturn(&stop_cb_).Run();
|
| -}
|
| -
|
| -void AudioRendererImpl::Stop(const base::Closure& callback) {
|
| - DCHECK(task_runner_->BelongsToCurrentThread());
|
| - DCHECK(!callback.is_null());
|
| -
|
| - // TODO(scherkus): Consider invalidating |weak_factory_| and replacing
|
| - // task-running guards that check |state_| with DCHECK().
|
| -
|
| - if (sink_) {
|
| - sink_->Stop();
|
| - sink_ = NULL;
|
| - }
|
| -
|
| - stop_cb_ = callback;
|
| -
|
| - if (decoder_) {
|
| - DCHECK(task_runner_->BelongsToCurrentThread());
|
| - decoder_->Stop(base::Bind(&AudioRendererImpl::StopDecoderDone, weak_this_));
|
| - return;
|
| - }
|
| -
|
| - StopDecoderDone();
|
| +
|
| + callback.Run();
|
| }
|
|
|
| void AudioRendererImpl::Preroll(base::TimeDelta time,
|
|
|