Chromium Code Reviews| Index: media/renderers/renderer_impl.cc |
| diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc |
| index eb5710d2eea5f40c4f634d063a62e29f9547c162..61cfb40e8a79f3517facc33b221f393d91948233 100644 |
| --- a/media/renderers/renderer_impl.cc |
| +++ b/media/renderers/renderer_impl.cc |
| @@ -264,6 +264,11 @@ void RendererImpl::SetVolume(float volume) { |
| base::TimeDelta RendererImpl::GetMediaTime() { |
| // No BelongsToCurrentThread() checking because this can be called from other |
| // threads. |
| + base::AutoLock lock(restarting_audio_lock_); |
| + if (restarting_audio_) { |
| + DCHECK_NE(kNoTimestamp, restarting_audio_time_); |
| + return restarting_audio_time_; |
| + } |
|
xhwang
2017/05/24 00:23:41
If time_source_->CurrentMediaTime() calls back int
servolk
2017/05/24 00:28:00
Done.
|
| return time_source_->CurrentMediaTime(); |
| } |
| @@ -575,7 +580,11 @@ void RendererImpl::OnStreamStatusChanged(DemuxerStream* stream, |
| } else if (stream->type() == DemuxerStream::AUDIO) { |
| DCHECK(audio_renderer_); |
| DCHECK(time_source_); |
| - restarting_audio_ = true; |
| + { |
| + base::AutoLock lock(restarting_audio_lock_); |
| + restarting_audio_time_ = time; |
| + restarting_audio_ = true; |
| + } |
| base::Closure handle_track_status_cb = |
| base::Bind(stream == current_audio_stream_ |
| ? &RendererImpl::RestartAudioRenderer |
| @@ -769,7 +778,11 @@ void RendererImpl::OnStreamRestartCompleted() { |
| << " restarting_video_=" << restarting_video_; |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| DCHECK(restarting_audio_ || restarting_video_); |
| - restarting_audio_ = false; |
| + { |
| + base::AutoLock lock(restarting_audio_lock_); |
| + restarting_audio_ = false; |
| + restarting_audio_time_ = kNoTimestamp; |
| + } |
| restarting_video_ = false; |
| if (!pending_actions_.empty()) { |
| base::Closure closure = pending_actions_.front(); |