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 f9b314d2ec2536ff43b18fd15ae2db222f61a4a0..00157a6b82b7b46fd8f857e4b9da3813da5befee 100644 |
| --- a/media/filters/audio_renderer_impl.cc |
| +++ b/media/filters/audio_renderer_impl.cc |
| @@ -182,6 +182,29 @@ void AudioRendererImpl::ResetDecoderDone() { |
| base::ResetAndReturn(&flush_cb_).Run(); |
| } |
| +void AudioRendererImpl::StopDecoder() { |
| + DCHECK(task_runner_->BelongsToCurrentThread()); |
| + decoder_->Stop(BindToCurrentLoop( |
| + base::Bind(&AudioRendererImpl::StopDecoderDone, weak_this_))); |
| +} |
| + |
| +void AudioRendererImpl::StopDecoderDone() { |
| + base::AutoLock auto_lock(lock_); |
|
DaleCurtis
2014/01/08 00:30:54
Previous method doesn't run this under lock. It m
rileya (GONE FROM CHROMIUM)
2014/01/08 21:05:50
Which previous method do you mean?
DaleCurtis
2014/01/08 21:51:45
See line 236 in Stop() below. callback.Run() occur
rileya (GONE FROM CHROMIUM)
2014/01/08 22:02:55
Ahh, gotcha. Looks like ResetDecoderDone also call
DaleCurtis
2014/01/08 23:56:14
sgtm
|
| + if (state_ == kStopped) |
| + return; |
| + |
| + DCHECK(!stop_cb_.is_null()); |
| + |
| + ChangeState_Locked(kStopped); |
| + algorithm_.reset(NULL); |
|
DaleCurtis
2014/01/08 00:30:54
drop NULL.
|
| + init_cb_.Reset(); |
| + underflow_cb_.Reset(); |
| + time_cb_.Reset(); |
| + flush_cb_.Reset(); |
|
xhwang
2014/01/08 01:33:37
Wrap 199-203 in a helper function so it can be sha
rileya (GONE FROM CHROMIUM)
2014/01/08 21:05:50
StopDecoderDone was already basically this, so per
|
| + |
| + base::ResetAndReturn(&stop_cb_).Run(); |
| +} |
| + |
| void AudioRendererImpl::Stop(const base::Closure& callback) { |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| DCHECK(!callback.is_null()); |
| @@ -194,6 +217,12 @@ void AudioRendererImpl::Stop(const base::Closure& callback) { |
| sink_ = NULL; |
| } |
| + if (decoder_) { |
| + stop_cb_ = callback; |
| + StopDecoder(); |
|
DaleCurtis
2014/01/08 00:30:54
You can probably drop the StopDecoder() method in
rileya (GONE FROM CHROMIUM)
2014/01/08 21:05:50
Done.
|
| + return; |
| + } |
| + |
| { |
|
DaleCurtis
2014/01/08 00:30:54
Just call StopDecoderDone here?
rileya (GONE FROM CHROMIUM)
2014/01/08 21:05:50
Makes sense, done.
|
| base::AutoLock auto_lock(lock_); |
| ChangeState_Locked(kStopped); |