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 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 return; | 284 return; |
285 | 285 |
286 time_source_->SetPlaybackRate(playback_rate); | 286 time_source_->SetPlaybackRate(playback_rate); |
287 | 287 |
288 const double old_rate = playback_rate_; | 288 const double old_rate = playback_rate_; |
289 playback_rate_ = playback_rate; | 289 playback_rate_ = playback_rate; |
290 if (!time_ticking_ || !video_renderer_) | 290 if (!time_ticking_ || !video_renderer_) |
291 return; | 291 return; |
292 | 292 |
293 if (old_rate == 0 && playback_rate > 0) | 293 if (old_rate == 0 && playback_rate > 0) |
294 video_renderer_->OnTimeStateChanged(true); | 294 video_renderer_->OnTimeProgressing(); |
295 else if (old_rate > 0 && playback_rate == 0) | 295 else if (old_rate > 0 && playback_rate == 0) |
296 video_renderer_->OnTimeStateChanged(false); | 296 video_renderer_->OnTimeStopped(); |
297 } | 297 } |
298 | 298 |
299 void RendererImpl::SetVolume(float volume) { | 299 void RendererImpl::SetVolume(float volume) { |
300 DVLOG(1) << __func__; | 300 DVLOG(1) << __func__; |
301 DCHECK(task_runner_->BelongsToCurrentThread()); | 301 DCHECK(task_runner_->BelongsToCurrentThread()); |
302 | 302 |
303 if (audio_renderer_) | 303 if (audio_renderer_) |
304 audio_renderer_->SetVolume(volume); | 304 audio_renderer_->SetVolume(volume); |
305 } | 305 } |
306 | 306 |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 " resuming playback."; | 588 " resuming playback."; |
589 restarting_video_ = false; | 589 restarting_video_ = false; |
590 if (state_ == STATE_PLAYING && | 590 if (state_ == STATE_PLAYING && |
591 !deferred_video_underflow_cb_.IsCancelled()) { | 591 !deferred_video_underflow_cb_.IsCancelled()) { |
592 // If deferred_video_underflow_cb_ wasn't triggered, then audio should | 592 // If deferred_video_underflow_cb_ wasn't triggered, then audio should |
593 // still be playing, we only need to unpause the video stream. | 593 // still be playing, we only need to unpause the video stream. |
594 DVLOG(4) << "deferred_video_underflow_cb_.Cancel()"; | 594 DVLOG(4) << "deferred_video_underflow_cb_.Cancel()"; |
595 deferred_video_underflow_cb_.Cancel(); | 595 deferred_video_underflow_cb_.Cancel(); |
596 video_buffering_state_ = new_buffering_state; | 596 video_buffering_state_ = new_buffering_state; |
597 if (playback_rate_ > 0) | 597 if (playback_rate_ > 0) |
598 video_renderer_->OnTimeStateChanged(true); | 598 video_renderer_->OnTimeProgressing(); |
599 return true; | 599 return true; |
600 } | 600 } |
601 } | 601 } |
602 // We don't handle the BUFFERING_HAVE_NOTHING case explicitly here, since | 602 // We don't handle the BUFFERING_HAVE_NOTHING case explicitly here, since |
603 // the existing logic for deferring video underflow reporting in | 603 // the existing logic for deferring video underflow reporting in |
604 // OnBufferingStateChange is exactly what we need. So fall through to the | 604 // OnBufferingStateChange is exactly what we need. So fall through to the |
605 // regular video underflow handling path in OnBufferingStateChange. | 605 // regular video underflow handling path in OnBufferingStateChange. |
606 } | 606 } |
607 | 607 |
608 if (type == DemuxerStream::AUDIO && restarting_audio_) { | 608 if (type == DemuxerStream::AUDIO && restarting_audio_) { |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
745 case STATE_ERROR: | 745 case STATE_ERROR: |
746 // An error state may occur at any time. | 746 // An error state may occur at any time. |
747 break; | 747 break; |
748 } | 748 } |
749 | 749 |
750 if (time_ticking_) { | 750 if (time_ticking_) { |
751 time_ticking_ = false; | 751 time_ticking_ = false; |
752 time_source_->StopTicking(); | 752 time_source_->StopTicking(); |
753 } | 753 } |
754 if (playback_rate_ > 0 && video_renderer_) | 754 if (playback_rate_ > 0 && video_renderer_) |
755 video_renderer_->OnTimeStateChanged(false); | 755 video_renderer_->OnTimeStopped(); |
756 } | 756 } |
757 | 757 |
758 void RendererImpl::StartPlayback() { | 758 void RendererImpl::StartPlayback() { |
759 DVLOG(1) << __func__; | 759 DVLOG(1) << __func__; |
760 DCHECK(task_runner_->BelongsToCurrentThread()); | 760 DCHECK(task_runner_->BelongsToCurrentThread()); |
761 DCHECK_EQ(state_, STATE_PLAYING); | 761 DCHECK_EQ(state_, STATE_PLAYING); |
762 DCHECK(!time_ticking_); | 762 DCHECK(!time_ticking_); |
763 DCHECK(!WaitingForEnoughData()); | 763 DCHECK(!WaitingForEnoughData()); |
764 | 764 |
765 time_ticking_ = true; | 765 time_ticking_ = true; |
766 time_source_->StartTicking(); | 766 time_source_->StartTicking(); |
767 if (playback_rate_ > 0 && video_renderer_) | 767 if (playback_rate_ > 0 && video_renderer_) |
768 video_renderer_->OnTimeStateChanged(true); | 768 video_renderer_->OnTimeProgressing(); |
769 } | 769 } |
770 | 770 |
771 void RendererImpl::OnRendererEnded(DemuxerStream::Type type) { | 771 void RendererImpl::OnRendererEnded(DemuxerStream::Type type) { |
772 DVLOG(1) << __func__ << (type == DemuxerStream::AUDIO ? " audio" : " video"); | 772 DVLOG(1) << __func__ << (type == DemuxerStream::AUDIO ? " audio" : " video"); |
773 DCHECK(task_runner_->BelongsToCurrentThread()); | 773 DCHECK(task_runner_->BelongsToCurrentThread()); |
774 DCHECK((type == DemuxerStream::AUDIO) || (type == DemuxerStream::VIDEO)); | 774 DCHECK((type == DemuxerStream::AUDIO) || (type == DemuxerStream::VIDEO)); |
775 | 775 |
776 if (state_ != STATE_PLAYING) | 776 if (state_ != STATE_PLAYING) |
777 return; | 777 return; |
778 | 778 |
779 if (type == DemuxerStream::AUDIO) { | 779 if (type == DemuxerStream::AUDIO) { |
780 DCHECK(!audio_ended_); | 780 DCHECK(!audio_ended_); |
781 audio_ended_ = true; | 781 audio_ended_ = true; |
782 } else { | 782 } else { |
783 DCHECK(!video_ended_); | 783 DCHECK(!video_ended_); |
784 video_ended_ = true; | 784 video_ended_ = true; |
785 DCHECK(video_renderer_); | 785 DCHECK(video_renderer_); |
786 video_renderer_->OnTimeStateChanged(false); | 786 video_renderer_->OnTimeStopped(); |
787 } | 787 } |
788 | 788 |
789 RunEndedCallbackIfNeeded(); | 789 RunEndedCallbackIfNeeded(); |
790 } | 790 } |
791 | 791 |
792 bool RendererImpl::PlaybackHasEnded() const { | 792 bool RendererImpl::PlaybackHasEnded() const { |
793 DCHECK(task_runner_->BelongsToCurrentThread()); | 793 DCHECK(task_runner_->BelongsToCurrentThread()); |
794 | 794 |
795 if (audio_renderer_ && !audio_ended_) | 795 if (audio_renderer_ && !audio_ended_) |
796 return false; | 796 return false; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 DCHECK(task_runner_->BelongsToCurrentThread()); | 849 DCHECK(task_runner_->BelongsToCurrentThread()); |
850 client_->OnVideoNaturalSizeChange(size); | 850 client_->OnVideoNaturalSizeChange(size); |
851 } | 851 } |
852 | 852 |
853 void RendererImpl::OnVideoOpacityChange(bool opaque) { | 853 void RendererImpl::OnVideoOpacityChange(bool opaque) { |
854 DCHECK(task_runner_->BelongsToCurrentThread()); | 854 DCHECK(task_runner_->BelongsToCurrentThread()); |
855 client_->OnVideoOpacityChange(opaque); | 855 client_->OnVideoOpacityChange(opaque); |
856 } | 856 } |
857 | 857 |
858 } // namespace media | 858 } // namespace media |
OLD | NEW |