| Index: media/renderers/renderer_impl.cc
|
| diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
|
| index eb5710d2eea5f40c4f634d063a62e29f9547c162..d2386f6c8839c7704aae822a5b1b9b5cb46a5ac5 100644
|
| --- a/media/renderers/renderer_impl.cc
|
| +++ b/media/renderers/renderer_impl.cc
|
| @@ -264,6 +264,13 @@ 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_;
|
| + }
|
| + }
|
| return time_source_->CurrentMediaTime();
|
| }
|
|
|
| @@ -575,7 +582,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 +780,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();
|
|
|