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