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

Side by Side Diff: media/blink/webmediaplayer_cast_android.cc

Issue 1570043002: Implement MediaSession on top of the WebMediaPlayerDelegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media_session
Patch Set: Address comments. Created 4 years, 11 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/blink/webmediaplayer_cast_android.h" 5 #include "media/blink/webmediaplayer_cast_android.h"
6 6
7 #include "gpu/GLES2/gl2extchromium.h" 7 #include "gpu/GLES2/gl2extchromium.h"
8 #include "gpu/blink/webgraphicscontext3d_impl.h" 8 #include "gpu/blink/webgraphicscontext3d_impl.h"
9 #include "gpu/command_buffer/client/gles2_interface.h" 9 #include "gpu/command_buffer/client/gles2_interface.h"
10 #include "gpu/command_buffer/common/sync_token.h" 10 #include "gpu/command_buffer/common/sync_token.h"
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 texture_target), 150 texture_target),
151 media::BindToCurrentLoop(base::Bind(&OnReleaseTexture, context_3d_cb, 151 media::BindToCurrentLoop(base::Bind(&OnReleaseTexture, context_3d_cb,
152 remote_playback_texture_id)), 152 remote_playback_texture_id)),
153 canvas_size /* coded_size */, gfx::Rect(canvas_size) /* visible_rect */, 153 canvas_size /* coded_size */, gfx::Rect(canvas_size) /* visible_rect */,
154 natural_size /* natural_size */, base::TimeDelta() /* timestamp */); 154 natural_size /* natural_size */, base::TimeDelta() /* timestamp */);
155 } 155 }
156 156
157 WebMediaPlayerCast::WebMediaPlayerCast( 157 WebMediaPlayerCast::WebMediaPlayerCast(
158 WebMediaPlayerImpl* impl, 158 WebMediaPlayerImpl* impl,
159 blink::WebMediaPlayerClient* client, 159 blink::WebMediaPlayerClient* client,
160 const WebMediaPlayerParams::Context3DCB& context_3d_cb, 160 const WebMediaPlayerParams::Context3DCB& context_3d_cb)
161 base::WeakPtr<WebMediaPlayerDelegate> delegate) 161 : webmediaplayer_(impl), client_(client), context_3d_cb_(context_3d_cb) {}
162 : webmediaplayer_(impl),
163 client_(client),
164 context_3d_cb_(context_3d_cb),
165 delegate_(delegate) {}
166 162
167 WebMediaPlayerCast::~WebMediaPlayerCast() { 163 WebMediaPlayerCast::~WebMediaPlayerCast() {
168 if (player_manager_) { 164 if (player_manager_) {
169 if (is_player_initialized_) 165 if (is_player_initialized_)
170 player_manager_->DestroyPlayer(player_id_); 166 player_manager_->DestroyPlayer(player_id_);
171 167
172 player_manager_->UnregisterMediaPlayer(player_id_); 168 player_manager_->UnregisterMediaPlayer(player_id_);
173 } 169 }
174 } 170 }
175 171
176 void WebMediaPlayerCast::Initialize(const GURL& url, 172 void WebMediaPlayerCast::Initialize(const GURL& url,
177 blink::WebLocalFrame* frame) { 173 blink::WebLocalFrame* frame,
174 int delegate_id) {
178 player_manager_->Initialize(MEDIA_PLAYER_TYPE_REMOTE_ONLY, player_id_, url, 175 player_manager_->Initialize(MEDIA_PLAYER_TYPE_REMOTE_ONLY, player_id_, url,
179 frame->document().firstPartyForCookies(), 0, 176 frame->document().firstPartyForCookies(), 0,
180 frame->document().url(), true); 177 frame->document().url(), true, delegate_id);
181 is_player_initialized_ = true; 178 is_player_initialized_ = true;
182 } 179 }
183 180
184 void WebMediaPlayerCast::SetMediaPlayerManager( 181 void WebMediaPlayerCast::SetMediaPlayerManager(
185 RendererMediaPlayerManagerInterface* media_player_manager) { 182 RendererMediaPlayerManagerInterface* media_player_manager) {
186 player_manager_ = media_player_manager; 183 player_manager_ = media_player_manager;
187 player_id_ = player_manager_->RegisterMediaPlayer(this); 184 player_id_ = player_manager_->RegisterMediaPlayer(this);
188 } 185 }
189 186
190 void WebMediaPlayerCast::requestRemotePlayback() { 187 void WebMediaPlayerCast::requestRemotePlayback() {
191 player_manager_->Seek(player_id_, base::TimeDelta::FromSecondsD( 188 player_manager_->Seek(player_id_, base::TimeDelta::FromSecondsD(
192 webmediaplayer_->currentTime())); 189 webmediaplayer_->currentTime()));
193 player_manager_->RequestRemotePlayback(player_id_); 190 player_manager_->RequestRemotePlayback(player_id_);
194 } 191 }
195 192
196 void WebMediaPlayerCast::requestRemotePlaybackControl() { 193 void WebMediaPlayerCast::requestRemotePlaybackControl() {
197 player_manager_->RequestRemotePlaybackControl(player_id_); 194 player_manager_->RequestRemotePlaybackControl(player_id_);
198 } 195 }
199 196
200 void WebMediaPlayerCast::OnMediaMetadataChanged(base::TimeDelta duration, 197 void WebMediaPlayerCast::OnMediaMetadataChanged(base::TimeDelta duration,
201 int width, 198 int width,
202 int height, 199 int height,
203 bool success) {} 200 bool success) {
201 duration_ = duration;
202 }
204 203
205 void WebMediaPlayerCast::OnPlaybackComplete() { 204 void WebMediaPlayerCast::OnPlaybackComplete() {
206 DVLOG(1) << __FUNCTION__; 205 DVLOG(1) << __FUNCTION__;
207 webmediaplayer_->OnRemotePlaybackEnded(); 206 webmediaplayer_->OnRemotePlaybackEnded();
208 } 207 }
209 208
210 void WebMediaPlayerCast::OnBufferingUpdate(int percentage) { 209 void WebMediaPlayerCast::OnBufferingUpdate(int percentage) {
211 DVLOG(1) << __FUNCTION__; 210 DVLOG(1) << __FUNCTION__;
212 } 211 }
213 212
(...skipping 28 matching lines...) Expand all
242 DVLOG(1) << __FUNCTION__; 241 DVLOG(1) << __FUNCTION__;
243 } 242 }
244 243
245 void WebMediaPlayerCast::OnConnectedToRemoteDevice( 244 void WebMediaPlayerCast::OnConnectedToRemoteDevice(
246 const std::string& remote_playback_message) { 245 const std::string& remote_playback_message) {
247 DVLOG(1) << __FUNCTION__; 246 DVLOG(1) << __FUNCTION__;
248 remote_time_ = base::TimeDelta::FromSecondsD(webmediaplayer_->currentTime()); 247 remote_time_ = base::TimeDelta::FromSecondsD(webmediaplayer_->currentTime());
249 is_remote_ = true; 248 is_remote_ = true;
250 initializing_ = true; 249 initializing_ = true;
251 paused_ = false; 250 paused_ = false;
252 if (delegate_)
253 delegate_->DidPlay(webmediaplayer_);
254 client_->playbackStateChanged(); 251 client_->playbackStateChanged();
255 252
256 remote_playback_message_ = remote_playback_message; 253 remote_playback_message_ = remote_playback_message;
257 webmediaplayer_->SuspendForRemote(); 254 webmediaplayer_->SuspendForRemote();
258 client_->connectedToRemoteDevice(); 255 client_->connectedToRemoteDevice();
259 } 256 }
260 257
261 double WebMediaPlayerCast::currentTime() const { 258 double WebMediaPlayerCast::currentTime() const {
262 base::TimeDelta ret = remote_time_; 259 base::TimeDelta ret = remote_time_;
263 if (!paused_ && !initializing_) { 260 if (!paused_ && !initializing_) {
264 ret += base::TimeTicks::Now() - remote_time_at_; 261 ret += base::TimeTicks::Now() - remote_time_at_;
265 } 262 }
266 return ret.InSecondsF(); 263 return ret.InSecondsF();
267 } 264 }
268 265
269 void WebMediaPlayerCast::play() { 266 void WebMediaPlayerCast::play() {
270 if (!paused_) 267 if (!paused_)
271 return; 268 return;
272 269
273 player_manager_->Start(player_id_); 270 player_manager_->Start(player_id_);
274 remote_time_at_ = base::TimeTicks::Now(); 271 remote_time_at_ = base::TimeTicks::Now();
275 paused_ = false; 272 paused_ = false;
276 if (delegate_)
277 delegate_->DidPlay(webmediaplayer_);
278 } 273 }
279 274
280 void WebMediaPlayerCast::pause() { 275 void WebMediaPlayerCast::pause() {
281 player_manager_->Pause(player_id_, true); 276 player_manager_->Pause(player_id_, true);
282 } 277 }
283 278
284 void WebMediaPlayerCast::seek(base::TimeDelta t) { 279 void WebMediaPlayerCast::seek(base::TimeDelta t) {
285 should_notify_time_changed_ = true; 280 should_notify_time_changed_ = true;
286 player_manager_->Seek(player_id_, t); 281 player_manager_->Seek(player_id_, t);
287 } 282 }
288 283
289 void WebMediaPlayerCast::OnDisconnectedFromRemoteDevice() { 284 void WebMediaPlayerCast::OnDisconnectedFromRemoteDevice() {
290 DVLOG(1) << __FUNCTION__; 285 DVLOG(1) << __FUNCTION__;
291 if (!paused_) { 286 if (!paused_) {
292 paused_ = true; 287 paused_ = true;
293 if (delegate_)
294 delegate_->DidPause(webmediaplayer_);
295 } 288 }
296 is_remote_ = false; 289 is_remote_ = false;
297 double t = currentTime(); 290 double t = currentTime();
298 if (t + media::kTimeUpdateInterval * 2 / 1000 > webmediaplayer_->duration()) { 291 if (t + media::kTimeUpdateInterval * 2 / 1000 > webmediaplayer_->duration()) {
299 t = webmediaplayer_->duration(); 292 t = webmediaplayer_->duration();
300 } 293 }
301 webmediaplayer_->OnDisconnectedFromRemoteDevice(t); 294 webmediaplayer_->OnDisconnectedFromRemoteDevice(t);
302 } 295 }
303 296
304 void WebMediaPlayerCast::OnDidExitFullscreen() { 297 void WebMediaPlayerCast::OnDidExitFullscreen() {
305 DVLOG(1) << __FUNCTION__; 298 DVLOG(1) << __FUNCTION__;
306 } 299 }
307 300
308 void WebMediaPlayerCast::OnMediaPlayerPlay() { 301 void WebMediaPlayerCast::OnMediaPlayerPlay() {
309 DVLOG(1) << __FUNCTION__ << " is_remote_ = " << is_remote_; 302 DVLOG(1) << __FUNCTION__ << " is_remote_ = " << is_remote_;
310 initializing_ = false; 303 initializing_ = false;
311 if (is_remote_ && paused_) { 304 if (is_remote_ && paused_) {
312 paused_ = false; 305 paused_ = false;
313 if (paused_)
314 delegate_->DidPlay(webmediaplayer_);
315 remote_time_at_ = base::TimeTicks::Now(); 306 remote_time_at_ = base::TimeTicks::Now();
316 client_->playbackStateChanged(); 307 client_->playbackStateChanged();
317 } 308 }
318 // Blink expects a timeChanged() in response to a seek(). 309 // Blink expects a timeChanged() in response to a seek().
319 if (should_notify_time_changed_) 310 if (should_notify_time_changed_)
320 client_->timeChanged(); 311 client_->timeChanged();
321 } 312 }
322 313
323 void WebMediaPlayerCast::OnMediaPlayerPause() { 314 void WebMediaPlayerCast::OnMediaPlayerPause() {
324 DVLOG(1) << __FUNCTION__ << " is_remote_ = " << is_remote_; 315 DVLOG(1) << __FUNCTION__ << " is_remote_ = " << is_remote_;
325 if (is_remote_ && !paused_) { 316 if (is_remote_ && !paused_) {
326 paused_ = true; 317 paused_ = true;
327 if (delegate_)
328 delegate_->DidPause(webmediaplayer_);
329 client_->playbackStateChanged(); 318 client_->playbackStateChanged();
330 } 319 }
331 } 320 }
332 321
333 void WebMediaPlayerCast::OnRemoteRouteAvailabilityChanged( 322 void WebMediaPlayerCast::OnRemoteRouteAvailabilityChanged(
334 bool routes_available) { 323 bool routes_available) {
335 DVLOG(1) << __FUNCTION__; 324 DVLOG(1) << __FUNCTION__;
336 client_->remoteRouteAvailabilityChanged(routes_available); 325 client_->remoteRouteAvailabilityChanged(routes_available);
337 } 326 }
338 327
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 368
380 if (!canvas_size.width()) 369 if (!canvas_size.width())
381 return nullptr; 370 return nullptr;
382 371
383 return MakeTextFrameForCast(remote_playback_message_, canvas_size, 372 return MakeTextFrameForCast(remote_playback_message_, canvas_size,
384 webmediaplayer_->naturalSize(), 373 webmediaplayer_->naturalSize(),
385 base::Bind(&GLCBShim, context_3d_cb_)); 374 base::Bind(&GLCBShim, context_3d_cb_));
386 } 375 }
387 376
388 } // namespace media 377 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698