Chromium Code Reviews| Index: media/filters/audio_renderer_impl.cc |
| diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc |
| index bbe0d786b98472e2492063e8c35907432d6a9ca4..4198a48dd016d4627e48d40149d34db892da81a5 100644 |
| --- a/media/filters/audio_renderer_impl.cc |
| +++ b/media/filters/audio_renderer_impl.cc |
| @@ -67,9 +67,18 @@ 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 (sink_) { |
| + // If Render() is in process, this call will wait for Render() to finish. |
|
scherkus (not reviewing)
2014/07/21 23:38:20
s/process/progress/?
xhwang
2014/07/21 23:56:33
Done.
|
| + // After this call, the |sink_| will not call back into |this| anymore. |
| + sink_->Stop(); |
| + sink_ = NULL; |
|
scherkus (not reviewing)
2014/07/21 23:38:20
is this required to force the ref-count to zero? i
xhwang
2014/07/21 23:56:33
Probably not needed. The ref-count will be dropped
|
| + } |
| + |
| + if (!init_cb_.is_null()) |
| + base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_ABORT); |
| } |
| void AudioRendererImpl::StartRendering() { |
| @@ -163,8 +172,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()); |
| @@ -188,37 +195,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::StartPlayingFrom(base::TimeDelta timestamp) { |
| DVLOG(1) << __FUNCTION__ << "(" << timestamp.InMicroseconds() << ")"; |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| @@ -310,11 +286,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); |
| @@ -445,7 +416,7 @@ bool AudioRendererImpl::HandleSplicerBuffer_Locked( |
| return true; |
| } |
| - if (state_ != kUninitialized && state_ != kStopped) |
| + if (state_ != kUninitialized) |
| algorithm_->EnqueueBuffer(buffer); |
| } |
| @@ -467,9 +438,6 @@ bool AudioRendererImpl::HandleSplicerBuffer_Locked( |
| return false; |
| } |
| return true; |
| - |
| - case kStopped: |
| - return false; |
| } |
| return false; |
| } |
| @@ -499,7 +467,6 @@ bool AudioRendererImpl::CanRead_Locked() { |
| case kInitializing: |
| case kFlushing: |
| case kFlushed: |
| - case kStopped: |
| return false; |
| case kPlaying: |
| @@ -666,7 +633,6 @@ void AudioRendererImpl::HandleAbortedReadOrDecodeError(bool is_decode_error) { |
| case kFlushed: |
| case kPlaying: |
| - case kStopped: |
| if (status != PIPELINE_OK) |
| error_cb_.Run(status); |
| return; |