Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: media/base/pipeline.cc

Issue 403723006: Make media::AudioRenderer inherit from media::TimeSource. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/base/pipeline.h" 5 #include "media/base/pipeline.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 #endif 440 #endif
441 441
442 void Pipeline::DoSeek( 442 void Pipeline::DoSeek(
443 base::TimeDelta seek_timestamp, 443 base::TimeDelta seek_timestamp,
444 const PipelineStatusCB& done_cb) { 444 const PipelineStatusCB& done_cb) {
445 DCHECK(task_runner_->BelongsToCurrentThread()); 445 DCHECK(task_runner_->BelongsToCurrentThread());
446 DCHECK(!pending_callbacks_.get()); 446 DCHECK(!pending_callbacks_.get());
447 SerialRunner::Queue bound_fns; 447 SerialRunner::Queue bound_fns;
448 { 448 {
449 base::AutoLock auto_lock(lock_); 449 base::AutoLock auto_lock(lock_);
450 PauseClockAndStopRendering_Locked(); 450 PauseClockAndStopTicking_Locked();
451 } 451 }
452 452
453 // Pause. 453 // Pause.
454 if (text_renderer_) { 454 if (text_renderer_) {
455 bound_fns.Push(base::Bind( 455 bound_fns.Push(base::Bind(
456 &TextRenderer::Pause, base::Unretained(text_renderer_.get()))); 456 &TextRenderer::Pause, base::Unretained(text_renderer_.get())));
457 } 457 }
458 458
459 // Flush. 459 // Flush.
460 if (audio_renderer_) { 460 if (audio_renderer_) {
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 return; 743 return;
744 744
745 if (video_renderer_ && !video_ended_) 745 if (video_renderer_ && !video_ended_)
746 return; 746 return;
747 747
748 if (text_renderer_ && text_renderer_->HasTracks() && !text_ended_) 748 if (text_renderer_ && text_renderer_->HasTracks() && !text_ended_)
749 return; 749 return;
750 750
751 { 751 {
752 base::AutoLock auto_lock(lock_); 752 base::AutoLock auto_lock(lock_);
753 PauseClockAndStopRendering_Locked(); 753 PauseClockAndStopTicking_Locked();
754 interpolator_->SetBounds(duration_, duration_); 754 interpolator_->SetBounds(duration_, duration_);
755 } 755 }
756 756
757 DCHECK_EQ(status_, PIPELINE_OK); 757 DCHECK_EQ(status_, PIPELINE_OK);
758 ended_cb_.Run(); 758 ended_cb_.Run();
759 } 759 }
760 760
761 void Pipeline::AddTextStreamTask(DemuxerStream* text_stream, 761 void Pipeline::AddTextStreamTask(DemuxerStream* text_stream,
762 const TextTrackConfig& config) { 762 const TextTrackConfig& config) {
763 DCHECK(task_runner_->BelongsToCurrentThread()); 763 DCHECK(task_runner_->BelongsToCurrentThread());
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 return false; 856 return false;
857 } 857 }
858 858
859 void Pipeline::PausePlayback() { 859 void Pipeline::PausePlayback() {
860 DVLOG(1) << __FUNCTION__; 860 DVLOG(1) << __FUNCTION__;
861 DCHECK_EQ(state_, kPlaying); 861 DCHECK_EQ(state_, kPlaying);
862 DCHECK(WaitingForEnoughData()); 862 DCHECK(WaitingForEnoughData());
863 DCHECK(task_runner_->BelongsToCurrentThread()); 863 DCHECK(task_runner_->BelongsToCurrentThread());
864 864
865 base::AutoLock auto_lock(lock_); 865 base::AutoLock auto_lock(lock_);
866 PauseClockAndStopRendering_Locked(); 866 PauseClockAndStopTicking_Locked();
867 } 867 }
868 868
869 void Pipeline::StartPlayback() { 869 void Pipeline::StartPlayback() {
870 DVLOG(1) << __FUNCTION__; 870 DVLOG(1) << __FUNCTION__;
871 DCHECK_EQ(state_, kPlaying); 871 DCHECK_EQ(state_, kPlaying);
872 DCHECK_EQ(interpolation_state_, INTERPOLATION_STOPPED); 872 DCHECK_EQ(interpolation_state_, INTERPOLATION_STOPPED);
873 DCHECK(!WaitingForEnoughData()); 873 DCHECK(!WaitingForEnoughData());
874 DCHECK(task_runner_->BelongsToCurrentThread()); 874 DCHECK(task_runner_->BelongsToCurrentThread());
875 875
876 if (audio_renderer_) { 876 if (audio_renderer_) {
877 // We use audio stream to update the clock. So if there is such a 877 // We use audio stream to update the clock. So if there is such a
878 // stream, we pause the clock until we receive a valid timestamp. 878 // stream, we pause the clock until we receive a valid timestamp.
879 base::AutoLock auto_lock(lock_); 879 base::AutoLock auto_lock(lock_);
880 interpolation_state_ = INTERPOLATION_WAITING_FOR_AUDIO_TIME_UPDATE; 880 interpolation_state_ = INTERPOLATION_WAITING_FOR_AUDIO_TIME_UPDATE;
881 audio_renderer_->StartRendering(); 881 audio_renderer_->StartTicking();
882 } else { 882 } else {
883 base::AutoLock auto_lock(lock_); 883 base::AutoLock auto_lock(lock_);
884 interpolation_state_ = INTERPOLATION_STARTED; 884 interpolation_state_ = INTERPOLATION_STARTED;
885 interpolator_->SetUpperBound(duration_); 885 interpolator_->SetUpperBound(duration_);
886 interpolator_->StartInterpolating(); 886 interpolator_->StartInterpolating();
887 } 887 }
888 } 888 }
889 889
890 void Pipeline::PauseClockAndStopRendering_Locked() { 890 void Pipeline::PauseClockAndStopTicking_Locked() {
891 lock_.AssertAcquired(); 891 lock_.AssertAcquired();
892 switch (interpolation_state_) { 892 switch (interpolation_state_) {
893 case INTERPOLATION_STOPPED: 893 case INTERPOLATION_STOPPED:
894 return; 894 return;
895 895
896 case INTERPOLATION_WAITING_FOR_AUDIO_TIME_UPDATE: 896 case INTERPOLATION_WAITING_FOR_AUDIO_TIME_UPDATE:
897 audio_renderer_->StopRendering(); 897 audio_renderer_->StopTicking();
898 break; 898 break;
899 899
900 case INTERPOLATION_STARTED: 900 case INTERPOLATION_STARTED:
901 if (audio_renderer_) 901 if (audio_renderer_)
902 audio_renderer_->StopRendering(); 902 audio_renderer_->StopTicking();
903 interpolator_->StopInterpolating(); 903 interpolator_->StopInterpolating();
904 break; 904 break;
905 } 905 }
906 906
907 interpolation_state_ = INTERPOLATION_STOPPED; 907 interpolation_state_ = INTERPOLATION_STOPPED;
908 } 908 }
909 909
910 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() { 910 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() {
911 lock_.AssertAcquired(); 911 lock_.AssertAcquired();
912 if (interpolation_state_ != INTERPOLATION_WAITING_FOR_AUDIO_TIME_UPDATE) 912 if (interpolation_state_ != INTERPOLATION_WAITING_FOR_AUDIO_TIME_UPDATE)
913 return; 913 return;
914 914
915 interpolation_state_ = INTERPOLATION_STARTED; 915 interpolation_state_ = INTERPOLATION_STARTED;
916 interpolator_->StartInterpolating(); 916 interpolator_->StartInterpolating();
917 } 917 }
918 918
919 } // namespace media 919 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698