| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/renderer/media/webmediaplayer_ms.h" | 5 #include "content/renderer/media/webmediaplayer_ms.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 | 293 |
| 294 compositor_->StartRendering(); | 294 compositor_->StartRendering(); |
| 295 | 295 |
| 296 if (audio_renderer_) | 296 if (audio_renderer_) |
| 297 audio_renderer_->Play(); | 297 audio_renderer_->Play(); |
| 298 | 298 |
| 299 if (delegate_) { | 299 if (delegate_) { |
| 300 // TODO(perkj, magjed): We use OneShot focus type here so that it takes | 300 // TODO(perkj, magjed): We use OneShot focus type here so that it takes |
| 301 // audio focus once it starts, and then will not respond to further audio | 301 // audio focus once it starts, and then will not respond to further audio |
| 302 // focus changes. See http://crbug.com/596516 for more details. | 302 // focus changes. See http://crbug.com/596516 for more details. |
| 303 delegate_->DidPlay(delegate_id_, hasVideo(), hasAudio(), false, | 303 delegate_->DidPlay(delegate_id_, hasAudio(), hasVideo(), |
| 304 media::MediaContentType::OneShot); | 304 media::MediaContentType::OneShot); |
| 305 } | 305 } |
| 306 | 306 |
| 307 paused_ = false; | 307 paused_ = false; |
| 308 } | 308 } |
| 309 | 309 |
| 310 void WebMediaPlayerMS::pause() { | 310 void WebMediaPlayerMS::pause() { |
| 311 DVLOG(1) << __func__; | 311 DVLOG(1) << __func__; |
| 312 DCHECK(thread_checker_.CalledOnValidThread()); | 312 DCHECK(thread_checker_.CalledOnValidThread()); |
| 313 | 313 |
| 314 should_play_upon_shown_ = false; | 314 should_play_upon_shown_ = false; |
| 315 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); | 315 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); |
| 316 if (paused_) | 316 if (paused_) |
| 317 return; | 317 return; |
| 318 | 318 |
| 319 if (video_frame_provider_) | 319 if (video_frame_provider_) |
| 320 video_frame_provider_->Pause(); | 320 video_frame_provider_->Pause(); |
| 321 | 321 |
| 322 compositor_->StopRendering(); | 322 compositor_->StopRendering(); |
| 323 compositor_->ReplaceCurrentFrameWithACopy(); | 323 compositor_->ReplaceCurrentFrameWithACopy(); |
| 324 | 324 |
| 325 if (audio_renderer_) | 325 if (audio_renderer_) |
| 326 audio_renderer_->Pause(); | 326 audio_renderer_->Pause(); |
| 327 | 327 |
| 328 if (delegate_) | 328 if (delegate_) { |
| 329 delegate_->DidPause(delegate_id_, false); | 329 delegate_->DidPause(delegate_id_); |
| 330 delegate_->SetIdle(delegate_id_, true); |
| 331 } |
| 330 | 332 |
| 331 paused_ = true; | 333 paused_ = true; |
| 332 } | 334 } |
| 333 | 335 |
| 334 bool WebMediaPlayerMS::supportsSave() const { | 336 bool WebMediaPlayerMS::supportsSave() const { |
| 335 DCHECK(thread_checker_.CalledOnValidThread()); | 337 DCHECK(thread_checker_.CalledOnValidThread()); |
| 336 return false; | 338 return false; |
| 337 } | 339 } |
| 338 | 340 |
| 339 void WebMediaPlayerMS::seek(double seconds) { | 341 void WebMediaPlayerMS::seek(double seconds) { |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 NOTIMPLEMENTED(); | 503 NOTIMPLEMENTED(); |
| 502 return 0; | 504 return 0; |
| 503 } | 505 } |
| 504 | 506 |
| 505 size_t WebMediaPlayerMS::videoDecodedByteCount() const { | 507 size_t WebMediaPlayerMS::videoDecodedByteCount() const { |
| 506 DCHECK(thread_checker_.CalledOnValidThread()); | 508 DCHECK(thread_checker_.CalledOnValidThread()); |
| 507 NOTIMPLEMENTED(); | 509 NOTIMPLEMENTED(); |
| 508 return 0; | 510 return 0; |
| 509 } | 511 } |
| 510 | 512 |
| 511 void WebMediaPlayerMS::OnHidden() { | 513 void WebMediaPlayerMS::OnFrameHidden() { |
| 512 #if defined(OS_ANDROID) | 514 #if defined(OS_ANDROID) |
| 513 DCHECK(thread_checker_.CalledOnValidThread()); | 515 DCHECK(thread_checker_.CalledOnValidThread()); |
| 514 | 516 |
| 515 // Method called when the RenderFrame is sent to background and suspended | 517 // Method called when the RenderFrame is sent to background and suspended |
| 516 // (android). Substitute the displayed VideoFrame with a copy to avoid | 518 // (android). Substitute the displayed VideoFrame with a copy to avoid |
| 517 // holding on to it unnecessarily. | 519 // holding on to it unnecessarily. |
| 518 // | 520 // |
| 519 // During undoable tab closures OnHidden() may be called back to back, so we | 521 // During undoable tab closures OnHidden() may be called back to back, so we |
| 520 // can't rely on |render_frame_suspended_| being false here. | 522 // can't rely on |render_frame_suspended_| being false here. |
| 521 if (frame_deliverer_) { | 523 if (frame_deliverer_) { |
| 522 compositor_task_runner_->PostTask( | 524 compositor_task_runner_->PostTask( |
| 523 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, | 525 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, |
| 524 base::Unretained(frame_deliverer_.get()), true)); | 526 base::Unretained(frame_deliverer_.get()), true)); |
| 525 } | 527 } |
| 526 | 528 |
| 527 if (!paused_) | 529 if (!paused_) |
| 528 compositor_->ReplaceCurrentFrameWithACopy(); | 530 compositor_->ReplaceCurrentFrameWithACopy(); |
| 529 #endif // defined(OS_ANDROID) | 531 #endif // defined(OS_ANDROID) |
| 530 } | 532 } |
| 531 | 533 |
| 532 void WebMediaPlayerMS::OnShown() { | 534 void WebMediaPlayerMS::OnFrameClosed() { |
| 535 #if defined(OS_ANDROID) |
| 536 if (!paused_) { |
| 537 pause(); |
| 538 should_play_upon_shown_ = true; |
| 539 } |
| 540 |
| 541 if (delegate_) |
| 542 delegate_->PlayerGone(delegate_id_); |
| 543 |
| 544 if (frame_deliverer_) { |
| 545 compositor_task_runner_->PostTask( |
| 546 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, |
| 547 base::Unretained(frame_deliverer_.get()), true)); |
| 548 } |
| 549 #endif // defined(OS_ANDROID) |
| 550 } |
| 551 |
| 552 void WebMediaPlayerMS::OnFrameShown() { |
| 533 #if defined(OS_ANDROID) | 553 #if defined(OS_ANDROID) |
| 534 DCHECK(thread_checker_.CalledOnValidThread()); | 554 DCHECK(thread_checker_.CalledOnValidThread()); |
| 535 | 555 |
| 536 if (frame_deliverer_) { | 556 if (frame_deliverer_) { |
| 537 compositor_task_runner_->PostTask( | 557 compositor_task_runner_->PostTask( |
| 538 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, | 558 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, |
| 539 base::Unretained(frame_deliverer_.get()), false)); | 559 base::Unretained(frame_deliverer_.get()), false)); |
| 540 } | 560 } |
| 541 | 561 |
| 542 // Resume playback on visibility. play() clears |should_play_upon_shown_|. | 562 // Resume playback on visibility. play() clears |should_play_upon_shown_|. |
| 543 if (should_play_upon_shown_) | 563 if (should_play_upon_shown_) |
| 544 play(); | 564 play(); |
| 545 #endif // defined(OS_ANDROID) | 565 #endif // defined(OS_ANDROID) |
| 546 } | 566 } |
| 547 | 567 |
| 548 bool WebMediaPlayerMS::OnSuspendRequested(bool must_suspend) { | 568 bool WebMediaPlayerMS::OnIdleTimeout() { |
| 549 #if defined(OS_ANDROID) | |
| 550 if (!must_suspend) | |
| 551 return false; | |
| 552 | |
| 553 if (!paused_) { | |
| 554 pause(); | |
| 555 should_play_upon_shown_ = true; | |
| 556 } | |
| 557 | |
| 558 if (delegate_) | |
| 559 delegate_->PlayerGone(delegate_id_); | |
| 560 | |
| 561 if (frame_deliverer_) { | |
| 562 compositor_task_runner_->PostTask( | |
| 563 FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended, | |
| 564 base::Unretained(frame_deliverer_.get()), true)); | |
| 565 } | |
| 566 #endif // defined(OS_ANDROID) | |
| 567 return true; | 569 return true; |
| 568 } | 570 } |
| 569 | 571 |
| 570 void WebMediaPlayerMS::OnPlay() { | 572 void WebMediaPlayerMS::OnPlay() { |
| 571 // TODO(perkj, magjed): It's not clear how WebRTC should work with an | 573 // TODO(perkj, magjed): It's not clear how WebRTC should work with an |
| 572 // MediaSession, until these issues are resolved, disable session controls. | 574 // MediaSession, until these issues are resolved, disable session controls. |
| 573 // http://crbug.com/595297. | 575 // http://crbug.com/595297. |
| 574 } | 576 } |
| 575 | 577 |
| 576 void WebMediaPlayerMS::OnPause() { | 578 void WebMediaPlayerMS::OnPause() { |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 void WebMediaPlayerMS::ResetCanvasCache() { | 712 void WebMediaPlayerMS::ResetCanvasCache() { |
| 711 DCHECK(thread_checker_.CalledOnValidThread()); | 713 DCHECK(thread_checker_.CalledOnValidThread()); |
| 712 video_renderer_.ResetCache(); | 714 video_renderer_.ResetCache(); |
| 713 } | 715 } |
| 714 | 716 |
| 715 void WebMediaPlayerMS::TriggerResize() { | 717 void WebMediaPlayerMS::TriggerResize() { |
| 716 get_client()->sizeChanged(); | 718 get_client()->sizeChanged(); |
| 717 } | 719 } |
| 718 | 720 |
| 719 } // namespace content | 721 } // namespace content |
| OLD | NEW |