OLD | NEW |
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_impl.h" | 5 #include "media/base/pipeline_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 DCHECK(shared_state_.renderer); | 550 DCHECK(shared_state_.renderer); |
551 | 551 |
552 base::TimeDelta currTime = (state_ == kPlaying) | 552 base::TimeDelta currTime = (state_ == kPlaying) |
553 ? shared_state_.renderer->GetMediaTime() | 553 ? shared_state_.renderer->GetMediaTime() |
554 : start_timestamp_; | 554 : start_timestamp_; |
555 demuxer_->OnSelectedVideoTrackChanged(selectedTrackId, currTime); | 555 demuxer_->OnSelectedVideoTrackChanged(selectedTrackId, currTime); |
556 } | 556 } |
557 | 557 |
558 void PipelineImpl::RendererWrapper::OnStatisticsUpdate( | 558 void PipelineImpl::RendererWrapper::OnStatisticsUpdate( |
559 const PipelineStatistics& stats) { | 559 const PipelineStatistics& stats) { |
560 DVLOG(3) << __FUNCTION__; | 560 DVLOG(3) << __func__; |
561 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 561 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
562 | 562 |
563 base::AutoLock auto_lock(shared_state_lock_); | 563 base::AutoLock auto_lock(shared_state_lock_); |
564 shared_state_.statistics.audio_bytes_decoded += stats.audio_bytes_decoded; | 564 shared_state_.statistics.audio_bytes_decoded += stats.audio_bytes_decoded; |
565 shared_state_.statistics.video_bytes_decoded += stats.video_bytes_decoded; | 565 shared_state_.statistics.video_bytes_decoded += stats.video_bytes_decoded; |
566 shared_state_.statistics.video_frames_decoded += stats.video_frames_decoded; | 566 shared_state_.statistics.video_frames_decoded += stats.video_frames_decoded; |
567 shared_state_.statistics.video_frames_dropped += stats.video_frames_dropped; | 567 shared_state_.statistics.video_frames_dropped += stats.video_frames_dropped; |
568 shared_state_.statistics.audio_memory_usage += stats.audio_memory_usage; | 568 shared_state_.statistics.audio_memory_usage += stats.audio_memory_usage; |
569 shared_state_.statistics.video_memory_usage += stats.video_memory_usage; | 569 shared_state_.statistics.video_memory_usage += stats.video_memory_usage; |
570 } | 570 } |
571 | 571 |
572 void PipelineImpl::RendererWrapper::OnBufferingStateChange( | 572 void PipelineImpl::RendererWrapper::OnBufferingStateChange( |
573 BufferingState state) { | 573 BufferingState state) { |
574 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 574 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
575 DVLOG(2) << __FUNCTION__ << "(" << state << ") "; | 575 DVLOG(2) << __func__ << "(" << state << ") "; |
576 | 576 |
577 main_task_runner_->PostTask( | 577 main_task_runner_->PostTask( |
578 FROM_HERE, | 578 FROM_HERE, |
579 base::Bind(&PipelineImpl::OnBufferingStateChange, weak_pipeline_, state)); | 579 base::Bind(&PipelineImpl::OnBufferingStateChange, weak_pipeline_, state)); |
580 } | 580 } |
581 | 581 |
582 void PipelineImpl::RendererWrapper::OnWaitingForDecryptionKey() { | 582 void PipelineImpl::RendererWrapper::OnWaitingForDecryptionKey() { |
583 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 583 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
584 | 584 |
585 main_task_runner_->PostTask( | 585 main_task_runner_->PostTask( |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 } | 713 } |
714 | 714 |
715 // Seek demuxer. | 715 // Seek demuxer. |
716 bound_fns.Push( | 716 bound_fns.Push( |
717 base::Bind(&Demuxer::Seek, base::Unretained(demuxer_), seek_timestamp)); | 717 base::Bind(&Demuxer::Seek, base::Unretained(demuxer_), seek_timestamp)); |
718 | 718 |
719 pending_callbacks_ = SerialRunner::Run(bound_fns, done_cb); | 719 pending_callbacks_ = SerialRunner::Run(bound_fns, done_cb); |
720 } | 720 } |
721 | 721 |
722 void PipelineImpl::RendererWrapper::DoStop(const base::Closure& done_cb) { | 722 void PipelineImpl::RendererWrapper::DoStop(const base::Closure& done_cb) { |
723 DVLOG(2) << __FUNCTION__; | 723 DVLOG(2) << __func__; |
724 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 724 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
725 DCHECK_EQ(state_, kStopping); | 725 DCHECK_EQ(state_, kStopping); |
726 DCHECK(!pending_callbacks_.get()); | 726 DCHECK(!pending_callbacks_.get()); |
727 | 727 |
728 DestroyRenderer(); | 728 DestroyRenderer(); |
729 text_renderer_.reset(); | 729 text_renderer_.reset(); |
730 | 730 |
731 if (demuxer_) { | 731 if (demuxer_) { |
732 demuxer_->Stop(); | 732 demuxer_->Stop(); |
733 demuxer_ = NULL; | 733 demuxer_ = NULL; |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
925 | 925 |
926 PipelineImpl::PipelineImpl( | 926 PipelineImpl::PipelineImpl( |
927 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, | 927 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, |
928 MediaLog* media_log) | 928 MediaLog* media_log) |
929 : media_task_runner_(media_task_runner), | 929 : media_task_runner_(media_task_runner), |
930 media_log_(media_log), | 930 media_log_(media_log), |
931 client_(nullptr), | 931 client_(nullptr), |
932 playback_rate_(kDefaultPlaybackRate), | 932 playback_rate_(kDefaultPlaybackRate), |
933 volume_(kDefaultVolume), | 933 volume_(kDefaultVolume), |
934 weak_factory_(this) { | 934 weak_factory_(this) { |
935 DVLOG(2) << __FUNCTION__; | 935 DVLOG(2) << __func__; |
936 renderer_wrapper_.reset(new RendererWrapper(media_task_runner_, media_log_)); | 936 renderer_wrapper_.reset(new RendererWrapper(media_task_runner_, media_log_)); |
937 } | 937 } |
938 | 938 |
939 PipelineImpl::~PipelineImpl() { | 939 PipelineImpl::~PipelineImpl() { |
940 DVLOG(2) << __FUNCTION__; | 940 DVLOG(2) << __func__; |
941 DCHECK(thread_checker_.CalledOnValidThread()); | 941 DCHECK(thread_checker_.CalledOnValidThread()); |
942 DCHECK(!client_) << "Stop() must complete before destroying object"; | 942 DCHECK(!client_) << "Stop() must complete before destroying object"; |
943 DCHECK(seek_cb_.is_null()); | 943 DCHECK(seek_cb_.is_null()); |
944 DCHECK(suspend_cb_.is_null()); | 944 DCHECK(suspend_cb_.is_null()); |
945 DCHECK(!weak_factory_.HasWeakPtrs()); | 945 DCHECK(!weak_factory_.HasWeakPtrs()); |
946 | 946 |
947 // RendererWrapper is deleted on the media thread. | 947 // RendererWrapper is deleted on the media thread. |
948 media_task_runner_->DeleteSoon(FROM_HERE, renderer_wrapper_.release()); | 948 media_task_runner_->DeleteSoon(FROM_HERE, renderer_wrapper_.release()); |
949 } | 949 } |
950 | 950 |
951 void PipelineImpl::Start(Demuxer* demuxer, | 951 void PipelineImpl::Start(Demuxer* demuxer, |
952 std::unique_ptr<Renderer> renderer, | 952 std::unique_ptr<Renderer> renderer, |
953 Client* client, | 953 Client* client, |
954 const PipelineStatusCB& seek_cb) { | 954 const PipelineStatusCB& seek_cb) { |
955 DVLOG(2) << __FUNCTION__; | 955 DVLOG(2) << __func__; |
956 DCHECK(thread_checker_.CalledOnValidThread()); | 956 DCHECK(thread_checker_.CalledOnValidThread()); |
957 DCHECK(demuxer); | 957 DCHECK(demuxer); |
958 DCHECK(renderer); | 958 DCHECK(renderer); |
959 DCHECK(client); | 959 DCHECK(client); |
960 DCHECK(!seek_cb.is_null()); | 960 DCHECK(!seek_cb.is_null()); |
961 | 961 |
962 DCHECK(!client_); | 962 DCHECK(!client_); |
963 DCHECK(seek_cb_.is_null()); | 963 DCHECK(seek_cb_.is_null()); |
964 client_ = client; | 964 client_ = client; |
965 seek_cb_ = seek_cb; | 965 seek_cb_ = seek_cb; |
966 | 966 |
967 std::unique_ptr<TextRenderer> text_renderer; | 967 std::unique_ptr<TextRenderer> text_renderer; |
968 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 968 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
969 switches::kEnableInbandTextTracks)) { | 969 switches::kEnableInbandTextTracks)) { |
970 text_renderer.reset(new TextRenderer( | 970 text_renderer.reset(new TextRenderer( |
971 media_task_runner_, | 971 media_task_runner_, |
972 BindToCurrentLoop(base::Bind(&PipelineImpl::OnAddTextTrack, | 972 BindToCurrentLoop(base::Bind(&PipelineImpl::OnAddTextTrack, |
973 weak_factory_.GetWeakPtr())))); | 973 weak_factory_.GetWeakPtr())))); |
974 } | 974 } |
975 | 975 |
976 media_task_runner_->PostTask( | 976 media_task_runner_->PostTask( |
977 FROM_HERE, | 977 FROM_HERE, |
978 base::Bind(&RendererWrapper::Start, | 978 base::Bind(&RendererWrapper::Start, |
979 base::Unretained(renderer_wrapper_.get()), demuxer, | 979 base::Unretained(renderer_wrapper_.get()), demuxer, |
980 base::Passed(&renderer), base::Passed(&text_renderer), | 980 base::Passed(&renderer), base::Passed(&text_renderer), |
981 weak_factory_.GetWeakPtr())); | 981 weak_factory_.GetWeakPtr())); |
982 } | 982 } |
983 | 983 |
984 void PipelineImpl::Stop() { | 984 void PipelineImpl::Stop() { |
985 DVLOG(2) << __FUNCTION__; | 985 DVLOG(2) << __func__; |
986 DCHECK(thread_checker_.CalledOnValidThread()); | 986 DCHECK(thread_checker_.CalledOnValidThread()); |
987 | 987 |
988 if (!IsRunning()) { | 988 if (!IsRunning()) { |
989 DVLOG(2) << "Media pipeline isn't running. Ignoring Stop()"; | 989 DVLOG(2) << "Media pipeline isn't running. Ignoring Stop()"; |
990 return; | 990 return; |
991 } | 991 } |
992 | 992 |
993 if (media_task_runner_->BelongsToCurrentThread()) { | 993 if (media_task_runner_->BelongsToCurrentThread()) { |
994 // This path is executed by unittests that share media and main threads. | 994 // This path is executed by unittests that share media and main threads. |
995 base::Closure stop_cb = base::Bind(&base::DoNothing); | 995 base::Closure stop_cb = base::Bind(&base::DoNothing); |
(...skipping 30 matching lines...) Expand all Loading... |
1026 seek_cb_.Reset(); | 1026 seek_cb_.Reset(); |
1027 suspend_cb_.Reset(); | 1027 suspend_cb_.Reset(); |
1028 client_ = nullptr; | 1028 client_ = nullptr; |
1029 | 1029 |
1030 // Invalidate self weak pointers effectively canceling all pending | 1030 // Invalidate self weak pointers effectively canceling all pending |
1031 // notifications in the message queue. | 1031 // notifications in the message queue. |
1032 weak_factory_.InvalidateWeakPtrs(); | 1032 weak_factory_.InvalidateWeakPtrs(); |
1033 } | 1033 } |
1034 | 1034 |
1035 void PipelineImpl::Seek(base::TimeDelta time, const PipelineStatusCB& seek_cb) { | 1035 void PipelineImpl::Seek(base::TimeDelta time, const PipelineStatusCB& seek_cb) { |
1036 DVLOG(2) << __FUNCTION__ << " to " << time.InMicroseconds(); | 1036 DVLOG(2) << __func__ << " to " << time.InMicroseconds(); |
1037 DCHECK(thread_checker_.CalledOnValidThread()); | 1037 DCHECK(thread_checker_.CalledOnValidThread()); |
1038 DCHECK(!seek_cb.is_null()); | 1038 DCHECK(!seek_cb.is_null()); |
1039 | 1039 |
1040 if (!IsRunning()) { | 1040 if (!IsRunning()) { |
1041 DLOG(ERROR) << "Media pipeline isn't running. Ignoring Seek()."; | 1041 DLOG(ERROR) << "Media pipeline isn't running. Ignoring Seek()."; |
1042 return; | 1042 return; |
1043 } | 1043 } |
1044 | 1044 |
1045 DCHECK(seek_cb_.is_null()); | 1045 DCHECK(seek_cb_.is_null()); |
1046 seek_cb_ = seek_cb; | 1046 seek_cb_ = seek_cb; |
1047 media_task_runner_->PostTask( | 1047 media_task_runner_->PostTask( |
1048 FROM_HERE, base::Bind(&RendererWrapper::Seek, | 1048 FROM_HERE, base::Bind(&RendererWrapper::Seek, |
1049 base::Unretained(renderer_wrapper_.get()), time)); | 1049 base::Unretained(renderer_wrapper_.get()), time)); |
1050 } | 1050 } |
1051 | 1051 |
1052 void PipelineImpl::Suspend(const PipelineStatusCB& suspend_cb) { | 1052 void PipelineImpl::Suspend(const PipelineStatusCB& suspend_cb) { |
1053 DVLOG(2) << __FUNCTION__; | 1053 DVLOG(2) << __func__; |
1054 DCHECK(!suspend_cb.is_null()); | 1054 DCHECK(!suspend_cb.is_null()); |
1055 | 1055 |
1056 DCHECK(IsRunning()); | 1056 DCHECK(IsRunning()); |
1057 DCHECK(suspend_cb_.is_null()); | 1057 DCHECK(suspend_cb_.is_null()); |
1058 suspend_cb_ = suspend_cb; | 1058 suspend_cb_ = suspend_cb; |
1059 | 1059 |
1060 media_task_runner_->PostTask( | 1060 media_task_runner_->PostTask( |
1061 FROM_HERE, base::Bind(&RendererWrapper::Suspend, | 1061 FROM_HERE, base::Bind(&RendererWrapper::Suspend, |
1062 base::Unretained(renderer_wrapper_.get()))); | 1062 base::Unretained(renderer_wrapper_.get()))); |
1063 } | 1063 } |
1064 | 1064 |
1065 void PipelineImpl::Resume(std::unique_ptr<Renderer> renderer, | 1065 void PipelineImpl::Resume(std::unique_ptr<Renderer> renderer, |
1066 base::TimeDelta time, | 1066 base::TimeDelta time, |
1067 const PipelineStatusCB& seek_cb) { | 1067 const PipelineStatusCB& seek_cb) { |
1068 DVLOG(2) << __FUNCTION__; | 1068 DVLOG(2) << __func__; |
1069 DCHECK(thread_checker_.CalledOnValidThread()); | 1069 DCHECK(thread_checker_.CalledOnValidThread()); |
1070 DCHECK(renderer); | 1070 DCHECK(renderer); |
1071 DCHECK(!seek_cb.is_null()); | 1071 DCHECK(!seek_cb.is_null()); |
1072 | 1072 |
1073 DCHECK(IsRunning()); | 1073 DCHECK(IsRunning()); |
1074 DCHECK(seek_cb_.is_null()); | 1074 DCHECK(seek_cb_.is_null()); |
1075 seek_cb_ = seek_cb; | 1075 seek_cb_ = seek_cb; |
1076 | 1076 |
1077 media_task_runner_->PostTask( | 1077 media_task_runner_->PostTask( |
1078 FROM_HERE, base::Bind(&RendererWrapper::Resume, | 1078 FROM_HERE, base::Bind(&RendererWrapper::Resume, |
1079 base::Unretained(renderer_wrapper_.get()), | 1079 base::Unretained(renderer_wrapper_.get()), |
1080 base::Passed(&renderer), time)); | 1080 base::Passed(&renderer), time)); |
1081 } | 1081 } |
1082 | 1082 |
1083 bool PipelineImpl::IsRunning() const { | 1083 bool PipelineImpl::IsRunning() const { |
1084 DCHECK(thread_checker_.CalledOnValidThread()); | 1084 DCHECK(thread_checker_.CalledOnValidThread()); |
1085 return !!client_; | 1085 return !!client_; |
1086 } | 1086 } |
1087 | 1087 |
1088 double PipelineImpl::GetPlaybackRate() const { | 1088 double PipelineImpl::GetPlaybackRate() const { |
1089 DCHECK(thread_checker_.CalledOnValidThread()); | 1089 DCHECK(thread_checker_.CalledOnValidThread()); |
1090 return playback_rate_; | 1090 return playback_rate_; |
1091 } | 1091 } |
1092 | 1092 |
1093 void PipelineImpl::SetPlaybackRate(double playback_rate) { | 1093 void PipelineImpl::SetPlaybackRate(double playback_rate) { |
1094 DVLOG(2) << __FUNCTION__ << "(" << playback_rate << ")"; | 1094 DVLOG(2) << __func__ << "(" << playback_rate << ")"; |
1095 DCHECK(thread_checker_.CalledOnValidThread()); | 1095 DCHECK(thread_checker_.CalledOnValidThread()); |
1096 | 1096 |
1097 if (playback_rate < 0.0) | 1097 if (playback_rate < 0.0) |
1098 return; | 1098 return; |
1099 | 1099 |
1100 playback_rate_ = playback_rate; | 1100 playback_rate_ = playback_rate; |
1101 media_task_runner_->PostTask( | 1101 media_task_runner_->PostTask( |
1102 FROM_HERE, | 1102 FROM_HERE, |
1103 base::Bind(&RendererWrapper::SetPlaybackRate, | 1103 base::Bind(&RendererWrapper::SetPlaybackRate, |
1104 base::Unretained(renderer_wrapper_.get()), playback_rate_)); | 1104 base::Unretained(renderer_wrapper_.get()), playback_rate_)); |
1105 } | 1105 } |
1106 | 1106 |
1107 float PipelineImpl::GetVolume() const { | 1107 float PipelineImpl::GetVolume() const { |
1108 DCHECK(thread_checker_.CalledOnValidThread()); | 1108 DCHECK(thread_checker_.CalledOnValidThread()); |
1109 return volume_; | 1109 return volume_; |
1110 } | 1110 } |
1111 | 1111 |
1112 void PipelineImpl::SetVolume(float volume) { | 1112 void PipelineImpl::SetVolume(float volume) { |
1113 DVLOG(2) << __FUNCTION__ << "(" << volume << ")"; | 1113 DVLOG(2) << __func__ << "(" << volume << ")"; |
1114 DCHECK(thread_checker_.CalledOnValidThread()); | 1114 DCHECK(thread_checker_.CalledOnValidThread()); |
1115 | 1115 |
1116 if (volume < 0.0f || volume > 1.0f) | 1116 if (volume < 0.0f || volume > 1.0f) |
1117 return; | 1117 return; |
1118 | 1118 |
1119 volume_ = volume; | 1119 volume_ = volume; |
1120 media_task_runner_->PostTask( | 1120 media_task_runner_->PostTask( |
1121 FROM_HERE, | 1121 FROM_HERE, |
1122 base::Bind(&RendererWrapper::SetVolume, | 1122 base::Bind(&RendererWrapper::SetVolume, |
1123 base::Unretained(renderer_wrapper_.get()), volume_)); | 1123 base::Unretained(renderer_wrapper_.get()), volume_)); |
(...skipping 19 matching lines...) Expand all Loading... |
1143 return renderer_wrapper_->DidLoadingProgress(); | 1143 return renderer_wrapper_->DidLoadingProgress(); |
1144 } | 1144 } |
1145 | 1145 |
1146 PipelineStatistics PipelineImpl::GetStatistics() const { | 1146 PipelineStatistics PipelineImpl::GetStatistics() const { |
1147 DCHECK(thread_checker_.CalledOnValidThread()); | 1147 DCHECK(thread_checker_.CalledOnValidThread()); |
1148 return renderer_wrapper_->GetStatistics(); | 1148 return renderer_wrapper_->GetStatistics(); |
1149 } | 1149 } |
1150 | 1150 |
1151 void PipelineImpl::SetCdm(CdmContext* cdm_context, | 1151 void PipelineImpl::SetCdm(CdmContext* cdm_context, |
1152 const CdmAttachedCB& cdm_attached_cb) { | 1152 const CdmAttachedCB& cdm_attached_cb) { |
1153 DVLOG(2) << __FUNCTION__; | 1153 DVLOG(2) << __func__; |
1154 DCHECK(thread_checker_.CalledOnValidThread()); | 1154 DCHECK(thread_checker_.CalledOnValidThread()); |
1155 DCHECK(cdm_context); | 1155 DCHECK(cdm_context); |
1156 DCHECK(!cdm_attached_cb.is_null()); | 1156 DCHECK(!cdm_attached_cb.is_null()); |
1157 | 1157 |
1158 media_task_runner_->PostTask( | 1158 media_task_runner_->PostTask( |
1159 FROM_HERE, | 1159 FROM_HERE, |
1160 base::Bind(&RendererWrapper::SetCdm, | 1160 base::Bind(&RendererWrapper::SetCdm, |
1161 base::Unretained(renderer_wrapper_.get()), cdm_context, | 1161 base::Unretained(renderer_wrapper_.get()), cdm_context, |
1162 media::BindToCurrentLoop(cdm_attached_cb))); | 1162 media::BindToCurrentLoop(cdm_attached_cb))); |
1163 } | 1163 } |
(...skipping 16 matching lines...) Expand all Loading... |
1180 RETURN_STRING(kSuspended); | 1180 RETURN_STRING(kSuspended); |
1181 RETURN_STRING(kResuming); | 1181 RETURN_STRING(kResuming); |
1182 } | 1182 } |
1183 NOTREACHED(); | 1183 NOTREACHED(); |
1184 return "INVALID"; | 1184 return "INVALID"; |
1185 } | 1185 } |
1186 | 1186 |
1187 #undef RETURN_STRING | 1187 #undef RETURN_STRING |
1188 | 1188 |
1189 void PipelineImpl::OnError(PipelineStatus error) { | 1189 void PipelineImpl::OnError(PipelineStatus error) { |
1190 DVLOG(2) << __FUNCTION__; | 1190 DVLOG(2) << __func__; |
1191 DCHECK(thread_checker_.CalledOnValidThread()); | 1191 DCHECK(thread_checker_.CalledOnValidThread()); |
1192 DCHECK_NE(PIPELINE_OK, error) << "PIPELINE_OK isn't an error!"; | 1192 DCHECK_NE(PIPELINE_OK, error) << "PIPELINE_OK isn't an error!"; |
1193 DCHECK(IsRunning()); | 1193 DCHECK(IsRunning()); |
1194 | 1194 |
1195 // If the error happens during starting/seeking/suspending/resuming, | 1195 // If the error happens during starting/seeking/suspending/resuming, |
1196 // report the error via the completion callback for those tasks. | 1196 // report the error via the completion callback for those tasks. |
1197 // Else report error via the client interface. | 1197 // Else report error via the client interface. |
1198 if (!seek_cb_.is_null()) { | 1198 if (!seek_cb_.is_null()) { |
1199 base::ResetAndReturn(&seek_cb_).Run(error); | 1199 base::ResetAndReturn(&seek_cb_).Run(error); |
1200 } else if (!suspend_cb_.is_null()) { | 1200 } else if (!suspend_cb_.is_null()) { |
1201 base::ResetAndReturn(&suspend_cb_).Run(error); | 1201 base::ResetAndReturn(&suspend_cb_).Run(error); |
1202 } else { | 1202 } else { |
1203 DCHECK(client_); | 1203 DCHECK(client_); |
1204 client_->OnError(error); | 1204 client_->OnError(error); |
1205 } | 1205 } |
1206 | 1206 |
1207 // Any kind of error stops the pipeline. | 1207 // Any kind of error stops the pipeline. |
1208 Stop(); | 1208 Stop(); |
1209 } | 1209 } |
1210 | 1210 |
1211 void PipelineImpl::OnEnded() { | 1211 void PipelineImpl::OnEnded() { |
1212 DVLOG(2) << __FUNCTION__; | 1212 DVLOG(2) << __func__; |
1213 DCHECK(thread_checker_.CalledOnValidThread()); | 1213 DCHECK(thread_checker_.CalledOnValidThread()); |
1214 DCHECK(IsRunning()); | 1214 DCHECK(IsRunning()); |
1215 | 1215 |
1216 DCHECK(client_); | 1216 DCHECK(client_); |
1217 client_->OnEnded(); | 1217 client_->OnEnded(); |
1218 } | 1218 } |
1219 | 1219 |
1220 void PipelineImpl::OnMetadata(PipelineMetadata metadata) { | 1220 void PipelineImpl::OnMetadata(PipelineMetadata metadata) { |
1221 DVLOG(2) << __FUNCTION__; | 1221 DVLOG(2) << __func__; |
1222 DCHECK(thread_checker_.CalledOnValidThread()); | 1222 DCHECK(thread_checker_.CalledOnValidThread()); |
1223 DCHECK(IsRunning()); | 1223 DCHECK(IsRunning()); |
1224 | 1224 |
1225 DCHECK(client_); | 1225 DCHECK(client_); |
1226 client_->OnMetadata(metadata); | 1226 client_->OnMetadata(metadata); |
1227 } | 1227 } |
1228 | 1228 |
1229 void PipelineImpl::OnBufferingStateChange(BufferingState state) { | 1229 void PipelineImpl::OnBufferingStateChange(BufferingState state) { |
1230 DVLOG(2) << __FUNCTION__ << "(" << state << ")"; | 1230 DVLOG(2) << __func__ << "(" << state << ")"; |
1231 DCHECK(thread_checker_.CalledOnValidThread()); | 1231 DCHECK(thread_checker_.CalledOnValidThread()); |
1232 DCHECK(IsRunning()); | 1232 DCHECK(IsRunning()); |
1233 | 1233 |
1234 DCHECK(client_); | 1234 DCHECK(client_); |
1235 client_->OnBufferingStateChange(state); | 1235 client_->OnBufferingStateChange(state); |
1236 } | 1236 } |
1237 | 1237 |
1238 void PipelineImpl::OnDurationChange(base::TimeDelta duration) { | 1238 void PipelineImpl::OnDurationChange(base::TimeDelta duration) { |
1239 DVLOG(2) << __FUNCTION__; | 1239 DVLOG(2) << __func__; |
1240 DCHECK(thread_checker_.CalledOnValidThread()); | 1240 DCHECK(thread_checker_.CalledOnValidThread()); |
1241 DCHECK(IsRunning()); | 1241 DCHECK(IsRunning()); |
1242 | 1242 |
1243 duration_ = duration; | 1243 duration_ = duration; |
1244 | 1244 |
1245 DCHECK(client_); | 1245 DCHECK(client_); |
1246 client_->OnDurationChange(); | 1246 client_->OnDurationChange(); |
1247 } | 1247 } |
1248 | 1248 |
1249 void PipelineImpl::OnAddTextTrack(const TextTrackConfig& config, | 1249 void PipelineImpl::OnAddTextTrack(const TextTrackConfig& config, |
1250 const AddTextTrackDoneCB& done_cb) { | 1250 const AddTextTrackDoneCB& done_cb) { |
1251 DVLOG(2) << __FUNCTION__; | 1251 DVLOG(2) << __func__; |
1252 DCHECK(thread_checker_.CalledOnValidThread()); | 1252 DCHECK(thread_checker_.CalledOnValidThread()); |
1253 DCHECK(IsRunning()); | 1253 DCHECK(IsRunning()); |
1254 | 1254 |
1255 DCHECK(client_); | 1255 DCHECK(client_); |
1256 client_->OnAddTextTrack(config, done_cb); | 1256 client_->OnAddTextTrack(config, done_cb); |
1257 } | 1257 } |
1258 | 1258 |
1259 void PipelineImpl::OnWaitingForDecryptionKey() { | 1259 void PipelineImpl::OnWaitingForDecryptionKey() { |
1260 DVLOG(2) << __FUNCTION__; | 1260 DVLOG(2) << __func__; |
1261 DCHECK(thread_checker_.CalledOnValidThread()); | 1261 DCHECK(thread_checker_.CalledOnValidThread()); |
1262 DCHECK(IsRunning()); | 1262 DCHECK(IsRunning()); |
1263 | 1263 |
1264 DCHECK(client_); | 1264 DCHECK(client_); |
1265 client_->OnWaitingForDecryptionKey(); | 1265 client_->OnWaitingForDecryptionKey(); |
1266 } | 1266 } |
1267 | 1267 |
1268 void PipelineImpl::OnVideoNaturalSizeChange(const gfx::Size& size) { | 1268 void PipelineImpl::OnVideoNaturalSizeChange(const gfx::Size& size) { |
1269 DVLOG(2) << __FUNCTION__; | 1269 DVLOG(2) << __func__; |
1270 DCHECK(thread_checker_.CalledOnValidThread()); | 1270 DCHECK(thread_checker_.CalledOnValidThread()); |
1271 DCHECK(IsRunning()); | 1271 DCHECK(IsRunning()); |
1272 | 1272 |
1273 DCHECK(client_); | 1273 DCHECK(client_); |
1274 client_->OnVideoNaturalSizeChange(size); | 1274 client_->OnVideoNaturalSizeChange(size); |
1275 } | 1275 } |
1276 | 1276 |
1277 void PipelineImpl::OnVideoOpacityChange(bool opaque) { | 1277 void PipelineImpl::OnVideoOpacityChange(bool opaque) { |
1278 DVLOG(2) << __FUNCTION__; | 1278 DVLOG(2) << __func__; |
1279 DCHECK(thread_checker_.CalledOnValidThread()); | 1279 DCHECK(thread_checker_.CalledOnValidThread()); |
1280 DCHECK(IsRunning()); | 1280 DCHECK(IsRunning()); |
1281 | 1281 |
1282 DCHECK(client_); | 1282 DCHECK(client_); |
1283 client_->OnVideoOpacityChange(opaque); | 1283 client_->OnVideoOpacityChange(opaque); |
1284 } | 1284 } |
1285 | 1285 |
1286 void PipelineImpl::OnSeekDone(base::TimeDelta start_time) { | 1286 void PipelineImpl::OnSeekDone(base::TimeDelta start_time) { |
1287 DVLOG(3) << __FUNCTION__ << "(" << start_time.InMicroseconds() << ")"; | 1287 DVLOG(3) << __func__ << "(" << start_time.InMicroseconds() << ")"; |
1288 DCHECK(thread_checker_.CalledOnValidThread()); | 1288 DCHECK(thread_checker_.CalledOnValidThread()); |
1289 DCHECK(IsRunning()); | 1289 DCHECK(IsRunning()); |
1290 | 1290 |
1291 DCHECK(!seek_cb_.is_null()); | 1291 DCHECK(!seek_cb_.is_null()); |
1292 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK); | 1292 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK); |
1293 } | 1293 } |
1294 | 1294 |
1295 void PipelineImpl::OnSuspendDone(base::TimeDelta suspend_time) { | 1295 void PipelineImpl::OnSuspendDone(base::TimeDelta suspend_time) { |
1296 DVLOG(3) << __FUNCTION__ << "(" << suspend_time.InMicroseconds() << ")"; | 1296 DVLOG(3) << __func__ << "(" << suspend_time.InMicroseconds() << ")"; |
1297 DCHECK(thread_checker_.CalledOnValidThread()); | 1297 DCHECK(thread_checker_.CalledOnValidThread()); |
1298 DCHECK(IsRunning()); | 1298 DCHECK(IsRunning()); |
1299 | 1299 |
1300 DCHECK(!suspend_cb_.is_null()); | 1300 DCHECK(!suspend_cb_.is_null()); |
1301 base::ResetAndReturn(&suspend_cb_).Run(PIPELINE_OK); | 1301 base::ResetAndReturn(&suspend_cb_).Run(PIPELINE_OK); |
1302 } | 1302 } |
1303 | 1303 |
1304 } // namespace media | 1304 } // namespace media |
OLD | NEW |