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/mojo/services/mojo_renderer_service.h" | 5 #include "media/mojo/services/mojo_renderer_service.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "media/base/media_keys.h" | 10 #include "media/base/media_keys.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
96 if (!cdm_context) { | 96 if (!cdm_context) { |
97 DVLOG(1) << "CDM context not available: " << cdm_id; | 97 DVLOG(1) << "CDM context not available: " << cdm_id; |
98 callback.Run(false); | 98 callback.Run(false); |
99 return; | 99 return; |
100 } | 100 } |
101 | 101 |
102 renderer_->SetCdm(cdm_context, base::Bind(&MojoRendererService::OnCdmAttached, | 102 renderer_->SetCdm(cdm_context, base::Bind(&MojoRendererService::OnCdmAttached, |
103 weak_this_, cdm, callback)); | 103 weak_this_, cdm, callback)); |
104 } | 104 } |
105 | 105 |
106 void MojoRendererService::OnError(PipelineStatus error) { | |
107 DVLOG(1) << __FUNCTION__ << "(" << error << ")"; | |
108 state_ = STATE_ERROR; | |
109 client_->OnError(); | |
110 } | |
111 | |
112 void MojoRendererService::OnEnded() { | |
113 DVLOG(1) << __FUNCTION__; | |
114 CancelPeriodicMediaTimeUpdates(); | |
115 client_->OnEnded(); | |
116 } | |
117 | |
118 void MojoRendererService::OnStatisticsUpdate(const PipelineStatistics& stats) {} | |
119 | |
120 void MojoRendererService::OnBufferingStateChange(BufferingState state) { | |
121 DVLOG(2) << __FUNCTION__ << "(" << state << ")"; | |
122 client_->OnBufferingStateChange( | |
123 static_cast<interfaces::BufferingState>(state)); | |
124 } | |
125 | |
126 void MojoRendererService::OnWaitingForDecryptionKey() {} | |
xhwang
2016/05/09 18:13:22
This CL makes it super clear that we should plumb
alokp
2016/05/09 21:31:43
Done.
| |
127 | |
106 void MojoRendererService::OnStreamReady( | 128 void MojoRendererService::OnStreamReady( |
107 const mojo::Callback<void(bool)>& callback) { | 129 const mojo::Callback<void(bool)>& callback) { |
108 DCHECK_EQ(state_, STATE_INITIALIZING); | 130 DCHECK_EQ(state_, STATE_INITIALIZING); |
109 | 131 |
110 renderer_->Initialize( | 132 renderer_->Initialize( |
111 stream_provider_.get(), | 133 this, stream_provider_.get(), |
112 base::Bind( | 134 base::Bind(&MojoRendererService::OnRendererInitializeDone, weak_this_, |
113 &MojoRendererService::OnRendererInitializeDone, weak_this_, callback), | 135 callback)); |
114 base::Bind(&MojoRendererService::OnUpdateStatistics, weak_this_), | |
115 base::Bind(&MojoRendererService::OnBufferingStateChanged, weak_this_), | |
116 base::Bind(&MojoRendererService::OnRendererEnded, weak_this_), | |
117 base::Bind(&MojoRendererService::OnError, weak_this_), | |
118 base::Bind(base::DoNothing)); | |
119 } | 136 } |
120 | 137 |
121 void MojoRendererService::OnRendererInitializeDone( | 138 void MojoRendererService::OnRendererInitializeDone( |
122 const mojo::Callback<void(bool)>& callback, | 139 const mojo::Callback<void(bool)>& callback, |
123 PipelineStatus status) { | 140 PipelineStatus status) { |
124 DVLOG(1) << __FUNCTION__; | 141 DVLOG(1) << __FUNCTION__; |
125 DCHECK_EQ(state_, STATE_INITIALIZING); | 142 DCHECK_EQ(state_, STATE_INITIALIZING); |
126 | 143 |
127 if (status != PIPELINE_OK) { | 144 if (status != PIPELINE_OK) { |
128 state_ = STATE_ERROR; | 145 state_ = STATE_ERROR; |
129 callback.Run(false); | 146 callback.Run(false); |
130 return; | 147 return; |
131 } | 148 } |
132 | 149 |
133 state_ = STATE_PLAYING; | 150 state_ = STATE_PLAYING; |
134 callback.Run(true); | 151 callback.Run(true); |
135 } | 152 } |
136 | 153 |
137 void MojoRendererService::OnUpdateStatistics(const PipelineStatistics& stats) { | |
138 } | |
139 | |
140 void MojoRendererService::UpdateMediaTime(bool force) { | 154 void MojoRendererService::UpdateMediaTime(bool force) { |
141 const uint64_t media_time = renderer_->GetMediaTime().InMicroseconds(); | 155 const uint64_t media_time = renderer_->GetMediaTime().InMicroseconds(); |
142 if (!force && media_time == last_media_time_usec_) | 156 if (!force && media_time == last_media_time_usec_) |
143 return; | 157 return; |
144 | 158 |
145 client_->OnTimeUpdate(media_time, media_time); | 159 client_->OnTimeUpdate(media_time, media_time); |
146 last_media_time_usec_ = media_time; | 160 last_media_time_usec_ = media_time; |
147 } | 161 } |
148 | 162 |
149 void MojoRendererService::CancelPeriodicMediaTimeUpdates() { | 163 void MojoRendererService::CancelPeriodicMediaTimeUpdates() { |
150 DVLOG(2) << __FUNCTION__; | 164 DVLOG(2) << __FUNCTION__; |
151 UpdateMediaTime(false); | 165 UpdateMediaTime(false); |
152 time_update_timer_.Stop(); | 166 time_update_timer_.Stop(); |
153 } | 167 } |
154 | 168 |
155 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { | 169 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { |
156 DVLOG(2) << __FUNCTION__; | 170 DVLOG(2) << __FUNCTION__; |
157 UpdateMediaTime(true); | 171 UpdateMediaTime(true); |
158 time_update_timer_.Start( | 172 time_update_timer_.Start( |
159 FROM_HERE, | 173 FROM_HERE, |
160 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), | 174 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), |
161 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); | 175 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); |
162 } | 176 } |
163 | 177 |
164 void MojoRendererService::OnBufferingStateChanged( | |
165 BufferingState new_buffering_state) { | |
166 DVLOG(2) << __FUNCTION__ << "(" << new_buffering_state << ")"; | |
167 client_->OnBufferingStateChange( | |
168 static_cast<interfaces::BufferingState>(new_buffering_state)); | |
169 } | |
170 | |
171 void MojoRendererService::OnRendererEnded() { | |
172 DVLOG(1) << __FUNCTION__; | |
173 CancelPeriodicMediaTimeUpdates(); | |
174 client_->OnEnded(); | |
175 } | |
176 | |
177 void MojoRendererService::OnError(PipelineStatus error) { | |
178 DVLOG(1) << __FUNCTION__ << "(" << error << ")"; | |
179 state_ = STATE_ERROR; | |
180 client_->OnError(); | |
181 } | |
182 | |
183 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) { | 178 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) { |
184 DVLOG(1) << __FUNCTION__; | 179 DVLOG(1) << __FUNCTION__; |
185 DCHECK_EQ(state_, STATE_FLUSHING); | 180 DCHECK_EQ(state_, STATE_FLUSHING); |
186 state_ = STATE_PLAYING; | 181 state_ = STATE_PLAYING; |
187 callback.Run(); | 182 callback.Run(); |
188 } | 183 } |
189 | 184 |
190 void MojoRendererService::OnCdmAttached( | 185 void MojoRendererService::OnCdmAttached( |
191 scoped_refptr<MediaKeys> cdm, | 186 scoped_refptr<MediaKeys> cdm, |
192 const mojo::Callback<void(bool)>& callback, | 187 const mojo::Callback<void(bool)>& callback, |
193 bool success) { | 188 bool success) { |
194 DVLOG(1) << __FUNCTION__ << "(" << success << ")"; | 189 DVLOG(1) << __FUNCTION__ << "(" << success << ")"; |
195 | 190 |
196 if (success) | 191 if (success) |
197 cdm_ = cdm; | 192 cdm_ = cdm; |
198 | 193 |
199 callback.Run(success); | 194 callback.Run(success); |
200 } | 195 } |
201 | 196 |
202 } // namespace media | 197 } // namespace media |
OLD | NEW |