| Index: media/filters/audio_renderer_impl.cc
|
| diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
|
| index cfdf016ec0088df2ae9e62c8fe6752e799838f39..44536de51723cb502a2b211f412056a6e1f01057 100644
|
| --- a/media/filters/audio_renderer_impl.cc
|
| +++ b/media/filters/audio_renderer_impl.cc
|
| @@ -67,9 +67,15 @@ AudioRendererImpl::AudioRendererImpl(
|
| }
|
|
|
| AudioRendererImpl::~AudioRendererImpl() {
|
| - // Stop() should have been called and |algorithm_| should have been destroyed.
|
| - DCHECK(state_ == kUninitialized || state_ == kStopped);
|
| - DCHECK(!algorithm_.get());
|
| + DVLOG(1) << __FUNCTION__;
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| +
|
| + // If Render() is in progress, this call will wait for Render() to finish.
|
| + // After this call, the |sink_| will not call back into |this| anymore.
|
| + sink_->Stop();
|
| +
|
| + if (!init_cb_.is_null())
|
| + base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_ABORT);
|
| }
|
|
|
| void AudioRendererImpl::StartTicking() {
|
| @@ -189,8 +195,6 @@ void AudioRendererImpl::ResetDecoderDone() {
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| {
|
| base::AutoLock auto_lock(lock_);
|
| - if (state_ == kStopped)
|
| - return;
|
|
|
| DCHECK_EQ(state_, kFlushed);
|
| DCHECK(!flush_cb_.is_null());
|
| @@ -214,37 +218,6 @@ void AudioRendererImpl::ResetDecoderDone() {
|
| task_runner_->PostTask(FROM_HERE, base::ResetAndReturn(&flush_cb_));
|
| }
|
|
|
| -void AudioRendererImpl::Stop(const base::Closure& callback) {
|
| - DVLOG(1) << __FUNCTION__;
|
| - DCHECK(task_runner_->BelongsToCurrentThread());
|
| - DCHECK(!callback.is_null());
|
| -
|
| - // TODO(scherkus): Consider invalidating |weak_factory_| and replacing
|
| - // task-running guards that check |state_| with DCHECK().
|
| -
|
| - {
|
| - base::AutoLock auto_lock(lock_);
|
| -
|
| - if (state_ == kStopped) {
|
| - task_runner_->PostTask(FROM_HERE, callback);
|
| - return;
|
| - }
|
| -
|
| - ChangeState_Locked(kStopped);
|
| - algorithm_.reset();
|
| - time_cb_.Reset();
|
| - flush_cb_.Reset();
|
| - }
|
| -
|
| - if (sink_) {
|
| - sink_->Stop();
|
| - sink_ = NULL;
|
| - }
|
| -
|
| - audio_buffer_stream_.reset();
|
| - task_runner_->PostTask(FROM_HERE, callback);
|
| -}
|
| -
|
| void AudioRendererImpl::StartPlaying() {
|
| DVLOG(1) << __FUNCTION__;
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| @@ -334,11 +307,6 @@ void AudioRendererImpl::OnAudioBufferStreamInitialized(bool success) {
|
|
|
| base::AutoLock auto_lock(lock_);
|
|
|
| - if (state_ == kStopped) {
|
| - base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_ABORT);
|
| - return;
|
| - }
|
| -
|
| if (!success) {
|
| state_ = kUninitialized;
|
| base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
|
| @@ -469,7 +437,7 @@ bool AudioRendererImpl::HandleSplicerBuffer_Locked(
|
| return true;
|
| }
|
|
|
| - if (state_ != kUninitialized && state_ != kStopped)
|
| + if (state_ != kUninitialized)
|
| algorithm_->EnqueueBuffer(buffer);
|
| }
|
|
|
| @@ -491,9 +459,6 @@ bool AudioRendererImpl::HandleSplicerBuffer_Locked(
|
| return false;
|
| }
|
| return true;
|
| -
|
| - case kStopped:
|
| - return false;
|
| }
|
| return false;
|
| }
|
| @@ -523,7 +488,6 @@ bool AudioRendererImpl::CanRead_Locked() {
|
| case kInitializing:
|
| case kFlushing:
|
| case kFlushed:
|
| - case kStopped:
|
| return false;
|
|
|
| case kPlaying:
|
| @@ -690,7 +654,6 @@ void AudioRendererImpl::HandleAbortedReadOrDecodeError(bool is_decode_error) {
|
|
|
| case kFlushed:
|
| case kPlaying:
|
| - case kStopped:
|
| if (status != PIPELINE_OK)
|
| error_cb_.Run(status);
|
| return;
|
|
|