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; |