Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/renderers/renderer_impl.h" | 5 #include "media/renderers/renderer_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 257 DVLOG(1) << __func__; | 257 DVLOG(1) << __func__; |
| 258 DCHECK(task_runner_->BelongsToCurrentThread()); | 258 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 259 | 259 |
| 260 if (audio_renderer_) | 260 if (audio_renderer_) |
| 261 audio_renderer_->SetVolume(volume); | 261 audio_renderer_->SetVolume(volume); |
| 262 } | 262 } |
| 263 | 263 |
| 264 base::TimeDelta RendererImpl::GetMediaTime() { | 264 base::TimeDelta RendererImpl::GetMediaTime() { |
| 265 // No BelongsToCurrentThread() checking because this can be called from other | 265 // No BelongsToCurrentThread() checking because this can be called from other |
| 266 // threads. | 266 // threads. |
| 267 base::AutoLock lock(restarting_audio_lock_); | |
| 268 if (restarting_audio_) { | |
| 269 DCHECK_NE(kNoTimestamp, restarting_audio_time_); | |
| 270 return restarting_audio_time_; | |
| 271 } | |
|
xhwang
2017/05/24 00:23:41
If time_source_->CurrentMediaTime() calls back int
servolk
2017/05/24 00:28:00
Done.
| |
| 267 return time_source_->CurrentMediaTime(); | 272 return time_source_->CurrentMediaTime(); |
| 268 } | 273 } |
| 269 | 274 |
| 270 void RendererImpl::DisableUnderflowForTesting() { | 275 void RendererImpl::DisableUnderflowForTesting() { |
| 271 DVLOG(1) << __func__; | 276 DVLOG(1) << __func__; |
| 272 DCHECK(task_runner_->BelongsToCurrentThread()); | 277 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 273 DCHECK_EQ(state_, STATE_UNINITIALIZED); | 278 DCHECK_EQ(state_, STATE_UNINITIALIZED); |
| 274 | 279 |
| 275 underflow_disabled_for_testing_ = true; | 280 underflow_disabled_for_testing_ = true; |
| 276 } | 281 } |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 568 ? &RendererImpl::RestartVideoRenderer | 573 ? &RendererImpl::RestartVideoRenderer |
| 569 : &RendererImpl::ReinitializeVideoRenderer, | 574 : &RendererImpl::ReinitializeVideoRenderer, |
| 570 weak_this_, stream, time); | 575 weak_this_, stream, time); |
| 571 if (state_ == STATE_FLUSHED) | 576 if (state_ == STATE_FLUSHED) |
| 572 handle_track_status_cb.Run(); | 577 handle_track_status_cb.Run(); |
| 573 else | 578 else |
| 574 video_renderer_->Flush(handle_track_status_cb); | 579 video_renderer_->Flush(handle_track_status_cb); |
| 575 } else if (stream->type() == DemuxerStream::AUDIO) { | 580 } else if (stream->type() == DemuxerStream::AUDIO) { |
| 576 DCHECK(audio_renderer_); | 581 DCHECK(audio_renderer_); |
| 577 DCHECK(time_source_); | 582 DCHECK(time_source_); |
| 578 restarting_audio_ = true; | 583 { |
| 584 base::AutoLock lock(restarting_audio_lock_); | |
| 585 restarting_audio_time_ = time; | |
| 586 restarting_audio_ = true; | |
| 587 } | |
| 579 base::Closure handle_track_status_cb = | 588 base::Closure handle_track_status_cb = |
| 580 base::Bind(stream == current_audio_stream_ | 589 base::Bind(stream == current_audio_stream_ |
| 581 ? &RendererImpl::RestartAudioRenderer | 590 ? &RendererImpl::RestartAudioRenderer |
| 582 : &RendererImpl::ReinitializeAudioRenderer, | 591 : &RendererImpl::ReinitializeAudioRenderer, |
| 583 weak_this_, stream, time); | 592 weak_this_, stream, time); |
| 584 if (state_ == STATE_FLUSHED) { | 593 if (state_ == STATE_FLUSHED) { |
| 585 handle_track_status_cb.Run(); | 594 handle_track_status_cb.Run(); |
| 586 return; | 595 return; |
| 587 } | 596 } |
| 588 // Stop ticking (transition into paused state) in audio renderer before | 597 // Stop ticking (transition into paused state) in audio renderer before |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 762 } | 771 } |
| 763 } | 772 } |
| 764 return false; | 773 return false; |
| 765 } | 774 } |
| 766 | 775 |
| 767 void RendererImpl::OnStreamRestartCompleted() { | 776 void RendererImpl::OnStreamRestartCompleted() { |
| 768 DVLOG(3) << __func__ << " restarting_audio_=" << restarting_audio_ | 777 DVLOG(3) << __func__ << " restarting_audio_=" << restarting_audio_ |
| 769 << " restarting_video_=" << restarting_video_; | 778 << " restarting_video_=" << restarting_video_; |
| 770 DCHECK(task_runner_->BelongsToCurrentThread()); | 779 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 771 DCHECK(restarting_audio_ || restarting_video_); | 780 DCHECK(restarting_audio_ || restarting_video_); |
| 772 restarting_audio_ = false; | 781 { |
| 782 base::AutoLock lock(restarting_audio_lock_); | |
| 783 restarting_audio_ = false; | |
| 784 restarting_audio_time_ = kNoTimestamp; | |
| 785 } | |
| 773 restarting_video_ = false; | 786 restarting_video_ = false; |
| 774 if (!pending_actions_.empty()) { | 787 if (!pending_actions_.empty()) { |
| 775 base::Closure closure = pending_actions_.front(); | 788 base::Closure closure = pending_actions_.front(); |
| 776 pending_actions_.pop_front(); | 789 pending_actions_.pop_front(); |
| 777 closure.Run(); | 790 closure.Run(); |
| 778 } | 791 } |
| 779 } | 792 } |
| 780 | 793 |
| 781 void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type, | 794 void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type, |
| 782 BufferingState new_buffering_state) { | 795 BufferingState new_buffering_state) { |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 991 DCHECK(task_runner_->BelongsToCurrentThread()); | 1004 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 992 client_->OnVideoNaturalSizeChange(size); | 1005 client_->OnVideoNaturalSizeChange(size); |
| 993 } | 1006 } |
| 994 | 1007 |
| 995 void RendererImpl::OnVideoOpacityChange(bool opaque) { | 1008 void RendererImpl::OnVideoOpacityChange(bool opaque) { |
| 996 DCHECK(task_runner_->BelongsToCurrentThread()); | 1009 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 997 client_->OnVideoOpacityChange(opaque); | 1010 client_->OnVideoOpacityChange(opaque); |
| 998 } | 1011 } |
| 999 | 1012 |
| 1000 } // namespace media | 1013 } // namespace media |
| OLD | NEW |